|
возврат параметров из прерывания, как передать измененные переменные из прерывания в программу |
|
|
|
Mar 1 2011, 17:28
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 15-08-06
Из: Москва
Пользователь №: 19 556

|
Всем привет! заметил странную особенность в программировании 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
|
|
|
|
|
 |
Ответов
|
Mar 1 2011, 18:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Что-то мутное у вас многое в программе. 1. Функция обработчика прераваний не может иметь параметров. В функцию параметр передается через регистр или стек, в зависимости от процессора и/или компилятора, и делает это вызывающий контекст. Посему Код static void timer_0_isr (void); 2. Вас интересует переменная led. Ну и объявите ее Код volatile int led = 0x0; и будет вам счастье.
|
|
|
|
|
Mar 2 2011, 02:46
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(sergeeff @ Mar 2 2011, 00:23)  1. Функция обработчика прераваний не может иметь параметров. В функцию параметр передается через регистр или стек, в зависимости от процессора и/или компилятора, и делает это вызывающий контекст. почему это не может? еще как может: Цитата alt_ic_isr_register() ... Prototype: int alt_ic_isr_register (alt_u32 ic_id, alt_u32 irq, alt_isr_func isr, void* isr_context, void* flags) ... The function arguments are as follows: ■ ic_id is the interrupt controller ID as defined in system.h, identifying the external interrupt controller in the daisy chain. This argument is ignored if the external interrupt controller interface is not implemented. ■ irq is the IRQ number, as defined in system.h, identifying the interrupt to register. ■ isr is the function that is called when the interrupt is accepted. ■ isr_context is the input argument to isr. isr_context points to a data structure associated with the device driver instance. ■ flags is reserved. The ISR function prototype is defined as follows: typedef void (*alt_isr_func) (void* isr_context); собственно, предполагается, что все переменные, который необходимы внутри обработчика прерывания, передаются через структуру context
|
|
|
|
Сообщений в этой теме
robix возврат параметров из прерывания Mar 1 2011, 17:28 sergeeff Да уж, NIOS II это круто.
В функции
Кодextern i... Mar 2 2011, 07:40 ViKo С NIOS не знаком. Но, как и sergeeff, недоумеваю. ... Mar 2 2011, 08:16 vadimuzzz Цитата(ViKo @ Mar 2 2011, 14:16) Как в пр... Mar 2 2011, 08:47 robix Цитата(ViKo @ Mar 2 2011, 11:16) С NIOS н... Mar 2 2011, 08:48 robix Всем спасибо. Пока вышел из ситуации использование... Mar 2 2011, 08:30 barabek Цитата(robix @ Mar 2 2011, 18:30) Всем сп... Mar 2 2011, 12:41  vadimuzzz Цитата(barabek @ Mar 2 2011, 18:41) И, ка... Mar 2 2011, 14:23   sergeeff Цитата(vadimuzzz @ Mar 2 2011, 17:23) не ... Mar 2 2011, 16:41    vadimuzzz Цитата(sergeeff @ Mar 2 2011, 22:41) За к... Mar 2 2011, 23:39     sergeeff Цитата(vadimuzzz @ Mar 3 2011, 02:39) у м... Mar 3 2011, 10:51      vadimuzzz Цитата(sergeeff @ Mar 3 2011, 16:51) Никт... Mar 3 2011, 10:55       alexPec Цитата(vadimuzzz @ Mar 3 2011, 13:55) что... Mar 3 2011, 14:28        vadimuzzz Цитата(alexPec @ Mar 3 2011, 20:28) А ста... Mar 3 2011, 15:26
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|