|
Загадочное поведение SAM7S64 & IAR 4.40a |
|
|
|
Jul 20 2006, 10:34
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464

|
Имеется проект с несколькими прерываниями: UARTы, ADC, PIO, таймеры и TWI. Поскольку TWI у SAMa не имеет PDC, а на на нем висят графический индикатор, FRAM и RTC, то есть обмен достаточно интенсивный, я сделал "подкачку байтов" в прерывании. Прерывание короткое, с максимальным приоритетом, так как TWI у SAMa не любит пауз на шине. Вызов прерываний сделан с использованием Сstartup.s79.
Теперь самое интересное: - компилю проект с уровнем оптимизации Medium (здесь и далее по тексту: code или size - один хрен). Устройство устойчиво работает сутками, то есть все пучком. - повышаю уровень оптимизации до High. Короткий всплеск активности на шине TWI и все погибает. Даже индикатор мертв, программа циклит в совершенно левом месте. Думаю, хрен с ним, у IAR-а всегда были такие проблемы при макс. оптимизации. Но: - снижаю уровень оптимизации до Low. Индикатор работает, а при обмене с FRAM и RTC идут периодические сбои. Но в целом изделие работает. - отключаю оптимизацию, поведение как в предыдущем случае + через некотое время (час-два) TWI переходит в режим самоудовлетворения - по шине хреначит беспорядочная передача, не прекращающаяся даже при остановке процессора.
Вопрос: как к этому относиться и, главное, кто виноват? Сижу не первый день, свои варианты закончились. Может кто-нибудь выскажет соображения? Буду рад любой идее.
|
|
|
|
|
Jul 20 2006, 10:42
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sgrig @ Jul 20 2006, 13:34)  Вопрос: как к этому относиться и, главное, кто виноват? 1.Относится к этому следует плохо. 2.Виноват в этом обычно программист неясно выразивший свою мысль компилятору, который тоже, увы, не совершенен, особенно в предугадании последствий. 3.Локализуйте поблемный кусок включая/отключая оптимизацию на части проекта и локализовав, думайте над более однозначным написанием куска программы. 4. Ну и в качестве надежды на чудо - используйте свежий компилятор: IAR ARM ANSI C/C++ Compiler V4.40A-P060613/W32 __________________________________^^^^^^^^^
Сообщение отредактировал zltigo - Jul 20 2006, 10:57
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 20 2006, 10:52
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464

|
1 и 2 - полностью согласен, хотя не могу понять вариант с правильным "угадыванием" именно в среднем положении. А 3-им путем я уже иду, но проект большой, файлов много, а сбои редки. Экстенсивный путь, боюсь, до отпуска не управлюсь.
|
|
|
|
|
Jul 20 2006, 11:04
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
1.Вы все возможное пообъявляли как volatile? У меня были случаи когда код выделывал кренделя, даже если переменная в прерывании не менялась. Просто инитилась в самом начале. 2.Написать обработчик аварийных ситуаций, в случае проблем, вылететать и инитить TWI заново.
PS Откуда они этот макроселл взяли? Я пока не столкнулся, думал что там наследник АВРовского, еще и продвинутый(как USART с SPI). А как посмотрел, за голову схватился.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jul 20 2006, 11:09
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sgrig @ Jul 20 2006, 13:52)  хотя не могу понять вариант с правильным "угадыванием" именно в среднем положении. Просто проблема не одна а несколько, хоть и приводят к универсальному результату варианту "не работает". При отключеной оптимизации, если не используется какая-либо система позволяющая делить недостающие ресурсы, у Вас просто все "захлебывается" и какой-то кусок начинает жить исключительно своими проблемами. Цитата(beer_warrior @ Jul 20 2006, 14:04)  1.Вы все возможное пообъявляли как volatile? Фу, какой моветон :-( Зачем-же "все возможное" - нужно только "нужное" :-)
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 20 2006, 11:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата Фу, какой моветон :-( Зачем-же "все возможное" - нужно только "нужное" :-) А вы точно знаете, что точно "нужное", а что "ненужное"? Тай отож  Тем более собака порылась в оптимизаторе
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jul 20 2006, 11:43
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(beer_warrior @ Jul 20 2006, 14:35)  А вы точно знаете, что точно "нужное", а что "ненужное"? Ну так я :-) а если серьезно, то нужно думать, после чего, естественно, буду и знать нужное. Если думать о нюансах взаимопонимания с компилятором прямо в процессе написания, оно как-то легко и непринужденно получается.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 20 2006, 11:47
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464

|
Цитата(zltigo @ Jul 20 2006, 18:09)  Просто проблема не одна а несколько, хоть и приводят к универсальному результату варианту "не работает". При отключеной оптимизации, если не используется какая-либо система позволяющая делить недостающие ресурсы, у Вас просто все "захлебывается" и какой-то кусок начинает жить исключительно своими проблемами. Да, возможно Вы правы. Скорее всего, какая-нибудь глупая ошибка, причем, совсем не там, где ищешь. Цитата(beer_warrior @ Jul 20 2006, 14:04)  1.Вы все возможное пообъявляли как volatile? Нет, я так объявляю только те переменные, которые модифицируются в исключениях (прерываниях) и используются в основной программе или же в других исключениях (прерываниях).
|
|
|
|
|
Jul 24 2006, 13:18
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
Цитата(zltigo @ Jul 21 2006, 16:26)  Патч в виде совершенно автономного компилятора :-). Работает при наличии лицензии на full компилятор ЛЮБОЙ версии. Ну очень любезно со стороны IAR :-) Вы можете сбросить на фтп вашу лицензию? У себя нашел только EWARM Version: 2.1_WIN standalone license (dongled) (no:1000-005-880-9779) но с ней не работает, т.к. это dongled лицензия. А генераторы делают лицензии для евалюшн версий
|
|
|
|
|
Jul 24 2006, 15:51
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(ig_z @ Jul 24 2006, 16:18)  А генераторы делают лицензии для евалюшн версий Я пользую: 2.1_WIN\0EWARM\0\0.... Готовый выложил в первоначальную ветку: http://electronix.ru/forum/index.php?showt...mp;#entry137296
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|