error: expected '(' before 'void' __ASM void xxx

概述

使用gcc 编译时才会出现这种错误,在keil中虽然会标红,但可以正常编译

解决

  1. 去掉函数名称前的__ASM
  2. 使用__ASM volatile()将汇编语句包裹起来

例如:

__ASM void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}

修改成下面

void MSR_MSP(u32 addr)
{
__ASM volatile("MSR MSP, r0"); 
__ASM volatile("BX r14");
}

或者如下

__asm void wait()
{ 
   BX lr
}

修改成下面

void wait()
{
    __ASM volatile("BX lr");
}
发布了87 篇原创文章 · 获赞 28 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/MakerCloud/article/details/102528717