Всем привет! заметил странную особенность в программировании NIOSII. При вызове обработчика прерывания передаю ему контекст в виде переменной, похоже он передается по значению, поэтому переменная не меняется при возврате в программу. Ну это еще ладно, я изменяю значение глобальной переменной в обработчике прерывания, по возврату из прерывания ее значение не меняется. И самый прикол, такое ощущение, что при обращении к глобальной переменной в обработчике создается постоянная переменная, которая видна только в обработчике прерывания. Кто нибудь может прокомментировать такое поведение? Как мне вернуть переменную из обработчика прерывания?
#include "system.h" #include "alt_types.h" #include "altera_avalon_pio_regs.h" #include "sys/alt_irq.h"
alt_u8 led = 0x0; volatile int i,j;
static void timer_0_isr (void* context){ led++; IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led); IOWR_16DIRECT(TIMER_0_BASE, 0, 0); }
int main(void) { IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SW_BASE, 0xf); alt_ic_isr_register(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ, timer_0_isr, led, 0);
while(1){ for(i = 0; i < 5000000; i++); led = 0; IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led); } return 0; }
Сообщение отредактировал robix - Mar 1 2011, 17:30
|