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

 
 
> Вопос по scmRTOS, Оптимизация в IAR 4.30
SergeyBorshch
сообщение Apr 28 2008, 17:51
Сообщение #1


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

Группа: Участник
Сообщений: 100
Регистрация: 28-09-05
Из: Чернигов, Украина
Пользователь №: 9 053



Сейсас разбираюсь с scmRTOS, загрузил примерчик, все заработало. Но при изменении оптимизации, ставлю Low, то компилятор выдает много Warning и проект не работает в отладчике

Warning[Go006]: Too low level of optimization to inline function "OS::RaiseContextSwitch"
Warning[Go006]: Too low level of optimization to inline function "OS::GetHighPriority"
Warning[Go006]: Too low level of optimization to inline function "OS::TKernel::SchedISR"
Warning[Go006]: Too low level of optimization to inline function "SetDataSP"
Warning[Go006]: Too low level of optimization to inline function "SetReturnSP"
Warning[Go006]: Too low level of optimization to inline function "DisableInterrupts"
Warning[Go006]: Too low level of optimization to inline function "OS::TISRW_SS::ISR_Exit"
...
и так далее, количесво 59 шт.

Вопрос - можно ли как то настроить ОС или компилятор, чтобы проект заработал? Поскольку при максимальном уровне оптимизации не выполняются куски программы, такое чувство, что компилятор их просто выбрасывает!

Версия компилятора IAR 4.30.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Apr 28 2008, 18:18
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(SergeyBorshch @ Apr 28 2008, 20:51) *
Вопрос - можно ли как то настроить ОС или компилятор, чтобы проект заработал?
С оптимизацией Low - не получится. Компилятор не позволяет в режимах ниже High включать встраивание функций. Или придется существенно перерабатывать исходники ОС.
Цитата(SergeyBorshch @ Apr 28 2008, 20:51) *
Поскольку при максимальном уровне оптимизации не выполняются куски программы, такое чувство, что компилятор их просто выбрасывает!
Чувства - это неправильно. Всегда можно посмотреть листинг и понять - есть в нем код или нет. А выбрасывать код компилятор имеет право - если результат каких-либо действий не используется или если компилятор заранее знает, что какое-либо условие всегда будет истинно или ложно. Обычно такое происходит, если какие-либо переменные, используемые в прерывании или (в случае ОС) в нескольких процессах объявлены без квалификатора volatile.

P.S. это не раздвоение личности smile.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SergeyBorshch
сообщение Apr 28 2008, 19:00
Сообщение #3


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

Группа: Участник
Сообщений: 100
Регистрация: 28-09-05
Из: Чернигов, Украина
Пользователь №: 9 053



Цитата(Сергей Борщ @ Apr 28 2008, 21:18) *
С оптимизацией Low - не получится. Компилятор не позволяет в режимах ниже High включать встраивание функций. Или придется существенно перерабатывать исходники ОС.Чувства - это неправильно. Всегда можно посмотреть листинг и понять - есть в нем код или нет. А выбрасывать код компилятор имеет право - если результат каких-либо действий не используется или если компилятор заранее знает, что какое-либо условие всегда будет истинно или ложно. Обычно такое происходит, если какие-либо переменные, используемые в прерывании или (в случае ОС) в нескольких процессах объявлены без квалификатора volatile.

P.S. это не раздвоение личности smile.gif


А если переменные объявлены все как extern, то может компилятор так делать?

Перед переменными поставил квалификатор volatile, теперь возникает новое предупреждение:

Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement

И результат то же, не работает программа, т.е. не выполняет куски программы.

Пробывал поставить оптимизацию Medium - в этот раз выдает ошибку:

Error[e18]: Range error,
PC offset out of range. Valid range is -4096 (-0x1000) to 4094 (0x0FFE).
File: F:\RegMik\Programms\IAR_AVR_scmRTOS\scmRTOS\AVR\OS_Target_asm.s90, Line: 234
Source: xjmp ContextSwitcher_ISR

Where $ = #no label found# + 0x2C [0x2C]
in module "scmRTOS_Asm" (F:\RegMik\Programms\IAR_AVR_scmRTOS\УЗ2(RS485)\Debug\Obj\OS_Target_asm.r90),
offset 0x2C in segment part 1, segment INTVEC
What: L_RestoreContext - ($ + 2) [0x103C]
Allowed range: 0xFFFFF000 - 0xFFF
Operand: L_RestoreContext [0x106a]
in module scmRTOS_Asm (F:\RegMik\Programms\IAR_AVR_scmRTOS\УЗ2(RS485)\Debug\Obj\OS_Target_asm.r90),
Offset 0x0 in segment part 2, segment CO

Что можете сказать по этому поводу?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:31
Рейтинг@Mail.ru


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