【发布时间】:2012-10-05 18:48:19
【问题描述】:
我在硬故障处理程序中进行了一些组装。该程序集基本上是为了将当前堆栈指针作为参数传递(在 R0 中)。好像是这样……
__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);
建议?
【问题讨论】:
-
你有没有在这个 asm 代码所在的文件中定义为 extern 的函数 SavePC?
-
@maths-help-seeker 我包含了 SavePC 的头文件,它的原型定义为 extern -
extern void SavePC(unsigned long);。好吗? -
是的..我正在阅读汇编程序的手册。它使用 EXTERN 。您能否也检查一下而不是导入?
-
@maths-help-seeker 我试过了,编译器返回... 错误[Og005]:内联汇编中的未知符号:“EXTERN”V:\interrupt_setup.c 137
-
这个页面展示了一个如何编写一个好的故障处理程序的例子。您不需要使用内联汇编。 blog.frankvh.com/2011/12/07/cortex-m3-m4-hard-fault-handler
标签: c inline-assembly extern cortex-m3 iar