ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
10307
Alex+B (26.05.2004 10:20, просмотров: 729)
Локальные переменные и вызов процедур из прерывания в CrossStudio 1.1.4(lpc2106) Имеем программку написанную на C++, в которой имеется обработчик прерывания(таймерного). Вот так: void test() //sub-function { int a; a = 15; } void timer0ISR(void) __attribute__ ((interrupt ("IRQ"))); void timer0ISR(void) { int n = 7; for (int i = 0; i<10; ++i) { test(); } /* Clear the timer 0 interrupt */ T0IR = 0xFF; /* Update VIC priorities */ VICVectAddr = 0; } При отладке видно что после вызова test значение n и i становятся "левыми". Более подробный разбор полетов - включенный режим отладки Interleaved и просмот в memory адресов где лежат локальные переменные показывает следующее: При входе в timer0ISR значение SP уменьшается на размер необходимый для сохранения регистров плюс 8 байт для хранения переменных n и i и становится (в моем случае) 0x400024f8. Но если в wath`е набрать &i и &n то видно что их адреса 0x400024f0 и 0x400024f4. Во время вызова test опять происходит сохранение в стеке регистров (при этом стек уменьшается) в адреса 0x400024f8 - 0x400024e0 при этом затираются значения локальных переменных n и i. что делать?