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

 
 
> IAR AVR - когда вредна оптимизация...
Alechin
сообщение Oct 15 2007, 13:55
Сообщение #1


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

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Убил несколько часов на выключение WDT в Mega88 в программе на Си.
Вот такой код
__watchdog_reset();
MCUSR &= ~(1 << WDRF);
WDTCSR |= (1 << WDCE) | (1 << WDE);
WDTCSR = 0x00;
IAR при оптимизации умудрился разбить на процедуры (cross call), в результате чего между последовательными записями в WDTCSR проходило более 4 тактов, и выключенный изначально WDT включался, не давая нормально загрузиться системе.
Побороть смог только вынеся данный код в процедуру с выключением оптимизации для нее (#pragme optimize=none).
Возник вопрос - ни какими ключевыми словами нельзя изменить уровень оптимизации для фрагмента кода С ВОЗВРАТОМ к текущему уровню оптимизации (через #pragma optimize можно только установить требуемый уровень оптимизации, но не вернуться к установленному в свойствах проекта, по крайней мере я не нашел другого)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorKossak
сообщение Oct 16 2007, 09:23
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Alechin @ Oct 15 2007, 16:55) *
Побороть смог только вынеся данный код в процедуру с выключением оптимизации для нее (#pragme optimize=none).
Возник вопрос - ни какими ключевыми словами нельзя изменить уровень оптимизации для фрагмента кода С ВОЗВРАТОМ к текущему уровню оптимизации (через #pragma optimize можно только установить требуемый уровень оптимизации, но не вернуться к установленному в свойствах проекта, по крайней мере я не нашел другого)?

В руководстве сказано:
Цитата
The #pragma optimize directive is used for decreasing the optimization level, or for
turning off some specific optimizations. This pragma directive only affects the function
that follows immediately after the directive.

это означает, что данная директива действует только на одну, непосредственно следующую за ней, функцию.
На все последующие функции распространяется уровень оптимизации по умолчанию (заданный в настройках).

Цитата(scifi @ Oct 15 2007, 20:54) *
Мне кажется, тут двух мнений быть не может: если нужно гарантировать не более 4-х тактов между инструкциями, то нужно писать на ассемблере. Иначе при каждом апгрейде версии компилятора и смене его настроек придётся проверять, как изменился этот кусок кода.

Не стОит быть столь категоричным.
Если программа написана грамотно, то апдейт версии компилятора (по крайней мере в данном случае) к ухудшению ситуации не приведёт.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alechin   IAR AVR - когда вредна оптимизация...   Oct 15 2007, 13:55
- - scifi   Мне кажется, тут двух мнений быть не может: если н...   Oct 15 2007, 17:54
- - PSP   И еще не забыть запретить прерывания. Иначе баг из...   Oct 15 2007, 19:56
|- - Alechin   ЦитатаВ руководстве сказано: это означает, что дан...   Oct 16 2007, 15:22
- - xemul   Код#pragma optimize=none inline static void foo...   Oct 16 2007, 16:36
|- - Runner   Цитата(xemul @ Oct 16 2007, 18:36) Код#pr...   Apr 23 2009, 15:41
|- - IgorMarx   Цитата(Runner @ Apr 23 2009, 19:41) Вопро...   Apr 23 2009, 20:05
||- - Сергей Борщ   Цитата(IgorMarx @ Apr 23 2009, 23:05) буд...   Apr 24 2009, 06:53
||- - MrYuran   Цитата(Сергей Борщ @ Apr 24 2009, 10:53) ...   Apr 24 2009, 07:06
||- - Сергей Борщ   Цитата(MrYuran @ Apr 24 2009, 10:06) Это ...   Apr 24 2009, 10:00
||- - Dog Pawlowa   Цитата(Сергей Борщ @ Apr 24 2009, 13:00) ...   Apr 24 2009, 10:50
|- - sergeeff   Цитата(Runner @ Apr 23 2009, 18:41) Вопро...   Apr 23 2009, 21:37
|- - Dog Pawlowa   Цитата(Runner @ Apr 23 2009, 18:41) Вопро...   Apr 24 2009, 08:38
- - tourist   Цитата(Dog Pawlowa @ Apr 24 2009, 14:50) ...   Apr 24 2009, 12:08
- - Dog Pawlowa   Вот, наткнулся на свои макросы... Хм, запрета прер...   Apr 29 2009, 16:46
- - Dir   Цитата(tourist @ Apr 24 2009, 15:08) При ...   May 5 2009, 12:01
- - Сергей Борщ   Цитата(Dir @ May 5 2009, 15:01) Т.е. явно...   May 5 2009, 12:03
- - Dog Pawlowa   Я бы сформулировал по другому: Имеет ли право Атме...   May 5 2009, 12:13
- - Dir   Цитата(Сергей Борщ @ May 5 2009, 15:03) В...   May 5 2009, 12:21
- - Сергей Борщ   Цитата(Dir @ May 5 2009, 15:21) но, по па...   May 5 2009, 13:07
- - Dir   Цитата(Сергей Борщ @ May 5 2009, 16:07) О...   May 5 2009, 14:12
- - Сергей Борщ   Цитата(Dir @ May 5 2009, 17:12) Ведь посл...   May 5 2009, 16:12
- - Dir   Цитата(Сергей Борщ @ May 5 2009, 19:12) Н...   May 5 2009, 17:57


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

 


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


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