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

 
 
 
Reply to this topicStart new topic
> IAR и scmRTOS
sz36
сообщение Jul 12 2006, 17:22
Сообщение #1


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

Группа: Свой
Сообщений: 91
Регистрация: 26-01-06
Пользователь №: 13 668



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
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 13 2006, 06:43
Сообщение #2


Шаман
******

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



Совсем без оптимизации очевидно не получится.
Попробуйте установить такой уровень оптимизации, при котором inline ещё работает.
Что касается переменных, то оптимизируются, как правило, только локальные.
Попробуйте также отладку по disassembly с открытым рядом окном исходника. Так можно избежать прыжков "в никуда".
Сам использую эту RTOS, проект весит уже 120 кбайт (не считая загрузчика), оптимизация по скорости максимальная (при меньшей не влезет в память). Отладку делаю так, как сказал. Уже привык. wink.gif
Go to the top of the page
 
+Quote Post
sz36
сообщение Jul 13 2006, 12:01
Сообщение #3


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

Группа: Свой
Сообщений: 91
Регистрация: 26-01-06
Пользователь №: 13 668



Цитата(IgorKossak @ Jul 13 2006, 10:43) *
Совсем без оптимизации очевидно не получится.

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

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


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

Если Вы используете эту ОС, может сталкивались еще с одной проблемой. Почему-то, когда я компилю из IDE, дефайн __HAS_RAMPZ всегда оказывается определенным, хотя стоит Mega128, этого регистра не имеющая. И, соответсвенно, кол-во регистров не совпадает, и контекст переключается некорректно. Вышел из положения, определив свой аналогичный дефайн и подрихтовав исходник ОС, но это же не кошерно.. Это глюк IAR или я что-то не понимаю?
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 13 2006, 13:28
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



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


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
ig_z
сообщение Jul 13 2006, 14:36
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Цитата(sz36 @ Jul 12 2006, 20:22) *
При компиляции с максимальной оптимизацией scmRTOS работает, но в таком режиме совершенно невозможно пользоваться отладчиком - многих переменных не видно, программа прыгает черти куда (у меня JTAG ICE MKII).
Как заставить IARовскую IDE компилировать с включенными инлайнами и без оптимизации? Прагма inline=force не помогает. IAR AVR 4.11A


Так что мешает установить раздельные опции компиляции для каждого модуля? сцм на мах, свой на нон. Кроме того, по моему, вторая версия (с софт прерыванием) работает на любых уровнях оптиции (хотя я работаю только с мсп).
Go to the top of the page
 
+Quote Post
sz36
сообщение Jul 13 2006, 16:59
Сообщение #6


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

Группа: Свой
Сообщений: 91
Регистрация: 26-01-06
Пользователь №: 13 668



Цитата(vet @ Jul 13 2006, 17:28) *
Вообще-то, у меги128 есть RAMPZ.

И точно! :-) Я все перепутал. __HAS_RAMPZ__ в сишных модулях определен правильно, а вот в ассемблерном не определен HAS_RAMPZ, поэтому и контекст некорректно восстанавливается. Места, где он определяется, мне найти не удалось.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 14 2006, 08:16
Сообщение #7


Шаман
******

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



Цитата(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
Go to the top of the page
 
+Quote Post
sz36
сообщение Jul 15 2006, 17:19
Сообщение #8


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

Группа: Свой
Сообщений: 91
Регистрация: 26-01-06
Пользователь №: 13 668



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

Да где определить я знаю, уже определил. Ммне непонятно, как оно определяется в авторской сборке? Оно же из командной строки, и следов такого дефайна я не нашел.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 15 2006, 18:23
Сообщение #9


Гуру
******

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



sz36 вопрос немного не в тему. А у Вас JTAG ICE MK2 не "вываливается" из захвата? Случаются ли у Вас сбои JTAG при отладке? И ещё один. Если после останова отладки (МК перестартовывает) выключить и вкл. питание, то работает всё нормально?
А то у меня проблемы некоторые, а я разобраться не могу. sad.gif
Go to the top of the page
 
+Quote Post
sz36
сообщение Jul 17 2006, 00:37
Сообщение #10


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

Группа: Свой
Сообщений: 91
Регистрация: 26-01-06
Пользователь №: 13 668



Цитата(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
Go to the top of the page
 
+Quote Post

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

 


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


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