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

 
 
> Assembler в CrossWorks 1.5, Как вставить функции, написанные на ассемблере в код C.
SimpleSoft
сообщение Jan 26 2006, 11:52
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 273
Регистрация: 3-11-05
Пользователь №: 10 442



День добрый.
Столкнулся с проблемой, связанную с тем, что надо написать процедуры на ассемблере, которые в свою очередь надо вызывать из С кода.
Как не бился, не видит функции написанные на ASM.
Делал так:

asm.s :

.extern InitRoutine
.extern DoneRoutine

InitRoutine:
mov R12, PC
stdbm SP!, {R12, LR}
...
...

DoneRoutine:
mov R12, PC
...


Затем в asm.h
extern int InitRoutine(int param1, int param2);
extern int DoneRoutine(int param1, int param2);

А в основной программе делаю:

#include "asm.h"

int main(void)
{
InitRoutine(1,2);
....
DoneRoutine(3,4);
....
}

Линкер выдает ошибку:
undefined reference to `InitRoutine()'

Как можно заставить увидеть мою функцию?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AndyBig
сообщение Jan 27 2006, 07:12
Сообщение #2


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Базис Си++ smile.gif
Прототипы функций, написанных и откомпилированных в Си (без плюсов) в Си++ объявляются через extern "C" ...
В Вашем случае:
extern "C" int InitRoutine(int param1, int param2);
extern "C" int DoneRoutine(int param1, int param2);

Точно так же объявляются функции, написанные в Си++, если их нужно вызывать из модулей, написанных в Си (или в асме).
Go to the top of the page
 
+Quote Post
SimpleSoft
сообщение Jan 28 2006, 12:05
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 273
Регистрация: 3-11-05
Пользователь №: 10 442



Цитата(AndyBig @ Jan 27 2006, 11:12) *
Базис Си++ smile.gif
Прототипы функций, написанных и откомпилированных в Си (без плюсов) в Си++ объявляются через extern "C" ...
В Вашем случае:
extern "C" int InitRoutine(int param1, int param2);
extern "C" int DoneRoutine(int param1, int param2);

Точно так же объявляются функции, написанные в Си++, если их нужно вызывать из модулей, написанных в Си (или в асме).


Как иногда нехватает полноценного знания С и С++, а также их различий... wink.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 00:08
Рейтинг@Mail.ru


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