Перейти к содержанию
    

Какова логика работы компилятора Atmel studio

Вообще, в AVR для битовых условий есть всякие sbrc|sbrs|sbic|sbis.

Как на С лучше всего помочь компилятору задействовать эти инструкции?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Причина не в переменной. По стандарту языка компилятор перед выполнением операции расширяет байт до целого нулями. Которые после инвертирования превращаются в "непредвиденные" единицы.

Я понял, но этот ноль должен был операцией или установиться в единицу и затем инвертироваться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скобки-то зачем? Приоритет операций никто не отменял.

Для однообразности. Иногда TIM_SR_CC1IIF не простая константа.

Кста, она тоже что-то типа

#define    TIM_SR_CC1IIF                    (1UL)

Я не хвастаюсь, но скобочками у меня удобрено сильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для однообразности. Иногда TIM_SR_CC1IIF не простая константа.

Все "непростые" должны быть записаны в виде:

#define TIM_SR_CC1IIF (...)

Если у Вас не так, то Вам следует сильно задуматься о своём стиле. :laughing:

 

Я не хвастаюсь, но скобочками у меня удобрено сильно.

Когда надо разобраться в каком-то коде и вижу лес (да даже не лес, а чащу) типа:

if (((a)+(x)) | (((y)+((d)*(e))) << 1))

то сначала выкашиваю этот бурелом, иначе в этих скобочках теряется логика выражения.

Это как с шевелюрой - пока её не сбрить, операцию на мозге не выполнить качественно. B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...