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

 
 
> возврат параметров из прерывания, как передать измененные переменные из прерывания в программу
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
Ответов
robix
сообщение Mar 2 2011, 08:30
Сообщение #2


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

Группа: Свой
Сообщений: 126
Регистрация: 15-08-06
Из: Москва
Пользователь №: 19 556



Всем спасибо. Пока вышел из ситуации использованием объявления переменной с volatile.
Но, как я понял, эта проблема (c volatile) относится не только к прерываниям. Как понять когда его нужно использовать когда нет!?
У кого нить есть соображения по этому поводу? Пока, как я понимаю, его нужно пихать везде, где к одной и той же переменной нужно обращаться из разных областей видимости или может только для совместного использования с функциями оно нужно?
Go to the top of the page
 
+Quote Post
barabek
сообщение Mar 2 2011, 12:41
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(robix @ Mar 2 2011, 18:30) *
Всем спасибо. Пока вышел из ситуации использованием объявления переменной с volatile.
Но, как я понял, эта проблема (c volatile) относится не только к прерываниям. Как понять когда его нужно использовать когда нет!?


Не совсем то, но в тему из NII software developers handbook

Код
For C programmers, note that declaring a pointer as volatile does not


cause accesses using that volatile pointer to bypass the data cache. The
volatile keyword only prevents the compiler from optimizing out
accesses using the pointer.


This volatile behavior is different from the methodology for
the first-generation Nios processor.


И, кажется, еще где-то видел (могу ошибаться), но как я понял слово volatile не всегда спасает от считывания старой (не актуальной) величины из кэша. Если ошибаюсь - поправьте, самому интересно.





Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 2 2011, 14:23
Сообщение #4


Гуру
******

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



Цитата(barabek @ Mar 2 2011, 18:41) *
И, кажется, еще где-то видел (могу ошибаться), но как я понял слово volatile не всегда спасает от считывания старой (не актуальной) величины из кэша. Если ошибаюсь - поправьте, самому интересно.

не спасает, за кэшем надо следить
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 2 2011, 16:41
Сообщение #5


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

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



Цитата(vadimuzzz @ Mar 2 2011, 17:23) *
не спасает, за кэшем надо следить


За кешем надо следить только, если не процессор пишет/читает данные, например DMA.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 2 2011, 23:39
Сообщение #6


Гуру
******

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



Цитата(sergeeff @ Mar 2 2011, 22:41) *
За кешем надо следить только, если не процессор пишет/читает данные, например DMA.

у меня все системы с DMA. и не с одним sm.gif (неужели ниос кто-то без DMA применяет?)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 3 2011, 10:51
Сообщение #7


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

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



Цитата(vadimuzzz @ Mar 3 2011, 02:39) *
у меня все системы с DMA. и не с одним sm.gif (неужели ниос кто-то без DMA применяет?)


Никто не мешает буфера для DMA разместить в некешируемой области, к примеру.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 3 2011, 10:55
Сообщение #8


Гуру
******

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



Цитата(sergeeff @ Mar 3 2011, 16:51) *
Никто не мешает буфера для DMA разместить в некешируемой области, к примеру.

что-то не понял как, поясните
Go to the top of the page
 
+Quote Post
alexPec
сообщение Mar 3 2011, 14:28
Сообщение #9


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Mar 3 2011, 13:55) *
что-то не понял как, поясните

А старший битик в адресе не означет некэшируемую область? По моему Вы мне про это и говорили летом...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- robix   возврат параметров из прерывания   Mar 1 2011, 17:28
- - sergeeff   Что-то мутное у вас многое в программе. 1. Функци...   Mar 1 2011, 18:23
|- - vadimuzzz   Цитата(sergeeff @ Mar 2 2011, 00:23) 1. Ф...   Mar 2 2011, 02:46
- - 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
- - vadimuzzz   Цитата(alexPec @ Mar 3 2011, 20:28) А ста...   Mar 3 2011, 15:26


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

 


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


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