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

 
 
> CVAVR "повреждене" локальных переменных
MKdemiurg
сообщение Sep 15 2011, 15:01
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Пишу прожэкт на CоdeVisionAVR 1.25.5 под atmega128A.

Столкнулся с проблемой , что по неопределённым причинам портитятся значения локальных переменных. Т.е. проблема выглядит так :
...................................................
void modem_control(void)
{
unsigned char step;
unsigned char conflict;
unsigned char atc_retry_number;
unsigned char repeat;
// специально присваиваю значения отдельно от инициализации
step=1;
atc_retry_number=3;
repeat=3;
conflict=0;

while (step!=100)
{ OUT_COM0_CHAR(conflcit); // вывод в уарт переменной conflict. Вместо 0x00 приходит 0xC0 - соответственно выполнение кода сбивается...
..............................................................................

эффект периодический, причину возникновения так и не нашёл, НО смена порядка инициализации переменных меняет и переменную , которая "глючит".. Такая же лажа периодически появляется в функции main. Стека всего то 190/1024 использую. Может оптимизатор глючит- но тогда бы проблема была более менее периодичной...

Проект не то чтобы большой( 10К строк и 20К флеша), но переделывать под другой компилятор долго и осваивать нужно, а время поджимает.

Подскажите где могут быть грабли. Может сама версия нестабильна? Слышал что 1.25.5 может генерить неправильный код... Подскажите более менее нормальную и неглючащую...



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MKdemiurg
сообщение Sep 24 2011, 12:43
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(kovigor @ Sep 24 2011, 13:24) *
Почти наверняка это такой же глюк компилятора, как и первый, описанный вами неделю назад. Хотя может быть всякое. я бы на вашем месте просто открыл .asm - файл, созданный компилятором, и посмотрел бы, как выглядит ваш фрагмент на асме. Думаю, это прояснило бы ситуацию.
Я уже, кстати, молчу о том, что у вас может, например, портиться стек, что и приводит к таким последствиям. На 99.9 и в этом случае компилятор не виноват ...


Да вот , недопёр я в asm заглянуть...
Прикол то в том, что после перекомпиляции и перепрошивки - всё заработало - в коде убрал только задокументированный текст( тогда кстати тоже текст рядом в скобках был , много текста) . Я вот думаю а не был ли и в прошлый раз ещё и стек виноват ( потому как в этот раз точно стек был- иначе не объяснишь). Надо будет асм "разобрать" при следующей запаре... Но там врятли явно увидишь... Пересмотрел указатели. Вроде запар нет нигде. Вот тоглько смущает этот кусок:

Код
void at24c256_read(unsigned char chip,unsigned int address, unsigned char count, unsigned char *buffer)
{
unsigned char a,b;
a=(chip<<1)|0b10100000;
i2c_start();
i2c_write(a);
i2c_write(address >> 8);
i2c_write(address);
i2c_start();
i2c_write((chip<<1)|0b10100001);
for (b=0;b<count-1;b++) {*buffer++=i2c_read(1);};
*buffer=i2c_read(0);
i2c_stop();
};

При переполнении страницы памяти( 64 байта) стабильно происходит запара со стеком( делал специально - при работе жётско контролируется НЕпереполнение записываю страницами по 63 байта) - переходит в начало main или вызывающей процедуры. А вот к функциям i2c добраться никак...

Сообщение отредактировал MKdemiurg - Sep 24 2011, 12:54
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MKdemiurg   CVAVR "повреждене" локальных переменных   Sep 15 2011, 15:01
- - kovigor   Цитата(MKdemiurg @ Sep 15 2011, 18:01) По...   Sep 15 2011, 16:32
- - MKdemiurg   Цитата(kovigor @ Sep 15 2011, 19:32) Возм...   Sep 15 2011, 16:55
|- - kovigor   Цитата(MKdemiurg @ Sep 15 2011, 19:55) Де...   Sep 15 2011, 17:06
- - MKdemiurg   Цитата(kovigor @ Sep 15 2011, 20:06) А ту...   Sep 15 2011, 17:24
|- - kovigor   Цитата(MKdemiurg @ Sep 15 2011, 20:24) Зы...   Sep 15 2011, 17:29
- - MKdemiurg   Цитата(kovigor @ Sep 15 2011, 20:29) Vola...   Sep 15 2011, 17:50
|- - kovigor   Цитата(MKdemiurg @ Sep 15 2011, 20:50) На...   Sep 15 2011, 17:56
- - MKdemiurg   А тем которые параметром в функцию передаются?   Sep 15 2011, 18:02
|- - kovigor   Цитата(MKdemiurg @ Sep 15 2011, 21:02) А ...   Sep 15 2011, 18:06
- - Marian   Выловил однажды проблему в CV, при декларировании ...   Sep 15 2011, 19:32
- - -SANYCH-   В CоdeVisionAVR довольно много глюков (по крайней ...   Sep 15 2011, 20:41
- - MKdemiurg   Цитата(-SANYCH- @ Sep 16 2011, 00...   Sep 16 2011, 05:38
|- - kovigor   Цитата(MKdemiurg @ Sep 16 2011, 08:38) Чт...   Sep 16 2011, 10:07
- - Slava2105   Не знаю как в версии 1.25.5 , я про неё давно забы...   Sep 23 2011, 16:55
- - MKdemiurg   Вообщем глюк то вроде бы изза того что переменную ...   Sep 23 2011, 21:34
|- - kovigor   Цитата(MKdemiurg @ Sep 24 2011, 00:34) Ст...   Sep 24 2011, 09:24
- - Slava2105   ЦитатаА как насчёт перехода с версии 1.25 сразу на...   Sep 25 2011, 00:09
- - MKdemiurg   ЦитатаИ утверждать про глюки компилятора надо всё ...   Sep 25 2011, 06:13


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

 


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


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