前面我分享過一篇文章【MDK v5.25比較實用的功能】,其中大概提了一下:編譯器升級到ARM Compiler 6.9。
就在前天,一關注我的朋友問了我這樣一個問題:
黃老師您好,前些日子您更新的公眾號中介紹最新版本的keil5.25中提到了伴隨更新的新編譯器6.9。在簡單的把原來的5版本編譯器修改為6后,重新編譯工程,出現了大量錯誤,并且大都包含在庫文件中,請問您是否曾注意過這一點,并怎么解決的呢?
本文主要內容:
1.先給大家講述一下官方的解決辦法;
2.實際工程中的解決辦法;
Ⅰ你了解過ARM Compiler 6.9嗎?
MDK-ARM在16年就將編譯器升級到了V6版本,但很少有人關心這個功能。包括我在內,其實一直都只知道MDK-ARM支持V6版本的編譯器,但沒有真正使用過。
那位朋友前天問我時,我回復他:我也沒仔細研究過這個問題。
那位朋友對這個V6.9編譯的功能研究了一天之后,沒有完全解決這個問題,昨天晚上又給我說了他研究的情況。于是,我就開始了這個問題的研究。
最后,經過我昨晚的研究,得出了解決辦法。而且,效果真的很好(編譯效率),編譯的速度,可以和IAR相比拼了。我想,我后面使用MDK-ARM就基于V6.9了。
ⅡARM Compiler 5 to 6
MDK-ARM編譯器從V5轉到V6的解決辦法,只要用心去研究的朋友都能在Keil官網找到官方的說明文檔。
官方說明文檔下載地址:
http://www.keil.com/appnotes/docs/apnt_298.asp
先看下這個說明文檔的目錄:
看目錄,其實很簡單,我大概說一下里面重要的幾點:
1.Switch the Compiler in μVision IDE
即配置工程,將編譯器切換到V6.9:Project -> Option for Target ->Target.
2.Diagnostic Settings: Warnings and Errors
即診斷設置,也就是配置工程,編譯時警告輸出的方式:先切換到V6.9,再配置(默認AC5-like即可,如果錯誤較多,可No Warning,不顯示警告):
這里想說一點:V6編譯器檢查的規則更加嚴格,簡單來說,就是編譯的警告會更多。如以前的一些代碼編譯都是沒有警告,但用V6.9就可能有警告,如:
void HardFault_Handler(void)
{
while (1)
{
}
}
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
{
}
3.Incompatible Language Extensions
即V5和V6的指令不兼容,我們需要修改不兼容的代碼。其實,就那么幾條不兼容的語句,編譯之后見到的錯誤基本就是由于這些語句的不兼容導致的。
4.Select a Compiler Optimization Level
這里編譯等級,其實不是重點,默認即可。
5.Object and Library Compatibility
關于使用庫存在的一些問題,在編譯的時候,添加關鍵字:-fshort-enums -fshort-wchar(一般默認都是添加了的):
6.Data Packing
這里主要是說數據結構,也是上面的指令不兼容的問題。如果之前使用typedef __packed struct定義,則替換成:__PACKED_STRUCT。
7.Assembler Migration
匯編遷移:這一節可以說是重點。
很多RTOS都有一個或多個與匯編有關的源代碼文件,所以,很多有RTOS的工程,編譯后都會存在許多錯誤。常見的就是“asm”這個關鍵字。
文件中大概說明了:兼容GNU標準,不兼容ARM標準。其中還特別強調了關于Inline Assembler的一點,僅支持GNU標準:
本節重點帶領大家分析官方的資料,下一章節,實際應用中,我們的快捷的解決方法。
Ⅲ實際應用解決方法
上面官方的解決辦法,可以總結為兩點:
1.修改工程配置;
2.修改源代碼;
實際應用中,我們也是這樣按照官方一步一步修改源代碼嗎?
答案:如果兼容的源代碼,替換即可; 如果沒有,就只有按照官方說明一步一步修改。
下面,我就來教大家如何使用官方提供的、兼容V6.9的代碼替換,這種快捷解決問題的辦法。
1.解決CMSIS不兼容問題
下載最新的CMSIS文件替換你工程中CMSIS文件。
下面是關于CMSIS的一份官方說明,大概意思就是向下兼容。
下載地址:http://www.keil.com/dd2/Pack
如果我們安裝了最新的MDK-ARM V5.25,在安裝目錄下都有這些文件:
這種方法可解決Cortet-M等處理器程序編譯的錯誤問題,如STM32F0、F1、F4等Cortet-M等程序。
2.解決帶FreeRTOS編譯錯誤問題
FreeRTOS解決辦法,除了解決上面CMSIS的問題,還需要解決操作系統部分匯編帶來的問題,簡單說就是【FreeRTOSSourceportableRVDS】這個目錄下源代碼不兼容的問題。
解決辦法,替換相應文件:
-
ARM
+關注
關注
134文章
9057瀏覽量
366874 -
編譯器
+關注
關注
1文章
1618瀏覽量
49057 -
MDK
+關注
關注
4文章
209瀏覽量
32042
發布評論請先 登錄
相關推薦
評論