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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> CVAVR "повреждене" локальных переменных
MKdemiurg
сообщение Sep 23 2011, 21:34
Сообщение #16


Знающий
****

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



Вообщем глюк то вроде бы изза того что переменную не объявил volаtilom. В неё как раз считывались данные с порта только при ресете. И видимо компилятор посчитал, что потом с ней можно делать всё что хочешь. laughing.gif

Столнулся с другим, что уже явно указывает на глюк компилятора. (версию сменил уже на 1.25.9)

прога примерно такая :

void main(void)
{

1)If (условие)
{
if (условие)
{
while (1){операции}
};
};
2)while(1)
{
операции
powerdown();
/*
вот тут задокументирован был временно код на переработку
*/
};

}
какимто образом программа вошла во 2й while(метка 2) выполнила операции , заснула , а когда проснулась попала в условие сверху( метка 1). После ресета было 100% повторение. После перекомпиляции и перепрошивки - всё исчезло. НО, перед перекомпиляцией я убрал задокументированный код. Незнаю сейчас гоняю , вроде работает, но к CV как то отношение ухудшилось biggrin.gif

Да ещё может кто встречал - при прошивке через CV если не сделать стирание чипа с проверкой( обязательно с проверкой) - чип не прошивается вбивает туда 0xFFFF( а может просто не шьёться , но стирается). Грешу на комп - часы у меня на компе уходят за час на 5 минут. Может частота не та идёт с компа? И изза этого появляются битые ячейки? Хотя впринципе тогда должно при верификации выводит ошибку.

Цитата
У меня сейчас 2.03.4.


А как насчёт перехода с версии 1.25 сразу на 2.03 - сложностей не вызовет как думаете?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 24 2011, 09:24
Сообщение #17


Гуру
******

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



Цитата(MKdemiurg @ Sep 24 2011, 00:34) *
Столнулся с другим, что уже явно указывает на глюк компилятора. (версию сменил уже на 1.25.9)


Почти наверняка это такой же глюк компилятора, как и первый, описанный вами неделю назад. Хотя может быть всякое. я бы на вашем месте просто открыл .asm - файл, созданный компилятором, и посмотрел бы, как выглядит ваш фрагмент на асме. Думаю, это прояснило бы ситуацию.
Я уже, кстати, молчу о том, что у вас может, например, портиться стек, что и приводит к таким последствиям. На 99.9 и в этом случае компилятор не виноват ...

Сообщение отредактировал kovigor - Sep 24 2011, 09:25
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Sep 24 2011, 12:43
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 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
Slava2105
сообщение Sep 25 2011, 00:09
Сообщение #19





Группа: Новичок
Сообщений: 2
Регистрация: 23-09-11
Пользователь №: 67 336



Цитата
А как насчёт перехода с версии 1.25 сразу на 2.03 - сложностей не вызовет как думаете?

Абсолютно никаких проблем не было. Мало того, даже программы созданные в 2.03 компилировались в 1.25.9.
По крайней мере с проблемами не сталкивался.
И утверждать про глюки компилятора надо всё же пореже.
Как правило это глюки вашей, да и моей программы тоже. Просто где то не дочитали, не досчитали, не так сделали.
А кодевижен мне больше нравится чем винавр. Попробовал как то перейти на него... Ни грамма не улыбнуло
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Sep 25 2011, 06:13
Сообщение #20


Знающий
****

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



Цитата
И утверждать про глюки компилятора надо всё же пореже.


ТАк я и не утверждаю. Просто с чем может быть связан глюк , который уходит после перекомпиляции? НУ возможно с процессом прошивки... Но маловероятно...

ЗЫ Тож наверно перейду на 2.03 тогда , там библиотека для SD карты реализована.... biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th September 2025 - 11:55
Рейтинг@Mail.ru


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