标题: AC6编译器内嵌汇编怎么写标识 [打印本页]

作者: pdwdzz    时间: 2023-8-23 13:36
标题: AC6编译器内嵌汇编怎么写标识
__asm void delay_ntimes(unsigned int n)
{
L1
         SUBS R0,#1
         BCS L1
         BX LR
}
如上是AC5编译器下能编译的嵌汇编的代码,
但是改AC6后就不知道这么改了
尝试过如下
void delay_ntimes(unsigned int n)
{
  __asm("L1:\n\t"
        "SUBS R0,#1\n\t"
        "BCS L1\n\t"
        "BX LR"
  );
}
报错如下:
../User/time_base.c(92): error: symbol 'L1' is already defined
  __asm("L1:\n\t"
        ^
<inline asm>(1): note: instantiated into assembly here
        L1:
        ^
其他语句都是可以的,就是L1这个跳转用的标识符认报错,不知道怎么写。

作者: Hephaestus    时间: 2023-8-23 14:44
你把L1改成L11111不就可以了么???
作者: pdwdzz    时间: 2023-8-23 22:52
Hephaestus 发表于 2023-8-23 14:44
你把L1改成L11111不就可以了么???

无论改什么都一样的,并不是如报错说明的已经被定义。
作者: pdwdzz    时间: 2023-8-23 23:41
解决了
static void delay_ntimes(unsigned int n)
{
  __asm("L1:\n\t"
        "SUBS R0,#1\n\t"
        "BCS L1\n\t"
        "BX LR"
  );
}
这样就可以了,原因未知




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1