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

 
 
> IAR for PIC18, Вызов asm routines
scout
сообщение Oct 24 2009, 21:30
Сообщение #1


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

Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837



Собственно делаю как описано в документации:

PUBLIC в *.asm, extern перед объявлением прототипа в *.c.
Не работало, пока не глянул в startup и не посмотрел, что там еще
для чего то директивы FUNCTION и FUNCALL применяются.
Полез читать доку на компилер, но там все как то смутно описано,
особенно не понятно, что за таинственный параметр надо указывать
после имени метки в директиве FUNCTION.
Т.е например в startup:

Код
FUNCTION  __program_start,021A01H
LOCFRAME  CSTACK, 2, STACK
FUNCTION  __low_level_init,0200H
FUNCALL   __program_start, __low_level_init


Что за таинственный параметр 021A01H?


--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью.
Конфуций
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scout
сообщение Oct 30 2009, 17:23
Сообщение #2


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

Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837



Поскольку никто на мой вопрос не смог ответить, отвечу сам себе, возможно кому - то эта информация окажется полезной.
Привожу переписку с саппортом IAR-а.

The second argument to the FUNCTION directive is a field of flags. The
meaning of the different flag values are given in the table below. For
instance, a flag value containing the bit mask 0x400 indicates that the
function is called via a function pointer.

Flag value Flag description
0x001 The function is defined in this module
0x002 The function is prototyped
0x200 The function is placed in non-banked memory
0x400 The function is called indirectly

Example:
1) Create a source code in C e.g
void foo(int i, int j)
{
i++;
j++;
}
Compiling this code you generate a assembler file using
Project->options->C/C++ compiler>List checking "output assembler file"

you get file .s49 file containing

...
EXTERN ?CLPIC18_3_10_L00

PUBLIC foo
FUNCTION foo,0203H
ARGFRAME OVERLAY, 4, STATIC
LOCFRAME CSTACK, 2, STACK

...

The value 0203H are the bits telling to the linker the properties of the
function.

Я попросил саппорта дать более подробное описание флагов, на что получил следующее:

Some of the less esoteric bits and brief comments are listed below.

Making "OR" with some of the below values (properties) you will get the
resulting "021A01H"

0x0001L /* Function is defined (body found) */
0x0002L /* ANSI prototyped */
0x0004L /* "trap" function */
0x0008L /* "monitor" function */
0x0010L /* "interrupt" function */
0x0020L /* "interrupt" [vec] function */
0x0200L /* "non_banked" function */
0x0400L /* function is indirectly referred to */

0x0800L /* This is "main()" */
0x1000L /* Function calls other */
0x10000L /* Intrinsic function */
0x20000L /* calls directly */
0x40000L /* calls indirectly */
0x80000L /* Inline asm directive used */


--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью.
Конфуций
Go to the top of the page
 
+Quote Post
Прохожий
сообщение Oct 30 2009, 18:53
Сообщение #3


Cундук
*****

Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269



Цитата(scout @ Oct 30 2009, 20:23) *
...

ПМСМ, для того, чтобы таких вопросов не было, для PIC18 надо использовать MCC18.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 16:21
Рейтинг@Mail.ru


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