Вообще-то эти вещи компилятор отслеживать должен. Человек ведь на Си пишет. С этим регистром (ETIFR) я не сталкивался, но когда попытался через define вставить ассемблерную команду установки бита в порту F или G (то есть тоже лежит за пределами адресов, где работают sbi, cbi), компилятор ругнулся на ошибку. Вставив же туда аналогичную Си-команду типа PORTF|=0x01, получил рабочий код, т.е. компилятор эти вещи знает. Но я использую ICC. Здесь, похоже, глюк codevision. У Stepanich есть выход в виде ассемблерной вставки. Можно, конечно, попытаться найти более свежую версия компилятора либо сервис-пак. Такие вещи производители быстро находят и исправляют. Я, например, не помню уж с чем ругался на AVR-Studio (не симулировала какую-то периферию), потом вспомнил, что в Аргуссофте с программатором дали диск, на нем куча инфы и что-то из софта. Так вот, там оказался и сервис-пак, который этот глюк исправил.
|