Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюк оптимизации в IAR 3.10C
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Tech
Пол дня искал ошибку, оказалось EW IAR AVR оптимизировал код:

было:
if(a == x1) {...}
if(a == x2) {...}
...
откомпилировалось как:
if(a == x1) {...}
else {...}
...
помогло:
if(a == x1) {...}
else if(a == x2) {...}
else {}
...
или
case
...
BVU
Попробуйте более поздние версии EW IAR AVR начиная с 4.10.
Возможно таких проблем не возникнет. 3.10 - довольно 'глюкавый', знаю по собственному опыту. Многие соглашения 'C', там не выполняются, тем более при использовании максимальной оптимизации.
MALLOY2
версия 3.10С глючливая 100% более поздние версии используйте
Tech
Как в IAR AVR должны передаваться аргументы во внешнюю ассемблерную функцию?
Возможно я неправильно понял документацию, но из того что я понял следует:
Если внешняя ассемблерная функция объявлена как
extern unsigned int Func(unsigned int, unsigned int);,
то параметры должны передаваться так
R17:R16 Func(R17:R16, R21:R20),
а получилось R17:R16 Func(R17:R16, R19:R18).

Чего я не учёл, может pragma какая?
Или компилятор брыкается?
ms1
Цитата(Tech @ Nov 29 2005, 11:46) *
Как в IAR AVR должны передаваться аргументы во внешнюю ассемблерную функцию?

Register assignment using the new calling convention

In the new calling convention, as many parameters as possible are passed in registers.
The remaining parameters are passed on the stack. The compiler may change the order
of the parameters in order to achieve the most efficient register usage.
The algorithm for assigning parameters to registers is quite complex in the new calling
convention. For details, you should create a list file and see how the compiler assigns the
different parameters to the available registers, see Creating skeleton code, page 96.
Below follows some examples of combinations of register assignment.
A function with the following signature (not C++):
void foo(char __far * a, int b, char c, int d)
would have a allocated to R18:R17:R16, b to R21:R20 (alignment requirement
prevents R20:R19), c to R19 (first fit), and d to R23:R22 (first fit).
...

Все это из файла EWAVR_CompilerReference.pdf
AVR® IAR C/C++ Compiler Reference Guide Fourth edition: February 2005
Part number: CAVR-4
стр.103 (физически это стр.125)

Да и вот еще:
This guide applies to version 4.x of AVR IAR Embedded Workbench
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.