Перейти к содержанию
    

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кому интересно, в версии ИАР 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Cуществует и __z_x и __x_z - соответственно, как передавать первый и второй указатель.

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

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

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

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Да.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

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

Изменено пользователем grand1987

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...