Jump to content

    
Sign in to follow this  
Old1

Недокументированные возможности IAR

Recommended Posts

Нельзя при использовании модификатора с _z использовать вызов функции по указателю, т.к. IJMP имеет адрес в Z. Идея ясна?

Ну...если быть точным то не IJMP, а ICALL... Похоже, что так оно и есть, при вызове функции по указателю Z занят (и Х тоже используется). Для меня странно другое: в других случаях, если компилятор считал, что применение квалификаторов с _z и _х недопустимо (или нерационально?), он их игнорировал (по крайней мере в результате экспериментов я пришел к такому выводу), а здесь выдает ошибку...

И все таки неясно, что за атрибут __version_3?

Share this post


Link to post
Share on other sites

Если кому интересно, в версии ИАР 4.20а атрибуты __x, __z __x_z, __z_x уже документированы (см. avr/doc/iccavr.htm):

Miscellaneous

...

__x, __z __x_z, __z_x

The compiler defines the function type attributes __x, __z __x_z, and __z_x which are used by parts of the runtime library. These attributes can give very efficient code in a local perspective, but should be used with care as they change the calling convention and may have a negative effect on the size of the entire application.

 

Keyword

Description

 

__x The first pointer in the parameter list is placed in register X

__z The first pointer in the parameter list is placed in register Z

__x_z The first pointer in the parameter list is placed in register X and the second one in register Z

__z_x The first pointer in the parameter list is placed in register Z and the second one in register X

Share this post


Link to post
Share on other sites

Также есть еще SBRA и CBRA - это коммады какие-то AVR, иар их может использовать. Что за хрень - не знаю.

Ни в стандартном, ни в расширенном наборе (по крайней мере для ATmega) таких инструкций нет. Что имели в виду ИАРовцы - не понятно.

Вчера мне ответили на "Телесистемах" cbra/sbra

Share this post


Link to post
Share on other sites
Cуществует и __z_x и __x_z - соответственно, как передавать первый и второй указатель.

По поводу только указателей - если очень надо, преобразуй например int в void * и передай, а потом наоборот.

На форуме "Точка опоры" я писал про недокумментированные фичи иара, всякие "__raw", "__no_return" и прочее. Поищи там, давненько дело было.

Также есть еще SBRA и CBRA - это коммады какие-то AVR, иар их может использовать. Что за хрень - не знаю.

Да, да, знаю - эта тема уже давно гремучий баян(2005г) и подняда с анала истории, но вот только щас наткнулся... ))

 

Дима, сегодня разбирал твой AVR код от NikeE и напоролся на __x_z - раньше ни когда не встречал, это было как выстрел в лоб ;)

я так и не нашел твою статью на какойто там "Точка опоры", даже сайта не нашел. А так хотелось...

 

Хочу уточнить(это вопрос) - На сколько я понял из всего тут написанного то если в АВРке не использовать этот самый __x_z(и ему подобные модификаторы) то просто будет менее оптимальный код и соответсвенно медленее исполняться. Я всё верно понял?

Share this post


Link to post
Share on other sites
Хочу уточнить(это вопрос) - На сколько я понял из всего тут написанного то если в АВРке не использовать этот самый __x_z(и ему подобные модификаторы) то просто будет менее оптимальный код и соответсвенно медленее исполняться. Я всё верно понял?

 

Да.

Share this post


Link to post
Share on other sites

Здравствуйте, у меня есть вопрос подобный тем что обсуждались в этой ветке :

 

при помощи какого атрибута/прагмы можно указать ИАР-овскому компилятору для ARM не добавлять сохранение/восстановление контекста для функции/прерывания, т.е. аналог __attribute__((naked)) в GCC.

 

Пробовал __task - никакого эффекта.

 

Использую бесплатную версию среды (EWARM 7.10, IAR C/C++ Compiler for ARM (7.10.1.6676)), с ограничение до 32КБ.

Заранее благодарю.

Edited by grand1987

Share this post


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

 

при помощи какого атрибута/прагмы можно указать ИАР-овскому компилятору для ARM не добавлять сохранение/восстановление контекста для функции/прерывания, т.е. аналог __attribute__((naked)) в GCC.

 

Пробовал __task - никакого эффекта.

 

Использую бесплатную версию среды (EWARM 7.10, IAR C/C++ Compiler for ARM (7.10.1.6676)), с ограничение до 32КБ.

Заранее благодарю.

У IAR такое есть только для AVR, называется - __raw (если ещё не убрали). Было добавлено давно по специальной просьбе. В других компиляторах IAR нет (видимо, никто не просил). Вроде так, если я не отстал от жизни. :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this