ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
856709 Топик полностью
fk0, легенда (18.07.2018 00:17, просмотров: 99) ответил Двоешник на Да-ну-на, Учитель! А почему когда константа определена через #define HSE_VALUE ((uint32_t)8000000) все работает?
Mестные не в курсе, чтоб помимо IAR с его графическими окошками есть операционная система, и в ней некая программа типа shell, через которую происходит запуск компилятора из окошечного интерфейса. И попытка натолкать много всяких символов в окошечный интерфейс может кончится тем, что он не фильтрует и не экранирует их, и при запуске компилятора что-нибудь трансформируется как-нибудь не так. Это первая потенциальная проблема. И я не знаю что там, если винды (то наверное пофиг), а если unix, то будет сходу ошибка (из-за скобок), поэтому дефайны берут в кавычки. Но в одинарных кавычках не работает экранирование, а в двойных нужно экранировать ещё кучу вещей (доллар, обратную кавычку и двойную кавычку, да всё не упомнишь). А вторая проблема, что в выражении #if ((uint32_t)8000000)==8000000 приведение типа использовать нельзя -- препроцессор только про арифметику знает, а про типы понятия не имеет, как и про синтаксис языка C.
[ZX]