请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:F29H850TU 工具/软件:
我们在使用扩展的“asm"命令“命令时发现了一个问题。 例如、如果寄存器的值要存储在全局 C 变量中、
编译器为变量地址提供一个“Dx"寄存“寄存器、而不是“Ax"寄存“寄存器、这会导致编译错误:

为了在您这边重现此问题、我们修改了 SDK 的示例“led_ex1_blinky.c":“:
#include "board.h"
uint32_t sp;
int main (void)
{
Device_init();
Board_init();
/* Compilation fails as the compiler selects a `Dx` register instead of a `Ax` register to load the address of `sp`. */
__asm volatile("ST.32 *%0, A15" : : "r"(&sp));
for(;;)
{
GPIO_writePin(myBoardLED1_GPIO, 0);
DEVICE_DELAY_US(1000000);
GPIO_writePin(myBoardLED1_GPIO, 1);
DEVICE_DELAY_US(1000000);
}
}
我们使用基于 makefile 的构建来构建示例:“gmake -s led_ex1_blinky.c profile={DEBUG_O0|debug_O1}config=flash“
使用的编译器:“TI C29 Clang 编译器 1.0.0.LTS“
提前感谢大家。