реклама на сайте
подробности

 
 
> возврат параметров из прерывания, как передать измененные переменные из прерывания в программу
robix
сообщение Mar 1 2011, 17:28
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Mar 1 2011, 18:23
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Что-то мутное у вас многое в программе.

1. Функция обработчика прераваний не может иметь параметров. В функцию параметр передается через регистр или стек, в зависимости от процессора и/или компилятора, и делает это вызывающий контекст. Посему

Код
static void timer_0_isr (void);


2. Вас интересует переменная led. Ну и объявите ее

Код
volatile int led = 0x0;


и будет вам счастье.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 2 2011, 02:46
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016