Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR и scmRTOS
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
sz36
Hi, All!
Осваиваю scmRTOS под AVR (http://scmrtos.narod.ru). Первые впечатления положительные, но столкнулся с такой проблемой.
Если установлен любой уровень оптимизации, кроме максимального, IDE компилит с ключом --no_inline, и, соответственно на объяления inline и соответствующую прагму кладет. А при такой компиляции scmRTOS не работает (а сколько сил ушло, пока я с этим разобрался! :-), некорректно переключает контекст.
При компиляции с максимальной оптимизацией scmRTOS работает, но в таком режиме совершенно невозможно пользоваться отладчиком - многих переменных не видно, программа прыгает черти куда (у меня JTAG ICE MKII).
Как заставить IARовскую IDE компилировать с включенными инлайнами и без оптимизации? Прагма inline=force не помогает. IAR AVR 4.11A
IgorKossak
Совсем без оптимизации очевидно не получится.
Попробуйте установить такой уровень оптимизации, при котором inline ещё работает.
Что касается переменных, то оптимизируются, как правило, только локальные.
Попробуйте также отладку по disassembly с открытым рядом окном исходника. Так можно избежать прыжков "в никуда".
Сам использую эту RTOS, проект весит уже 120 кбайт (не считая загрузчика), оптимизация по скорости максимальная (при меньшей не влезет в память). Отладку делаю так, как сказал. Уже привык. wink.gif
sz36
Цитата(IgorKossak @ Jul 13 2006, 10:43) *
Совсем без оптимизации очевидно не получится.

Мне кажется, это вовсе не столь очевидно :-) На мой взгляд, это IARовская IDE своевольничает

Цитата(IgorKossak @ Jul 13 2006, 10:43) *
Попробуйте установить такой уровень оптимизации, при котором inline ещё работает.


Я уже придумал - ставлю максимальный уровень оптимизации, а все галочки, кроме инлайн, снимаю. Стало полегче :-)

Если Вы используете эту ОС, может сталкивались еще с одной проблемой. Почему-то, когда я компилю из IDE, дефайн __HAS_RAMPZ всегда оказывается определенным, хотя стоит Mega128, этого регистра не имеющая. И, соответсвенно, кол-во регистров не совпадает, и контекст переключается некорректно. Вышел из положения, определив свой аналогичный дефайн и подрихтовав исходник ОС, но это же не кошерно.. Это глюк IAR или я что-то не понимаю?
vet
Вообще-то, у меги128 есть RAMPZ.
ig_z
Цитата(sz36 @ Jul 12 2006, 20:22) *
При компиляции с максимальной оптимизацией scmRTOS работает, но в таком режиме совершенно невозможно пользоваться отладчиком - многих переменных не видно, программа прыгает черти куда (у меня JTAG ICE MKII).
Как заставить IARовскую IDE компилировать с включенными инлайнами и без оптимизации? Прагма inline=force не помогает. IAR AVR 4.11A


Так что мешает установить раздельные опции компиляции для каждого модуля? сцм на мах, свой на нон. Кроме того, по моему, вторая версия (с софт прерыванием) работает на любых уровнях оптиции (хотя я работаю только с мсп).
sz36
Цитата(vet @ Jul 13 2006, 17:28) *
Вообще-то, у меги128 есть RAMPZ.

И точно! :-) Я все перепутал. __HAS_RAMPZ__ в сишных модулях определен правильно, а вот в ассемблерном не определен HAS_RAMPZ, поэтому и контекст некорректно восстанавливается. Места, где он определяется, мне найти не удалось.
IgorKossak
Цитата(sz36 @ Jul 13 2006, 19:59) *
Цитата(vet @ Jul 13 2006, 17:28) *

Вообще-то, у меги128 есть RAMPZ.

И точно! :-) Я все перепутал. __HAS_RAMPZ__ в сишных модулях определен правильно, а вот в ассемблерном не определен HAS_RAMPZ, поэтому и контекст некорректно восстанавливается. Места, где он определяется, мне найти не удалось.

Определите __HAS_RAMPZ__ (без #define, только одно определение на строку) здесь:
Project\Options\Assembler\Preprocessor\Defined symbols
sz36
[[/quote]
Определите __HAS_RAMPZ__ (без #define, только одно определение на строку) здесь:
Project\Options\Assembler\Preprocessor\Defined symbols
[/quote]

Да где определить я знаю, уже определил. Ммне непонятно, как оно определяется в авторской сборке? Оно же из командной строки, и следов такого дефайна я не нашел.
SasaVitebsk
sz36 вопрос немного не в тему. А у Вас JTAG ICE MK2 не "вываливается" из захвата? Случаются ли у Вас сбои JTAG при отладке? И ещё один. Если после останова отладки (МК перестартовывает) выключить и вкл. питание, то работает всё нормально?
А то у меня проблемы некоторые, а я разобраться не могу. sad.gif
sz36
Цитата(SasaVitebsk @ Jul 15 2006, 22:23) *
А у Вас JTAG ICE MK2 не "вываливается" из захвата? Случаются ли у Вас сбои JTAG при отладке?

Что значит "вываливается" не понял. Но так, чтобы он точку следующего останова (Step into, Step over, Run to cursor) потерял - сплошь и рядом. Особено Step over. Это с уровнем оптимизации связано, чем он выше, тем чаще такие штуки происходят. Причем, изредка даже при хождении по дизассемблированному тексту.

Еще один нюанс - оно не больше 2 точек останова нормально может, если их больше тормоза дикие начинаются, что можно ошибочно принять за зависание. Например, если у нас где-то определена точка останова, мы стоим на if, из которого два пути, то всего получается три, и при Step over оно безнадежно задумается.

Цитата(SasaVitebsk @ Jul 15 2006, 22:23) *
И ещё один. Если после останова отладки (МК перестартовывает) выключить и вкл. питание, то работает всё нормально?

Так вроде нормально... хотя я точно не помню. Но вот если не выходя из отладчика питание отключить, то выскочит ошибка (что правильно), и потом, с некоторой вероятностью, C-SPY эмулятор теряет, помогает отключить USB и включить заново, и перезапустить C-SPY
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.