в общем хочу поделиться некоторым вопросом - мыслей:
на некотором ресурсе по AVR есть такая фраза:
volatile - если нужно предотвратить повреждение содержимого переменной в прерывании, компилятор просто не будет размещать эту переменную ни в одном из 32-х регистров общего назначения и не будет пытаться выкинуть её при оптимизации кода.
у меня же на практике - наоборот - переменная обьявленная как volatile - нормально модифицируется (меняется) в подпрограмме обработки прерывания
компилил в WinAVR камушек ATmega8
volatile C AVR Atmega8
- Реклама
- xelos
- Потрогал лапой паяльник
- Сообщения: 336
- Зарегистрирован: Пн мар 20, 2006 13:05:08
- Контактная информация:
не так интерпретируешь
переменная, не объявленная как volatile может быть размещена как в регистре, так и в памяти.
если она размещена в регистре, то этот регистр может быть изменен в ходе выполнения какого-то прерывания без твоего ведома, т.е. значение может быть изменено самим контроллером.
а volatile указывает что переменная должна быть обязательно размещена в памяти, т.е. по служебным надобнастям мк она изменена не будет.
переменная, не объявленная как volatile может быть размещена как в регистре, так и в памяти.
если она размещена в регистре, то этот регистр может быть изменен в ходе выполнения какого-то прерывания без твоего ведома, т.е. значение может быть изменено самим контроллером.
а volatile указывает что переменная должна быть обязательно размещена в памяти, т.е. по служебным надобнастям мк она изменена не будет.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
-
Gena
Volative
А шоб программа обработки прерывания не гавнякала регистры-пишем при входе:
push r16
in r16,SREG
push r16
push r17
push r18
.............тута сама подпрограмма
..............
pop r18 ;востанавливаем регистры при выходе
pop r17
pop r16
out SREG,r16
pop r16
rety
или другие регистры, которые использует подпрограмма обработки. прерывания.
push r16
in r16,SREG
push r16
push r17
push r18
.............тута сама подпрограмма
..............
pop r18 ;востанавливаем регистры при выходе
pop r17
pop r16
out SREG,r16
pop r16
rety
или другие регистры, которые использует подпрограмма обработки. прерывания.
- Реклама

