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

 
 
> Работа с прерываниями в WinAVR, Глобальные переменные в main и прерываниях
studert
сообщение Oct 17 2008, 11:07
Сообщение #1


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

Группа: Свой
Сообщений: 76
Регистрация: 6-03-05
Из: Новосибирск
Пользователь №: 3 121



Задаю благозвучное название прерывания
#define PacketReceiveComplete INT5_vect

Объявлена глобальная переменная, значение которой
uint64t_t DestMAC;

Обработчик прерывания, функция getDestMAC записывает в переменную DestMAC нужные данные
ISR(PacketReceiveComplete){
cli();
getDestMAC(&DestMAC);
sei();
}
int main(void){
...
printf("%lx",DestMAC);
}
Это не работает, печатает мусор,причем попытки изменить DestMAC main тоже неудачны, она не меняется. Что я делаю не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Oct 17 2008, 11:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



volatile забыли. Иначе оптимизатор может выкинуть чтение перед выдачей.

Непонятно зачем cli в прерывании. Хотя смотря как вы вектор объявляли.
Go to the top of the page
 
+Quote Post
studert
сообщение Oct 17 2008, 11:45
Сообщение #3


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

Группа: Свой
Сообщений: 76
Регистрация: 6-03-05
Из: Новосибирск
Пользователь №: 3 121



Цитата(SasaVitebsk @ Oct 17 2008, 18:27) *
volatile забыли. Иначе оптимизатор может выкинуть чтение перед выдачей.

Непонятно зачем cli в прерывании. Хотя смотря как вы вектор объявляли.

Ну cli это я от незнания поставил, первый раз с прерываниями работаю в этом компиляторе, до этого на асме только использовал. Я правильно понял, что компилятор сам поставит cli/sei? А volatile что-то тоже не помог. Может есть у кого пример, в котором по внешнему прерыванию изменяется какая-нибудь переменная, которая потом выводится в main?

Сообщение отредактировал studert - Oct 17 2008, 11:53
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- studert   Работа с прерываниями в WinAVR   Oct 17 2008, 11:07
- - _dem   Код#define PacketReceiveComplete INT5_vect volati...   Oct 17 2008, 11:12
- - Палыч   Цитата(studert @ Oct 17 2008, 14:07) Что ...   Oct 17 2008, 11:14
|- - studert   Цитата(Палыч @ Oct 17 2008, 18:14) Попроб...   Oct 17 2008, 11:28
|- - Палыч   Цитата(studert @ Oct 17 2008, 14:28) Так ...   Oct 17 2008, 11:46
- - aesok   Цитата(studert @ Oct 17 2008, 15:07) Объя...   Oct 17 2008, 11:33
|- - Палыч   Вы уверены, что функция printf выполняется после т...   Oct 17 2008, 11:36
|- - studert   Цитата(aesok @ Oct 17 2008, 18:33) avr-li...   Oct 17 2008, 11:55
|- - Kernigan   Цитата(aesok @ Oct 17 2008, 14:33) Нельзя...   Oct 17 2008, 12:04
|- - aesok   Цитата(Kernigan @ Oct 17 2008, 16:04) Цит...   Oct 17 2008, 17:20
|- - demiurg_spb   Цитата(aesok @ Oct 17 2008, 21:20) Пролог...   Oct 17 2008, 18:51
|- - aesok   Цитата(demiurg_spb @ Oct 17 2008, 22:51) ...   Oct 17 2008, 19:14
|- - ReAl   Цитата(demiurg_spb @ Oct 17 2008, 21:51) ...   Oct 17 2008, 20:44
- - mandrew   Цитата(studert @ Oct 17 2008, 15:07) Зада...   Oct 17 2008, 12:05
|- - studert   Цитата(mandrew @ Oct 17 2008, 19:05) 1) А...   Oct 17 2008, 12:27
|- - MrYuran   Цитата(studert @ Oct 17 2008, 16:27) Прин...   Oct 17 2008, 12:48
- - Палыч   Никто не мешает разбить 64 бита на несколько ulong...   Oct 17 2008, 13:31
- - mdmitry   В каком виде надо MAC-адрес выводить? В зависимост...   Oct 17 2008, 13:34
- - _dem   Studert, а разве приведенный мною код у Вас не раб...   Oct 17 2008, 16:23


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

 


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


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