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

 
 
> Работа с прерываниями в 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
Ответов
mandrew
сообщение Oct 17 2008, 12:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 28-09-05
Пользователь №: 9 021



Цитата(studert @ Oct 17 2008, 15:07) *
Задаю благозвучное название прерывания
#define PacketReceiveComplete INT5_vect

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

Обработчик прерывания, функция getDestMAC записывает в переменную DestMAC нужные данные
ISR(PacketReceiveComplete){
cli();
getDestMAC(&DestMAC);
sei();
}
int main(void){
...
printf("%lx",DestMAC);
}
Это не работает, печатает мусор,причем попытки изменить DestMAC main тоже неудачны, она не меняется. Что я делаю не так?


1) А просто printf у вас работает, если не использовать обработчиков прерываний по приему, по окончании передачи, по свободному регистру UDRn?
Go to the top of the page
 
+Quote Post
studert
сообщение Oct 17 2008, 12:27
Сообщение #3


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

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



Цитата(mandrew @ Oct 17 2008, 19:05) *
1) А просто printf у вас работает, если не использовать обработчиков прерываний по приему, по окончании передачи, по свободному регистру UDRn?

Принтф работает, выводит все как положено, если 64 битные данные не кормить.
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
- - SasaVitebsk   volatile забыли. Иначе оптимизатор может выкинуть ...   Oct 17 2008, 11:27
|- - studert   Цитата(SasaVitebsk @ Oct 17 2008, 18:27) ...   Oct 17 2008, 11:45
- - 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
|- - 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 Текстовая версия Сейчас: 29th June 2025 - 04:34
Рейтинг@Mail.ru


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