OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2440|回复: 2

AC6 编译器内嵌汇编问题,怎么做循环。

[复制链接]

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
发表于 2023-8-23 00:04:57 | 显示全部楼层 |阅读模式
100金钱
__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:
        ^


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
 楼主| 发表于 2023-8-23 22:50:51 | 显示全部楼层
回复

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
 楼主| 发表于 2023-8-23 23:20:06 | 显示全部楼层
void delay_ntimes(unsigned int n)
{
  __asm("L1:\n\t"
        "SUBS R0,#1\n\t"
        "BCS L1\n\t"
        "BX LR"
  );
}
void delay_us(uint32_t us)
{
     //delay_ntimes((us * (SystemCoreClock / 1000000) - 8) / 3);
}

报错问题找到了,我在这条函数的下方,写了一个调用这个嵌汇编函数的函数,就会报错,不调用就不报错。或者在别的C文件调用也不报错。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 18:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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