【发布时间】:2012-10-20 20:14:22
【问题描述】:
我正在尝试将 BeRTOS 用于 Texas Instruments Stellaris Cortex-M3。我的工作环境是 IAR。为适应 IAR 和我正在使用的特定 uC 进行了许多细微的更改,但我有一个似乎无法解决的问题……坦率地说,这有点超出我的想象。
这段代码:
1 void NAKED lm3s_busyWait(unsigned long iterations)
2 {
3 register uint32_t __n __asm("r0") = iterations;
4
5 __asm volatile (
6 "1: subs r0, #1\n\t"
7 "bne 1b\n\t"
8 "bx lr\n\t"
9 : : "r"(__n) : "memory", "cc");
10
11 }
...正在生成一些错误和警告。
错误:应为“;” -----> 第 3 行
错误:应为“(” -----> 第 5 行
错误:预期为“)” -----> 第 9 行
警告:变量“__n”已声明但从未引用 -----> 第 3 行
有什么建议吗?
【问题讨论】:
-
考虑看看这个。它特别指出它不适用于 Cortex 内核,但它确实提供了“不引用特定寄存器”之类的功能...supp.iar.com/Support/?note=86655
-
更高版本的 IAR 工具支持 GCC 样式的内联汇编。我认为没有办法显式使用 r0,但语法允许您让编译器为您选择一个寄存器。有关详细信息,请参阅 IAR 编译器手册。
标签: assembly embedded inline-assembly iar