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

 
 
> 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 15 2011, 17:24
Сообщение #2


Знающий
****

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



Цитата(kovigor @ Sep 15 2011, 20:06) *
А тут не может быть какой-то хитрой завязки ? Просто эта фраза очень странно звучит.

Еще идея: попробуйте повыключать некоторые обработчики прерываний, насколько это возможно, и посмотрите, что будет. Вообще, почти наверняка дело в одном из обработчиков.

Да, и еще. Это может быть ошибка в использовании типов. Например, вы по ошибке пишете в unsigned char 16-разрядное число.


Нет, просто вывожу в ключевых точках параметры.

Из прерываний только таймер - работает как таймер с жёсткой фиксацией ( т.е. пока не сработает других действий не выполняется - чтото типа задержки только с программным опросом ноги или флага до окончания тайминга) , сброс по внешнему - срабатывает от RTS раз в час, ну и UART, в котором вообще ничего мудрёного... Выключить можно , но тогда программа вообще вся собьётся...

Я вот какую особенность подметил у меня по тексту порядок следования функций такой

1void modem_control(void)
2void protokol_set(unsigned char KEY)
3void main(void)
{
//здесь объявляется переменная которая идет параметром в функцию 2 и которая кстати и "ломается".
}

Так вот - если ошибка пропадает в 1 - то появляется ниже во 2 или 3й. Очень похоже на указатель...Завтра точно их поковыряю. Может быть даже частично перейду на использование нумерованых массивов, правда придётся тогда передавать данные через глобальные переменные laughing.gif

Цитата
Ну и последнее. Как показывает мной многолетний опыт, самые сложные и трудноуловимые ошибки почти всегда имеют до смешного простые причины. Так что ...


biggrin.gif Дааа, это есть проблема №1 , у меня всегда так... Видать и тут также

Зы Спасибо за наводящую помощь, будем копать...
ЗЗЫ А всё таки не может это быть в компиляторе или оптимизации дело ?

Сообщение отредактировал MKdemiurg - Sep 15 2011, 17:25
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 15 2011, 17:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(MKdemiurg @ Sep 15 2011, 20:24) *
Зы Спасибо за наводящую помощь, будем копать...
ЗЗЫ А всё таки не может это быть в компиляторе или оптимизации дело ?

Да, поищите баг в указателях, прежде всего ...

Volatile в нужных местах везде имеется ?

За ~15 лет практики видел собственными глазами одну ошибку компилятора и один случай неработоспособности программы из-за действий оптимизатора. Так что и такое может быть, но вероятность этого ничтожна ...
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: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
- - MKdemiurg   Цитата(kovigor @ Sep 24 2011, 13:24) Почт...   Sep 24 2011, 12:43
- - 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 - 21:27
Рейтинг@Mail.ru


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