roboforum.ru

Технический форум по робототехнике.

Внешние прерывания Atmega8

Re: Внешние прерывания Atmega8

Kip » 10 июл 2008, 17:16

blindman писал(а):Для меня новость, что sei это "фигня". Может порадовать этой новостью разработчиков контроллера? Наверно, по твоему фигня также и то, что твой код будет исполняться в 3 раза дольше? И то, что тот, кто будет потом читать твой код, должен помнить, что I это именно седьмой бит?



Фигня не по сути, а по применению. Вставка ассемблерного кода делается так: #asm("sei"), а у паренька в последнем варианте просто sei. При этом правильный варинант не компилится.
Я в своей совсем не долгой практике программирования пользовался всегда SREG |= (1 << 7). А почему он будет исполняться в три раза дольше, очень хочу узнать?

Re: Внешние прерывания Atmega8

blindman » 10 июл 2008, 17:23

У паренька как раз все нормально. Смотрим, какой компилятор он использует, и осознаем, что в GCC фигней будет как раз #asm

Если очень хочешь узнать - скомпилируй свой код, потом его дизассемблируй. Если не знаешь как, помогу.

Re: Внешние прерывания Atmega8

Kip » 10 июл 2008, 18:07

blindman писал(а):У паренька как раз все нормально. Смотрим, какой компилятор он использует, и осознаем, что в GCC фигней будет как раз #asm

Если очень хочешь узнать - скомпилируй свой код, потом его дизассемблируй. Если не знаешь как, помогу.


Хорошо, обращусь в личку.

При програмированнии микропроцессоров мы устанавливаем кучу битов в различных регистрах в СИшном коде.
Чтож теперь всё переводить на ассемблерные вставки?
Какой смысл писать sei(), выгадавая время, если перед этим мы устанавливаем биты таким нерациональным образом :GICR|=0x40, MCUCR=0x02,GIFR=0x40?

Re: Внешние прерывания Atmega8

blindman » 10 июл 2008, 18:39

В чем смысл я написал выше. И неважно, что в данном конкретном случае нам пофиг, что прерывания будут разрешены на два такта позже - нужно сразу учиться делать правильно. В данном случае использовать sei правильно во всех отношениях - короче, быстрее, читабельнее.


Rambler\'s Top100 Mail.ru counter