Jump to content

    

Новая версия IAR EW430 4.10A

А прибор то работает? :)

Сегодня удалось-таки проверить в приборе прошивку, скомпилированную новой версией 4.10A. Работает! :08:

Оптимизация High-Balanсed, опция Code motion по традиции выключена. Reduce stack usage включена.

5 466 bytes of CODE memory

405 bytes of DATA memory (+ 60 absolute )

132 bytes of CONST memory (+ 176 absolute )

В 3.42a с такими же установками (только оптимизация High-Speed) было

5 730 bytes of CODE memory

405 bytes of DATA memory (+ 60 absolute )

164 bytes of CONST memory (+ 176 absolute )

Куда в 4.10a деваются константы, не пойму до сих пор :cranky:

Share this post


Link to post
Share on other sites
Куда в 4.10a деваются константы, не пойму до сих пор

Кстати, я ручками посчитал по всем файлам *.lst сколько констант используется, и сравнил сколько пишет в конце и 3.30а и 4.10а.

В *.lst - количество const одинаковое в обоих версиях, и оно больше, чем то, которое написано в конце, после линковки. В обоих версиях "результат" меньше "суммы", в 4.10а просто он меньше, чем в 3.30а.

У меня, кстати, надурняка с 3.30а на 4.10а перекомпилировалось без ошибок, не заработало, но сейчас "переправа" сразу нескольких проектов, притормозил переход... хотя попробовать охота...

Share this post


Link to post
Share on other sites
Оптимизация High-Balanсed, опция Code motion по традиции выключена. Reduce stack usage включена.

Чем вызвана такая такая нелюбовь к Code motion ?

 

По поводу констант сложидось впечатление что он их начал активнее инлайнить. Сравнить уже не с чем моcты сожжены :)

Share this post


Link to post
Share on other sites
Чем вызвана такая такая нелюбовь к Code motion ?

Глючит. У меня переменную, которая менялась в цикле, выводила за цикл...

Где-то здесь писалось.

Share this post


Link to post
Share on other sites
Чем вызвана такая такая нелюбовь к Code motion ?

Исторически так сложилось. Глючит эта опция у IAR. IAR даже с volatile не всегда корректно обходится :(

Share this post


Link to post
Share on other sites

1 ) В одном проекте только часовой кварц, контроль которого встроенными средствами MSP не поддерживается. Поэтому было сделано грубое сравнение таймера от кварца с программным циклом от DCO. Цикл изменился, константу пришлось менять.

 

2 ) Ага, я его сломал! Поставил оптимизацию high, balanced, снял галку Code motion.

 

Error[e46]: Undefined external "This_Function" referred in work ( D:....r43 ) 
Internal Error: In function: unknown 
Diagnostic: unexpected exception 
P0: 1    P1: 0 
Error while running Linker 

Total number of errors: 2 
Total number of warnings: 0

 

3) Поигрался с галками. Ошибка исчезает, если снять галку Function inlining. То есть функция "проинлайнена", а линковщик ищет указатель на нее и естественно не находит.

 

Вывод: реальный глюк, однако...

Share this post


Link to post
Share on other sites
2) Поигрался с галками. Ошибка исчезает, если снять галку Function inlining. То есть функция "проинлайнена", а линковщик ищет указатель на нее и естественно не находит.

 

Вывод: реальный глюк, однако...

Угу. Function inlining чаще всего тоже убираю. Особенно когда в программе много работы с указателями.

Share this post


Link to post
Share on other sites
Угу. Function inlining чаще всего тоже убираю. ...

Оказывается, у меня принудительно стояла "pragma inline" для этой функции.

Видимо, отследить человеческим разумом сочетания возможностей среды и компилятора просто нереально.

Share this post


Link to post
Share on other sites
Видимо, отследить человеческим разумом сочетания возможностей среды и компилятора просто нереально.

Если придерживаться правила "буть проще", видимо многих косяков можно избежать. :)

Share this post


Link to post
Share on other sites

А еще в новой версии происходит контроль заполнения стека. Если на момент останова стек занят более чем на 90%, в окне сообщений выводится предупреждение.

Правда, над выбором точки останова нужно подумать самому. А при наличии вложенных прерываний вряд ли вообще можно поймать такую ситуацию.

Share this post


Link to post
Share on other sites
А еще в новой версии происходит контроль заполнения стека. Если на момент останова стек занят более чем на 90%, в окне сообщений выводится предупреждение.
В 3.42А это уже было и настраивается в опциях отладчика. При отладке в операционке вообще вещь бесполезная, т.к. стек там всегда не "там". А у меня и в main пишет что стек кончился:) Так как в качестве стека main используются буфферы таск, которые до старта таск не нужны.

Share this post


Link to post
Share on other sites

Такая проблема.

У меня в Симуляторе IAR for MSP 4.10 подпрограмма длительностью примерно 1 млн. циклов выполняется порядка 1 минуты. Это при условии, что активно окно IDE, иначе еще дольше.

Вопрос: Что симулирует Pentium целую минуту в процедуре, котрую MSP должен исполнить за 125мс?

Как уменьшить это время? Может в настройках что-то не то?

 

Проверить на старых версиях IAR for MSP сейчас нет возможности, но я запихнул ту же процедуру в IAR for AVR - там симуляция занимает несколько секунд, что вполне приемлимо.

Share this post


Link to post
Share on other sites
Проверить на старых версиях IAR for MSP сейчас нет возможности, но я запихнул ту же процедуру в IAR for AVR - там симуляция занимает несколько секунд, что вполне приемлимо.

Вот проверил скорость выполнения процедуры БПФ в разных версиях симулятора IAR EW430:

3.21 31 сек

3.40 55 сек

3.42 52 сек

4.10 60 сек

IAR AVR 4.20 3 сек !!!!!

Особенно удивила старая 3.21 - работает быстрее новых.

Напоминаю - число циклов процессора MSP430 в данной процедуре порядка 1млн.

Кто-нибудь сталкивался с такой ситуацией?

Share this post


Link to post
Share on other sites
Вот проверил скорость выполнения процедуры БПФ в разных версиях симулятора IAR EW430:

3.21 31 сек

3.40 55 сек

3.42 52 сек

4.10 60 сек

IAR AVR 4.20 3 сек !!!!!

Особенно удивила старая 3.21 - работает быстрее новых.

Напоминаю - число циклов процессора MSP430 в данной процедуре порядка 1млн.

Кто-нибудь сталкивался с такой ситуацией?

ИМХО это особенности симуляции Фон-Неймановской архитектуры у MSP430, в отличие от Гарвардской у AVR.

Share this post


Link to post
Share on other sites

Наступил на грабли при вызове ассемблерных процедур!

 

Соответствие параметров и регистров изменилось!!!

 

См. стр.93 "EW430_CompilerReference.pdf", правьте свои исходники на ассемблере, во всяком случае те, у кого в вызываемых функциях более одной переменной.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this