我在硬故障处理程序中有一些程序集。程序集基本上是为了传递当前堆栈指针作为参数(在R0中)。它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?
__asm(" mov r0, sp\n"
" bl SavePC\n"
" bx lr");
当SavePC在同一个c文件中时,这工作正常。但是,当SavePC被放置在另一个c文件中时,我没有运气。我试图导入这样的功能...
__asm("IMPORT SavePC\n"
" mov r0, sp\n"
" bl SavePC\n"
" bx lr");
...但我必须做一些不正确的事情。编译器报告以下...
Error[Og005]: Unknown symbol in inline assembly: "IMPORT"
Error[Og005]: Unknown symbol in inline assembly: "SavePC"
Error[Og006]: Syntax error in inline assembly: "Error[54]: Expression can not be forward"
Error[Og005]: Unknown symbol in inline assembly: "SavePC"
Error while running C/C++ Compiler
与组件C文件包括与SavePC原型的头文件...
extern void SavePC(unsigned long);
建议?
2012-10-05
Jason
+0
你具备的功能** SavePC **在文件中定义为extern这个asm代码驻留? –
+0
@ maths-help-seeker我包含SavePC的头文件,它的原型定义为extern - 'extern void SavePC(unsigned long);'。好? –
+0
是的。我正在通过汇编程序的手册。它使用EXTERN 。你能否检查一下,而不是导入? –