找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 764|回复: 3
打印 上一主题 下一主题
收起左侧

AC6编译器内嵌汇编怎么写标识

[复制链接]
跳转到指定楼层
楼主
ID:146878 发表于 2023-8-23 13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
__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这个跳转用的标识符认报错,不知道怎么写。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2023-8-23 14:44 | 只看该作者
你把L1改成L11111不就可以了么???
回复

使用道具 举报

板凳
ID:146878 发表于 2023-8-23 22:52 | 只看该作者
Hephaestus 发表于 2023-8-23 14:44
你把L1改成L11111不就可以了么???

无论改什么都一样的,并不是如报错说明的已经被定义。
回复

使用道具 举报

地板
ID:146878 发表于 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"
  );
}
这样就可以了,原因未知
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表