Показать сообщение отдельно
Старый 22.07.2019, 00:45   #263
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
Arrow

Цитата:
Сообщение от Alex15BV Посмотреть сообщение
И это только начало... Оно потянет за собой...
Не ту переменную ты взялся заменять
Дело в том, что дефайн ничего не хранит - нет в памяти "reset USB hub after start", есть только воздух, 0 в коде прошивки. А ты переменные сохраняешь в структуру и ЕЕПРОМ. Конечно же он ругается.
А вот FlagRegister1 в моём примере - вот он физический. И при записи в ЕЕПРОМ он будет сохранять актуальные значения восьми флагов сразу...
И текущие состояния из него читаются например:
if (bitRead(PEREM1) == 0) then...
Про регистры ... это отдельная тема. Я раньше вообще делал так:
PHP код:
uint8_t  PORTBregistr 0;               // Если у нас есть 8-битная переменная PORTBregistr, то мы можем присвоить её значение регистру PORTx, и тем самым установить ножки микроконтроллера в состояние, соответствующее значению переменной PORTBregistr 
А потом сразу регистр в порт писал, командами ассемблера. Типа это быстрее, правильнее и вообще по феншую. А потом я решил сделать проект совместимым с СТМ32 . Думаю продолжать не надо.
Можно по этому же принципу паковать флаги состояний в 8 бит.
Но это надо перепахивать, отлаживать и тестировать код заново, и к тому же он станет еще труднее читаемый.
А по выходу мы будем иметь тот же самый блок питания, но с меньшим потреблением памяти. (На 100 байт?)
При этом больше килобайта свободно вот прямо сейчас.

Про дефайны.
Так в том то и дело, что дефайн тупо заменяет "ИМЯ_ПОСТОЯННОЙ" на присвоенное ему значение при компилировании. Но это же делает компилятор, когда видит const .
А у меня почти все значения переменные, хотя бы потому, что настройки пользователя можно:
а - брать из прошивки
б - писать в ЕЕПРОМ
в - читать из ЕЕПРОМ
Компилятор поэтому и ругается, что конфликт с массивом идёт.
... Хотя ты в принципе это же и написал ...
oleg707 вне форума   Ответить с цитированием