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");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章