unalex писал(а):да дело не в delay, это просто пример
смущает только то что #define выполняет замену текста перед компиляцией, а переменная count меняется во время работы программы
и что?
у вас вместо LEDSTATE(LED(count), 1) после препроцессора будет (1==0)?(PORTA&=~(1<<(LED(count)))):(PORTA|=(1<<(LED(count))))
и вместо LEDSTATE(LED(count), 0) будет после препроцессора будет (0==0)?(PORTA&=~(1<<(LED(count)))):(PORTA|=(1<<(LED(count))))
из-за того что результат сравнения можно предсказать заранее то:
-первая строка с оптимизируется в (PORTA|=(1<<(LED(count))))
-вторая строка с оптимизируется в (PORTA&=~(1<<(LED(count))))
#define - это не константа в программе, это строка в тексте программы для компиляции !
при старте компиляции - препроцессором просто происходит замена строк, и потом код программы компилируется..
если в define константа - то компилятор будет использовать это значение как константу, если это код программы (как в вашем случае) - компилятор вставит в нужную часть программы этот код и потом откомпилирует весь листинг программы как программу (прямо масло масленное
