Доброго времени суток. Раньше жил - не тужил, именовал константы с помощью дефайнов и горя не знал. Сегодня вычитал, что это неправильно, так делают лузеры, и им потом девушки не дают... Надо исправляться Итак, было:
Код:
#define DEFAULT 100;
Далее в EEPROM объявляется переменная с этим значением:
Код:
unsigned char EEMEM mode = DEFAULT;
И все чудесно работает. Переделал так:
Код:
const unsigned char DEFAULT = 100;
Теперь на строчку с объявлением переменной в EEPROM ругается "error: initializer element is not constant". Компилятор GCC. Что я сделал не так ? Если что, 5 правило отсюда http://chipenable.ru/index.php/embedded ... rules.html
Раньше жил - не тужил, именовал константы с помощью дефайнов и горя не знал. Сегодня вычитал, что это неправильно, так делают лузеры, и им потом девушки не дают...
не читайте глупости
Пока_без_кота писал(а):
Переделал так:
вы объявили переменную, которая по умолчанию получает значение 100 и не может быть изменена в дальнейшем.
Пока_без_кота писал(а):
Теперь на строчку с объявлением переменной в EEPROM ругается
и правильно делает, так как на этапе компиляции переменные не доступны.
верните, как было, и не парьте мозг
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
вообще там все разумно, но стоит добавить "где это возможно". И компилятор должен быть достаточно мозговитый и со включенными оптимизациями - иначе под эту константу-переменную (она с точки зрения языка таки переменная с неизменным значением) выделится память. вот тот кусочек кода, gcc с разной оптимизацией -O0 Спойлер
Это выдал кодогенератора, мол заготовка. Определение этого типа нет.
Если код собирается - его не может не быть. Гляньте в препроцессорный выхлоп - возможно для этого придётся включить временно опцию preprocess only в настройках проекта. В папочке с временными файлами компиляции загляните в разные типы - они или *.i или *.pre, иногда вместо объектников - у разных тулчейнов по разному.
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Что значит "уходит в минус"? Ну и напоминаю: по умолчанию все операнды выражения автоматически приводятся к int (или к типу более "широкого" операнда). поэтому при сравнении x с 1 и переменная х, и константа 1 становятся ЗНАКОВЫМИ. со всеми вытекающими.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения