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

 
 
 
Reply to this topicStart new topic
> IAR 5.3, Кто измеяет переменные?
an_ga
сообщение Nov 24 2009, 05:36
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 8-11-08
Из: Киев
Пользователь №: 41 471



Доброго времени суток. При разработке программы для tiny2313 наткнулся на следующую проблемму: изменяются значения глбальных переменных. Влоть до того:

unsigned char ButtonNumber;
.
.
.
if(cmd==Play)
{
Mode=pass;//режим ввода 7мизначного пароля
ButtonNumber=0;
Beep();
}

void Beep()
{
Buzzer_ON;//вкл. пищалку
delay_ms(200);//использует __delay_cycles
Buzzer_OFF;//выкл. пищалку
}

После Beep() ButtonNumber уже не ноль а какое-то число. Есть отработки прерываний, но они переменную не трогают. Закономерности найти не могу. Подскажите, пожалуйста, где копать. Большое спасибо.

Сообщение отредактировал an_ga - Nov 24 2009, 05:37
Go to the top of the page
 
+Quote Post
kosyak©
сообщение Nov 24 2009, 08:17
Сообщение #2


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

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



попробуте объявить ButtonNumber как volatile:
volatile unsigned char ButtonNumber;
компилятор над такими переменными не будет проводить оптимизаций...если ситуация не изменится, попробуйте увеличить стэк...
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 24 2009, 08:23
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Стреляете память

Цитата(kosyak© @ Nov 24 2009, 11:17) *
попробуте объявить ButtonNumber как volatile:
volatile unsigned char ButtonNumber;
компилятор над такими переменными не будет проводить оптимизаций...если ситуация не изменится, попробуйте увеличить стэк...


Даже если это временно поможет, то это не решение проблемы. Она обязательно вылезет позже

Сообщение отредактировал Dima_G - Nov 24 2009, 08:21
Go to the top of the page
 
+Quote Post
kosyak©
сообщение Nov 24 2009, 08:32
Сообщение #4


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

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Цитата
Даже если это временно поможет...

Хм...если проблема в недостаточной глубине стэка, то поможет.
Если проблема в оптимизации, по какой либо причине, компилятором работы с переменной - то тоже поможет...
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 24 2009, 08:38
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(kosyak© @ Nov 24 2009, 12:32) *
Хм...если проблема в недостаточной глубине стэка, то поможет.
Если проблема в оптимизации, по какой либо причине, компилятором работы с переменной - то тоже поможет...


Переменная - глобальная
Увеличение величины стека поможет только в том случае, если его переполнение вызывает "наползание" на эту переменную

Предпологаю, что все проще - автор где-то неаккуратно с массивами / указателями работает
Go to the top of the page
 
+Quote Post
kosyak©
сообщение Nov 24 2009, 08:48
Сообщение #6


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

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



2Dima_G: Мы с Вами строим всего лишь предположения и на ваше предложение исправить работу с "массивами / указателями " я могу сказать примерно так же как Вы на мое со стэком - Это поможет только в том случае если автор не правильно работает с массивами/указателями...
Go to the top of the page
 
+Quote Post

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

 


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


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