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

 
 
> Глюки компилятора IAR?, Важно! Код прошивки по непонятным причинам не стартует в МК AVR.
DiMonstr
сообщение Jan 10 2008, 19:42
Сообщение #1


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

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Всех с прошедшими праздниками!

Присказка.
Чуть больше 6 месяцев вплотную работаю с контроллерами ATMEL и компилятором IAR. Каких только финтов не выкидывала эта связка и вот очередная проблема.Программлю я поэтапно, шаг за шагом проверяя функционально законченные блоки кода. В результате, у меня получился основной код девайса и код, который производит самотестирование периферии контроллера. По отдельности все отлично и стабильно работает. Пришло время отлаживать всё в комплексе и тут начался полтергейст, который я пытаюсь изкоренить методом прямого шаманства. В чём причина конккретно не знаю, одни догадки...
Суть проблемы.
Короче код после прошивки то запускаетя и работает, то вообще не исполняется ни одной команды. Крутил оптимизацию, распределение памяти - не помогло. Со сбросом всё в порядке, схема не причем, контроллер тоже. Остается компилятор и наверное настройки файла *.xcl
Контроллер использую Atmega8. Пишу на С. Использую стандартный lnkm8.xcl. high оптимизация проекта по размеру.
IDE:
IAR 4.20A/W32 [Evaluation] (4.20.1.3).
Компилятор:
IAR XLIB 3.29L/386 (3.29.0.12)
IAR XLINK 4.59Z (4.59.26.0)


Из своего опыта. Кодил я девайс: считыватель чип-карт, который подключается к USB. Отлаживал отдельно часть кода для работы с картой ичасть кода для обмена по USB. Поставил оптимизацию всего проекта по скорости, т.к. 10 байт с карты приходили верный, а остальные контроллер не успевал обрабатывать (кодил опять же на С). Ладно добился правильной работы оптимизацией. Как только я начал отлаживать все в комплексе - обмен с картой и обмен по USB, то начались проблемы! С картой обмен есть, с USB нет. Оптимизацию вырубаю - наоборот с USB работает, а с карты искаженные данные. Долго я шаманил над проектом... И в итоге сделал так: включил оптимизацию проекта по скорости, а перед теми функциями, которые конкретно отвечают за обмен с USB, воткнул директиву компилятора отключающую оптимизацию именно это процедуры. После этого всё работает. Это конечно ни есть хорошо, но выходя я пока так и не нашёл. Одним словом - шаманство!!!


Посоветуйте, в каком направлении мне копать! Кто сталкивался с такими проблемами?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DiMonstr
сообщение Jan 20 2008, 15:26
Сообщение #2


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

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Выкладываю исходники проекта. Попробуйте прошить контроллер и прочитать содержимое EEPROM. Что можно предпринять по оптимизации проекта, с учетом вышеизложенных проблем?
Прикрепленные файлы
Прикрепленный файл  pwrc.rar ( 286.74 килобайт ) Кол-во скачиваний: 62
 
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2008, 16:58
Сообщение #3


Гуру
******

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



Цитата(DiMonstr @ Jan 20 2008, 19:26) *
Что можно предпринять по оптимизации проекта, с учетом вышеизложенных проблем?

Я вообще не экспериментирую с оптимизацией. Сразу включаю максимальную. Ведь вам изначально известно что надо оптимизировать длину или скорость. Я её включаю и больше не трогаю. Иногда только опции некоторые например cross call. Но это к работоспособности никакого отношения не имеет. То же самое, наверное, вам скажут и другие. Менять оптимизацию для получения работоспособного кода - это всё равно что пинать шины если заглох автомобиль. Совсем уж от безысходности. Бывает, что ты некоректно что-то сделал с точки зрения компилятора. Естественно по незнанию. В этом случае лучше локализовать ошибку и просмотреть выходной листинг. Как правило всё сразу становится на свои места.
Самые распространнённые в этом случае ошибки это ошибки связанные с volatile и с приведением типов.
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 20 2008, 17:34
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(SasaVitebsk @ Jan 20 2008, 19:58) *
Самые распространнённые в этом случае ошибки это ошибки связанные с volatile ...


Я не нашел в Вашей програме ни одного "volatile". Прочитайте вот это и добавте "volatile" для тех переменных для которых надо.

Сорри что текст на англискон.

My program doesn't recognize a variable updated within an interrupt routine
When using the optimizer, in a loop like the following one:
Код
uint8_t flag;
...
ISR(SOME_vect) {
  flag = 1;
}
...

        while (flag == 0) {
                ...
        }

the compiler will typically access flag only once, and optimize further accesses completely away, since its code path analysis shows that nothing inside the loop could change the value of flag anyway. To tell the compiler that this variable could be changed outside the scope of its code path analysis (e. g. from within an interrupt routine), the variable needs to be declared like:

Код
volatile uint8_t flag;
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DiMonstr   Глюки компилятора IAR?   Jan 10 2008, 19:42
- - prottoss   Цитата(DiMonstr @ Jan 11 2008, 02:42) Пос...   Jan 10 2008, 19:59
- - DiMonstr   Забыл спросить. А есть ли у компилятора такая фишк...   Jan 10 2008, 20:26
- - arttab   у вас не было подозрения что работа по usb и карто...   Jan 11 2008, 02:01
- - GDI   При борьбе со стеками очень помогает включение ген...   Jan 11 2008, 07:02
|- - DiMonstr   Цитата(GDI @ Jan 11 2008, 10:02) Этой фи...   Jan 12 2008, 14:28
|- - Dog Pawlowa   Цитата(DiMonstr @ Jan 12 2008, 18:28) И т...   Jan 12 2008, 14:48
|- - zltigo   Цитата(DiMonstr @ Jan 12 2008, 16:28) Нее...   Jan 12 2008, 14:49
|- - DiMonstr   Цитата(zltigo @ Jan 12 2008, 17:49) Есл...   Jan 12 2008, 15:00
|- - singlskv   Цитата(zltigo @ Jan 12 2008, 17:49) Повто...   Jan 12 2008, 18:21
|- - Сергей Борщ   Цитата(singlskv @ Jan 12 2008, 20:21) пре...   Jan 12 2008, 18:56
|- - DiMonstr   Цитата(singlskv @ Jan 12 2008, 21:21) Авт...   Jan 12 2008, 19:56
||- - Baser   Цитата(DiMonstr @ Jan 12 2008, 21:52) В д...   Jan 12 2008, 20:11
||- - Сергей Борщ   Цитата(DiMonstr @ Jan 12 2008, 21:56) А у...   Jan 12 2008, 20:12
||- - DiMonstr   Цитата(Сергей Борщ @ Jan 12 2008, 23:12) ...   Jan 12 2008, 20:21
|- - zltigo   Цитата(singlskv @ Jan 12 2008, 20:21) Это...   Jan 12 2008, 20:00
- - Сергей Борщ   Цитата(DiMonstr @ Jan 10 2008, 21:42) При...   Jan 11 2008, 08:11
|- - DiMonstr   Цитата(Сергей Борщ @ Jan 11 2008, 11:11) ...   Jan 12 2008, 14:03
||- - zltigo   Цитата(DiMonstr @ Jan 12 2008, 15:59) Да ...   Jan 12 2008, 14:04
|- - MrYuran   Цитата(Сергей Борщ @ Jan 11 2008, 11:11) ...   Mar 3 2008, 14:31
|- - SasaVitebsk   Цитата(MrYuran @ Mar 3 2008, 18:31) А я ч...   Mar 3 2008, 15:46
|- - Сергей Борщ   Цитата(MrYuran @ Mar 3 2008, 16:31) А я ч...   Mar 3 2008, 18:28
- - zltigo   ЦитатаЕсли говорить... Попробуйте хотя-бы прочитат...   Jan 12 2008, 15:10
|- - DiMonstr   Цитата(zltigo @ Jan 12 2008, 18:10) Код...   Jan 12 2008, 15:20
- - Dog Pawlowa   Код рабочий? Тогда какие проблемы?   Jan 12 2008, 15:52
- - AndyBig   Если контроллер не успевает выполнять все функции ...   Jan 12 2008, 22:58
|- - DiMonstr   Цитата(SasaVitebsk @ Jan 20 2008, 19:58) ...   Jan 20 2008, 17:23
|- - DiMonstr   Цитата(aesok @ Jan 20 2008, 20:34) Прави...   Jan 20 2008, 18:39
- - SasaVitebsk   Приведу пример для понимания происходящего допусти...   Jan 20 2008, 19:01
- - forever failure   Кто нить ещё смотрел этот проект? Впечатление в ц...   Jan 21 2008, 03:50
|- - DiMonstr   Цитата(forever failure @ Jan 21 2008, 06...   Jan 21 2008, 11:58
|- - Сергей Борщ   Цитата(DiMonstr @ Jan 21 2008, 13:58) 1) ...   Jan 21 2008, 12:19
||- - Qwertty   Цитата(Сергей Борщ @ Jan 21 2008, 15:19) ...   Jan 21 2008, 12:56
|||- - defunct   Цитата(Qwertty @ Jan 21 2008, 15:56) Я во...   Jan 21 2008, 13:04
|||- - Qwertty   Цитата(defunct @ Jan 21 2008, 16:04) type...   Jan 21 2008, 13:21
||- - DiMonstr   Цитата(Сергей Борщ @ Jan 21 2008, 15:19) ...   Jan 21 2008, 19:35
||- - SasaVitebsk   Цитата(DiMonstr @ Jan 21 2008, 23:27) Т.е...   Jan 21 2008, 19:43
|- - aesok   В функциях EEPROM_* - не должны разрешаться прерыв...   Jan 21 2008, 20:05
|- - DiMonstr   Цитата(aesok @ Jan 21 2008, 23:05) В функ...   Jan 24 2008, 17:13
|- - defunct   Цитата(DiMonstr @ Jan 24 2008, 20:13) Я г...   Jan 24 2008, 17:24
- - forever failure   /* if (Value > MinValue & Value < MaxVal...   Jan 21 2008, 12:42
- - SasaVitebsk   Если честно я тоже скачал данную прогу. Но при так...   Jan 21 2008, 12:52
- - defunct   ЦитатаА я сначала и объявлял переменные через стру...   Jan 22 2008, 00:22
|- - SasaVitebsk   Цитата(defunct @ Jan 22 2008, 04:22) Саша...   Jan 23 2008, 19:45
|- - Сергей Борщ   Цитата(SasaVitebsk @ Jan 23 2008, 21:45) ...   Jan 23 2008, 22:37
|- - defunct   Цитата(Сергей Борщ @ Jan 24 2008, 01:37) ...   Jan 23 2008, 23:37
|- - Сергей Борщ   Цитата(defunct @ Jan 24 2008, 01:37) Как ...   Jan 24 2008, 15:17
- - Freeze Anti   Как я и предполагал с самого начала, вашей програм...   Jan 23 2008, 18:45
|- - DiMonstr   Цитата(Freeze Anti @ Jan 23 2008, 21:45) ...   Jan 24 2008, 16:44
- - SasaVitebsk   2 Сергей Борщ. Собственно именно это я и хотел ска...   Jan 24 2008, 12:47
- - prottoss   ЦитатаА можно ли увеличить пространство оперативки...   Jan 24 2008, 16:58
|- - DiMonstr   Цитата(prottoss @ Jan 24 2008, 19:58) Мож...   Jan 24 2008, 18:49
|- - prottoss   Цитата(DiMonstr @ Jan 25 2008, 01:49) Не ...   Jan 24 2008, 19:06
|- - DiMonstr   Цитата(prottoss @ Jan 24 2008, 22:06) Да...   Jan 24 2008, 19:34
- - SasaVitebsk   И вы невнимательно прочитали то, что сами процитир...   Jan 24 2008, 18:54
- - Freeze Anti   про типы переменных я говорил, что если у вас пере...   Jan 24 2008, 19:32
- - prottoss   ЦитатаНо я так и не врубился че значит цифра ...   Jan 24 2008, 20:17
|- - DiMonstr   Цитата(prottoss @ Jan 24 2008, 23:17) Раз...   Jan 24 2008, 21:25
|- - Сергей Борщ   Цитата(DiMonstr @ Jan 24 2008, 23:25) Всё...   Jan 25 2008, 08:45
|- - DiMonstr   Цитата(Сергей Борщ @ Jan 25 2008, 11:45) ...   Jan 25 2008, 13:31
|- - SasaVitebsk   Цитата(DiMonstr @ Jan 25 2008, 17:31) В у...   Jan 25 2008, 13:36
|- - Сергей Борщ   Цитата(DiMonstr @ Jan 25 2008, 15:31) Эта...   Jan 25 2008, 13:58
|- - DiMonstr   Цитата(Сергей Борщ @ Jan 25 2008, 16:58) ...   Jan 25 2008, 14:09
- - Сергей Борщ   Вы утверждали, что это "Эта фишка (и не тольк...   Jan 25 2008, 15:09
|- - DiMonstr   Цитата(Сергей Борщ @ Jan 25 2008, 18:09) ...   Feb 9 2008, 19:41
- - DiMonstr   А может попробовать скомпилять проект в WinAVR? Да...   Feb 9 2008, 21:24
|- - singlskv   Цитата(DiMonstr @ Feb 10 2008, 00:24) А м...   Feb 9 2008, 22:09
|- - zltigo   Цитата(singlskv @ Feb 10 2008, 01:09) Вы ...   Feb 9 2008, 23:17
|- - DiMonstr   Цитата(zltigo @ Feb 10 2008, 02:17) Я с ...   Feb 10 2008, 09:28
|- - singlskv   Цитата(zltigo @ Feb 10 2008, 02:17) Можно...   Feb 11 2008, 21:00
- - forever failure   Хинт: уберите весь (да, весь, вообще весь) код, до...   Feb 10 2008, 10:58
|- - DiMonstr   Цитата(forever failure @ Feb 10 2008, 13...   Feb 10 2008, 12:32
- - DiMonstr   Попутно ещё вопрос. Что происходит если программа ...   Feb 10 2008, 13:35
- - VladislavS   0xFFFF так же как NOP отрабатывается. Ничем забива...   Feb 10 2008, 14:56
- - DiMonstr   Как в IAR написать код, который будет выполняться ...   Feb 11 2008, 20:17
|- - zltigo   Цитата(DiMonstr @ Feb 11 2008, 23:17) Ком...   Feb 11 2008, 20:48
- - DiMonstr   Спасибо.   Feb 11 2008, 21:00
|- - bzx   Цитата(DiMonstr @ Feb 12 2008, 00:00) Спа...   Feb 11 2008, 21:20
|- - DiMonstr   Цитата(bzx @ Feb 12 2008, 00:20) Надеюсь ...   Feb 12 2008, 17:44
|- - singlskv   Цитата(DiMonstr @ Feb 12 2008, 20:44) Во-...   Feb 12 2008, 18:42
- - forever failure   Кстати, кто-нить смотрел checkjump.asm ? Особенно ...   Feb 13 2008, 06:09
|- - DiMonstr   Цитата(forever failure @ Feb 13 2008, 09...   Feb 13 2008, 20:31
|- - bzx   Цитата(DiMonstr @ Feb 13 2008, 23:31) Или...   Feb 13 2008, 21:21
- - GDI   ЦитатаЯ не понимаю почему не стоит делать проверки...   Feb 13 2008, 07:39
- - forever failure   Прогнать в симуляторе АВР студии полученный код не...   Feb 14 2008, 04:36
|- - DiMonstr   Цитата(forever failure @ Feb 14 2008, 07...   Feb 14 2008, 06:10
|- - IgorKossak   Цитата(DiMonstr @ Feb 14 2008, 08:10) Про...   Feb 14 2008, 06:34
|- - Сергей Борщ   Цитата(DiMonstr @ Feb 14 2008, 08:10) Да ...   Feb 14 2008, 08:48
- - DiMonstr   Всех приветствую!!! Я нашел причину ...   Mar 3 2008, 19:51


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:37
Рейтинг@Mail.ru


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