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

 
 
> Я в тупике. IAR C., может кто подскажет ниточку ...
SasaVitebsk
сообщение Jul 6 2006, 21:46
Сообщение #1


Гуру
******

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



Проблема такая.
Прога в JTAG MK2 работает. Выключаешь/включаешь питание - нет. Точнее почти полностью работает.
Причина выяснена. Имеется одна переменная, которая объявлена в начале файла таким образом:
uint8_t static NumbActiveKom=0; // Текущее число активных команд

Эта переменная в голове инкрементируется в виде:
NumbActiveKom++; // Ввод команды завершён

А в прерывании декрементируется типа:
NumbActiveKom--; // Сократить число активных команд

Дальше я с помощью отладочного вывода выяснил, что в прерывании она уменьшается (и сохраняется от прерывания к прерыванию), а в голове увеличивается. Короче ведёт себя так, как будто это две различных переменных. Даже не совсем так. Сначала всё нормально в голове она увеличивается до 10. Потом в прерывании она должна уменьшатся и по мере уменьшения в голове должны подгружаться новые команды, а переменная должна увеличиваться. Но этого не происходит. Переменная уменьшается и в прерывании читается правильно 10,9,8,7... а в голове читается 10 на постоянку! Как будто значение переменной с прерывания не передаётся в голову.

Я попробовал остановить в JTAG прогу в нулевом адресе и "загадить" всё озу "FF". А потом запустить прогу на отладку в JTAG. Не помогает. Работает прекрасно. Как будто в JTAG своя прога, а так - своя. Пересбрасывать тоже не помогает. Надо вкл./выкл. МК. Причём на такое время, чтобы озу похезалось.

Может кто подскажет как такую хрень вычислить? Вся остальная прога работает как часы. Одна переменная только. sad.gif
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 17)
SasaVitebsk
сообщение Jul 7 2006, 22:48
Сообщение #16


Гуру
******

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



Цитата(rezident @ Jul 7 2006, 22:19) *
Цитата
Причина выяснена. Имеется одна переменная, которая объявлена в начале файла таким образом:
uint8_t static NumbActiveKom=0; // Текущее число активных команд

Эта переменная в голове инкрементируется в виде:
NumbActiveKom++; // Ввод команды завершён

А в прерывании декрементируется типа:
NumbActiveKom--; // Сократить число активных команд

Дальше я с помощью отладочного вывода выяснил, что в прерывании она уменьшается (и сохраняется от прерывания к прерыванию), а в голове увеличивается. Короче ведёт себя так, как будто это две различных переменных.


Если main и процедура прерывания описаны в разных Си-шных модулях, то так и будет. Переменная типа static имеет область видимости в пределах того модуля, где она описана.
Объявите ее в модуле с main-ом как

Код
volatile uint8_t NumbActiveKom=0;


а в модуле с прерыванием как

Код
extern volatile uint8_t NumbActiveKom;


и все будет инкрементировать и декрементироваться как вам хотелось.


К сожелению описаны в одном. Переменная описана вверху файла до прерывания и майн. В прерывании я её естественно не описывал. После выходных засяду поплотнее. Ну выясню конечно же. Просто, я думал, может каким то образом из под запущенной проги можно данные на JTAG передать если из под него не запускалось.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 8 2006, 18:01
Сообщение #17


Гуру
******

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



Ошибку не нашёл. Чем бы я не забивал озу в JTAG всё работает. sad.gif

Прикол вот ещё в чём. Сделал версию "release" и напрямую зашил в кристал (ч/з AVREAL) - тоже работает. Вот и думай после этого что хочешь. sad.gif
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jul 8 2006, 21:25
Сообщение #18


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Может, просто debug-версия с точками останова, а Вы её в каменьwink.gif?


--------------------
aka Vit
Go to the top of the page
 
+Quote Post

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

 


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


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