Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ASM и С++
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
andrvisht
Есть *.asm функции которые хотелось бы прикрепить к Embedded C++
прочитал AVR034.pdf и решил для начала попробовать их примерчики.

вот функция примера на asm пристегнутая к проекту
Код
NAME get_port
#include "io8515.h"; The #include file must be within the module
    PUBLIC get_port_asm  ; Declare symbols to be exported to C function
    RSEG   CODE        ; This code is relocatable, RSEG
get_port_asm;          ; Label, start execution here
    in    R16,PIND ; Read in the pind value
    swap  R16      ; Swap the upper and lower nibble
    out   PORTB,R16; Output the data to the port register
    ret            ; Return to the main function
END

вот main.c
Код
#include "io8515.h"
//#pragma language = 0
extern void get_port_asm(void);/* Function prototype for asm function */
__task void main(void)
{
  DDRD = 0x00;/* Initialization of the I/O ports*/
  DDRB = 0xFF;
  while(1)/* Infinite loop*/
  {
    get_port_asm();/* Call the assembler function */
  }
}

а вот ошибка
Код
Error[e46]: Undefined external "get_port_asm()" referred in main

Если выбрать С то все работает, но в документации написано что asm для С и Embedded C++ существует.
Может как0то по другому надо описать, или Header какой подключить, или еще что .... ?
Aleks17
Они подключаются только как сишные то есть extern "C" function()
andrvisht
Цитата(Aleks17 @ Apr 28 2006, 11:20) *
Они подключаются только как сишные то есть extern "C" function()

Спасибо, заработало.
А где об этом писалось, в AVR IAR Assembler что-то не нашел такого ...
Aleks17
В AVR IAR C Compiler есть спецтальная глава по поводу mixing С and assembler. Там же описывается какие рег-ры можно портить, а какие нет
IgorKossak
Цитата(&-rey @ Apr 28 2006, 11:43) *
Цитата(Aleks17 @ Apr 28 2006, 11:20) *

Они подключаются только как сишные то есть extern "C" function()

Спасибо, заработало.
А где об этом писалось, в AVR IAR Assembler что-то не нашел такого ...

Если это есть в описаниях IARа - хорошо, хотя могло и не быть, т. к. это прерогатива не столько IARа, сколько стандарта C++.
Professor
Цитата(&-rey @ Apr 28 2006, 10:51) *
Есть *.asm функции которые хотелось бы прикрепить к Embedded C++
прочитал AVR034.pdf и решил для начала попробовать их примерчики.

вот функция примера на asm пристегнутая к проекту
Код
NAME get_port
#include "io8515.h"; The #include file must be within the module
    PUBLIC get_port_asm ; Declare symbols to be exported to C function
    RSEG   CODE    ; This code is relocatable, RSEG
get_port_asm;         ; Label, start execution here
    in    R16,PIND; Read in the pind value
    swap  R16     ; Swap the upper and lower nibble
    out   PORTB,R16; Output the data to the port register
    ret        ; Return to the main function
END

вот main.c
Код
#include "io8515.h"
//#pragma language = 0
extern void get_port_asm(void);/* Function prototype for asm function */
__task void main(void)
{
  DDRD = 0x00;/* Initialization of the I/O ports*/
  DDRB = 0xFF;
  while(1)/* Infinite loop*/
  {
    get_port_asm();/* Call the assembler function */
  }
}

а вот ошибка
Код
Error[e46]: Undefined external "get_port_asm()" referred in main

Если выбрать С то все работает, но в документации написано что asm для С и Embedded C++ существует.
Может как0то по другому надо описать, или Header какой подключить, или еще что .... ?


Мне очень нужно Создать асемблерную вставку в Embedded C++.... Объясните пожалуйста что значит "вот функция примера на asm пристегнутая к проекту" ЧТО ЗНАЧИТ ПРИСТЕГНУТАЯ????
IgorKossak
Цитата(Professor @ May 13 2006, 14:20) *
... Объясните пожалуйста что значит "вот функция примера на asm пристегнутая к проекту" ЧТО ЗНАЧИТ ПРИСТЕГНУТАЯ????

Очевидно, обьяснить этот жаргон можно так: функция, написанная на ассемблере, содержится в отдельном ассемблерном файле, который включен в состав проекта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.