STM32keil5调试的时候core_cm3.c中的疑问

img


图片中__ASM uint32_t __get_PSP(void)前面有个小红叉,提示expected '(' before 'asm'
这个问题困扰了我一天了
在网络上面也找了好久,有人说:
在STM32中的sys.c文件编译报出这个错误时:

__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");
}
但是我用的是官方的外设库,按照正常不应该会有这种问题的,请大家帮忙解释一下这是为什么,感激不尽

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

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

编译器的版本改为:5 试试

img

函数里面的语句你没加分号吧,应该加上吧

img

这个是内联汇编,有报错,可能跟编译器有关吧