我目前正在尝试将为 IAR 编译器编写的代码移植到 GCC,并且遇到了涉及 Micrium 的 uC/OS - III RTOS 的错误。
错误:
undefined reference to `CPU_SR_Save'
这个错误最终导致我在cpu.h
调用 CPU_SR_Save 的 uC/OS-III 代码中找到这一行:
#define CPU_INT_DIS() do { cpu_sr = CPU_SR_Save(); } while (0) /* Save CPU status word & disable interrupts.*/
然后...
CPU_SR CPU_SR_Save (void);
CPU_SR_Save 位于cpu_a.s
同一目录中的程序集文件中:
.thumb_func
CPU_SR_Save:
MRS R0, PRIMASK @ Set prio int mask to mask all (except faults)
CPSID I
BX LR
在文件中更进一步......
.global CPU_SR_Save
我很确定编译器/链接器不知道这个程序集文件存在,我正在努力寻找一种方法将它集成到构建的其余部分中。我已经在互联网上查看了所有内容,但到目前为止还没有找到任何有效的方法。我对这些东西还很陌生,所以我可能会错误地思考事情。
有人对我如何让我的程序看到这个程序集文件有任何建议吗?
以下是我迄今为止尝试过的所有事情:
- 添加
extern
到行CPU_SR CPU_SR_Save (void);
- 将文件扩展名从更改
.s
为.S
- 添加
-x assembler-with-cpp "fullPath\cpu_a.s"
到编译器选项 - 将 Visual Studio 项目中的 Item Type 更改为Microsoft Macro Assembler
- 其他我认为不值得一提的
我正在使用Visual Studio和VisualGDB,这里是给我这个错误的代码的链接:https ://github.com/lhr-solar/uCOS-III-STM32F4/tree/master/uC-CPU/ARM -Cortex-M4/GNU