MDK-ARM編譯器V6和V5

ARM 1019瀏覽

最新版本的arm 開發工具MDK5.23帶有v6.6 和 V5.06 update4的ARM Compiler

官方資料表明,V5版本的編譯器已經停止開發,以后只進行維護ARM推薦大家都使用后續V6版本的編譯器,

而且根網友的對比測試結果,V5和V6編譯器編譯速度差異巨大,

于是就嘗試使用新的編譯器進行編譯,也直觀發現新版本編譯器編譯速度很快。

選擇新版本編譯器的操作在target目錄下:

還需要同時修改c/c++目錄下語言選項(和選擇編譯器的操作有先后順序):

然后編譯發現如下尷尬的錯誤和警告:

../CMSIS/CM3/core_cm3.c(445):
error: non-ASM statement in naked function is not supported
? uint32_t result=0;
? ^
../CMSIS/CM3/core_cm3.c(442): note: attribute is here
uint32_t __get_PSP(void) __attribute__( ( naked ) );
????????????????????????????????????????? ^
../CMSIS/CM3/core_cm3.c(465): error: parameter references not allowed in naked functions
????????????????? "BX? lr???? nt" : : "r" (topOfProcStack) );
???????????????????????????????????????????? ^
../CMSIS/CM3/core_cm3.c(461): note: attribute is here
void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) );
???????????????????????????????????????????????????????? ^
../CMSIS/CM3/core_cm3.c(479): error: non-ASM statement in naked function is not supported
? uint32_t result=0;
? ^
../CMSIS/CM3/core_cm3.c(476): note: attribute is here
uint32_t __get_MSP(void) __attribute__( ( naked ) );
????????????????????????????????????????? ^
../CMSIS/CM3/core_cm3.c(499): error: parameter references not allowed in naked functions
????????????????? "BX? lr???? nt" : : "r" (topOfMainStack) );
???????????????????????????????????????????? ^
../CMSIS/CM3/core_cm3.c(495): note: attribute is here

.......

其中必有的錯誤

ObjProject.axf" - 4 Error(s)?

錯誤都來自STM32工程的core_cm3.c文件的匯編嵌入語句中。

錯誤內容是非匯編語句在?naked function不被支持,具體的解釋是一個被聲明為naked?特性的函數不可以通過任何方式使用局部變量,

而在上述

__get_MSP(void)
_set_PSP(uint32_t topOfProcStack)
_set_MSP(uint32_t topOfMainStack)

等 naked?函數中卻聲明一個局部變量并在代碼中進行了賦值操作。

但由于core_cm3.c文件是官方庫文件,不可編輯,所以修改這個問題比較麻煩,

目前也沒有什么好的辦法,還期望有解決這個問題的大神能伸出援手。

七星彩走势图2元网官网