Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как вызвать Си-функцию из ассемблерной части программы? (+)
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
ASergej_R19
Проект совмещает Си и асм.
В отдельном файле есть Си-функция, которую надо вызвать в отдельном файле, где все написано на асме - как это сделать?

Компилятор дает этой си-функции имя типа: c_func => c_func__Fv, но ругается, если пытаться в ассемблерной части написать типа .extern c_func__Fv...
zltigo
Цитата(ASergej_R19 @ Apr 7 2007, 15:05) *
Компилятор дает этой си-функции имя типа: c_func => c_func__Fv,

Значит это не C а C++ smile.gif
Естественных способов (не зависимых от используемого компилятора) вызова C++ обычно нет. Посему сделайте функцию сишной и вызывайте.


P.S.
Ну и поиском, пожалуйста, пользуйтесь, ведь Вы не думете, что Вам первому встретилась такая необходимость и ранее никто не спрашивал и не отвечал....
ASergej_R19
Посиком смотрел конечно, но не нашел ничего похожего... :-(

А за ответ - шпасибо, все заработало. Благодарствую...
sergeeff
Чтобы с++ ная функция без проблем могла вызываться из ассемблера она должны декларироваться как extern "C" fun(...).
zltigo
Цитата(sergeeff @ Apr 7 2007, 19:57) *
Чтобы с++ ная функция без проблем могла вызываться из ассемблера она должны декларироваться как extern "C" fun(...).

После такой декларации она уже НЕ БУДЕТ C++ smile.gif и соответственно не будет иметь С плюсовый mangling.
sergeeff
Ну это же стандартно решается:

#ifdef __cplusplus
extern "C" fun (...)
#endif // __cplusplus

Для с и asm - имеем nonmangled-имя, для с++ - mangled.

Или я не прав?
zltigo
Цитата(sergeeff @ Apr 8 2007, 12:54) *
Или я не прав?

Не правы. После такого вседа и для всех имеем "нормальное сишное" имя. #ifdef это просто для переносимости исходника на "C" компиляторы, которые просто не поймут extern "C"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.