roman555 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Собственно делаю как описано в документации: 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Скорее всего в ассемблерной части вы забыли объявить сегмент. Например так: RSEG CODE:CODE:NOROOT(1) PUBLIC Wr_Reg Wr_Reg: nop nop ret Как называется по умолчанию мой сегмент кода, а как называется ваш - узнаете, если взглянете на листинг C-шного кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman555 0 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба Делаю так: PUBLIC test ;FUNCTION test, 1 RSEG CODE:CODE test: NOP NOP NOP return END Если отремарить строчку "FUNCTION test, 1", то работает. Параметр 1 я написал от фонаря, т.к не знаю, что это такое. Собственно и хочу разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба Если отремарить строчку "FUNCTION test, 1", то работает. Параметр 1 я написал от фонаря, т.к не знаю, что это такое. Собственно и хочу разобраться. А откуда вы взяли, что там должен быть параметр? Просто "FUNCTION test" не проходит? У меня впечатление, что FUNCTION является заменой PUBLIC. Попробуйте "FUNCTION test" раскомментировать, а PIBLIC закоментировать. P.S. Прошу прощения, но у меня IAR компилятор для AVR, а не для PIC18, поэтому могут быть расхождения в синтакисе языка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman555 0 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба Без второго параметра директива 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"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman555 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Поскольку никто на мой вопрос не смог ответить, отвечу сам себе, возможно кому - то эта информация окажется полезной. Привожу переписку с саппортом 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 */ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syv 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба ... ПМСМ, для того, чтобы таких вопросов не было, для PIC18 надо использовать MCC18. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman555 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба А чем конкретно вам Иар не угодил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syv 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба А чем конкретно вам Иар не угодил? Он денег стоит. И немалых. А воровать нехорошо... МСС18 абсолютно бесплатен. С некоторыми незначительными ограничениями. И по последним данным не так плох, как о нем рассказывают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
roman555 0 31 октября, 2009 Опубликовано 31 октября, 2009 · Жалоба Не забывайте где мы все живем :) Думаю тему можно считать закрытой, суппорты дали вполне исчерпывающий ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться