|
IAR for PIC18, Вызов asm routines |
|
|
|
Oct 24 2009, 21:30
|
Частый гость
 
Группа: Свой
Сообщений: 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?
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
 |
Ответов
(1 - 9)
|
Oct 25 2009, 06:34
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837

|
Делаю так: Код PUBLIC test ;FUNCTION test, 1 RSEG CODE:CODE
test: NOP NOP NOP
return
END Если отремарить строчку "FUNCTION test, 1", то работает. Параметр 1 я написал от фонаря, т.к не знаю, что это такое. Собственно и хочу разобраться.
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
Oct 25 2009, 09:02
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(scout @ Oct 25 2009, 09:34)  Если отремарить строчку "FUNCTION test, 1", то работает. Параметр 1 я написал от фонаря, т.к не знаю, что это такое. Собственно и хочу разобраться. А откуда вы взяли, что там должен быть параметр? Просто "FUNCTION test" не проходит? У меня впечатление, что FUNCTION является заменой PUBLIC. Попробуйте "FUNCTION test" раскомментировать, а PIBLIC закоментировать. P.S. Прошу прощения, но у меня IAR компилятор для AVR, а не для PIC18, поэтому могут быть расхождения в синтакисе языка.
|
|
|
|
|
Oct 25 2009, 17:24
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837

|
Без второго параметра директива FUNCTION не работает(компилятор ругается на не допустимый синтаксис). Без PUBLIC тоже не работает, но ругается уже линкер. Для AVR у меня тоже все прекрасно работает, а вот под PIC они наворотили... Вот что сказано в документации на Си компилятор:
SYNTAX FUNCTION label,value
PARAMETERS label - Label to be declared as function. value - Function information.
DESCRIPTION FUNCTION declares the label name to be a function. value encodes extra information about the function.
И все... Какую такую дополнительную информацию отражает параметр "value"...
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
Oct 30 2009, 17:23
|
Частый гость
 
Группа: Свой
Сообщений: 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 */
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
Oct 30 2009, 22:06
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837

|
А чем конкретно вам Иар не угодил?
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
Oct 30 2009, 23:50
|
Cундук
    
Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269

|
Цитата(scout @ Oct 31 2009, 01:06)  А чем конкретно вам Иар не угодил? Он денег стоит. И немалых. А воровать нехорошо... МСС18 абсолютно бесплатен. С некоторыми незначительными ограничениями. И по последним данным не так плох, как о нем рассказывают.
|
|
|
|
|
Oct 31 2009, 08:37
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837

|
Не забывайте где мы все живем Думаю тему можно считать закрытой, суппорты дали вполне исчерпывающий ответ.
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|