0
эээ SET_PIN ваш в статье не должен работать!!! Вы что код не проверили или у вас действительно работает?

#define LED_PIN B, 4
#define SET_PIN(PORT_LETTER, PIN) PORT ## PORT_LETTER |= (1 << PIN)
…
SET_PIN(LED_PIN);
// - - > 
// PORTB |= (1 << 4);
// PORTB - тоже развернётся, если это макрос

Смотрите почему: препроцессор первым делом всегда разворачивает макросы в которых заюзано ## и #(это написано и в документации и вы сами можете попробовать посмотреть выброс), по этому при первом проходе он развернёт именно SET_PIN
и получится

PORTLED_PIN |= (1 << О_о);
а пин ему и подавно не откуда взять! Ну а второй проход уж будет бессмыслен, потому что LED_PIN уже нету в тексте программы, а тот кусок, который в PORTLED_PIN уже намертво пределан и препроцессором не рассматривается.
  • avatar
  • dotnot
  • 01 октября 2012, 01:58