STM32(Cortex-M3)开发,RVDS和MDK谁优谁劣?
目前針對Cortex-M3的開發示例大都以MDK的工程來提供,所以MDK更適合Cortex-M3的開發才對,難到幾萬元的RVDS其開發表現不如萬元左右的MDK開發工具嗎,實際情況又如何呢?
開發板:EM-STM3210E 和 EM-STM3210E-EVAL
CPU:STM32F103ZE
目標源碼:Microsoft .Net Micro Framework v4.0 for Cortex-M3
一、編譯
編譯模式
?Debug
?Release
?RTM
?
MDK
?RAM
?正常
?異常
?異常
?
FLASH
?正常
?異常
?異常
?
RVDS
?RAM
?異常
?正常
?異常
?
FLASH
?異常
?異常
?異常
?
?
所謂異常,其實問題很簡單,就是CRC計算的代碼出了問題,相關代碼如下:
?在出現異常的版本中,代碼運行到crc = c_CRCTable[ ((crc >> 24) ^ (*ptr++)) & 0xFF ] ^ (crc << 8);時,程序即出現異常,并且是rgBlock地址在外擴SRAM或片內FLASH時才出現這個問題,有時執行多個循環才會出現這種情況(為了鎖定和捕捉該錯誤,花了我許久的時間才定位到此處)。STM32F103ZE包含CRC計算功能,但是以4個字節為計算單位,所以不太適用。
從以上表現來看,MDK和RVDS的編譯結果還是有比較大的區別的,所以建議嵌入式開發者要多測試幾款工具,才能真正定位自己的問題。
二、調試
由于目前EM-STM3210E 和 EM-STM3210E-EVAL開發板并沒有提供一款直接初始化片外SRAM的軟件,所以要調試RAM版本的程序,MDK或RVDS都需要編寫調試腳本,用MDK調試Cortex-M3和調試ARM9或ARM7平臺一樣,直接調試即可。但是用RVDS調試卻有不同,為了能正常調試,還是費了不少周折的。
?
?
在用RVDS調試Cortex-M3時,要確保上圖所示的 [State]中的“t”為“T”。
有意思的是,這個選項和BOOT的啟動選項有很大關系,如果設為“系統啟動”模式,則上圖的“t”自動為“T”,可以直接進行調試,其它兩種模式“用戶啟動”和“RAM啟動”都默認為“t”,需要手動切換為“T”。
此外RVDS顯示的指令地址有些問題(最低位并不為1),而MDK卻一切正常。
三、其它
?
?
ARM開發板,其中基于STM32F103ZE CPU的開發板有三款
?
從我目前的調試經驗來看,如果調試基于ARM7或ARM9的開發板,RVDS還是非常強大的,不過如果要調試基于Cortex-M3的開發板(特別是STM32系列),我倒是建議采用MDK來進行調試,不僅價格便宜,綜合表現也不錯。
??? 最近一段時間,.Net Micro Framework for Cortex-M3除了USB驅動移植成功外,還開發了一個輕量級TinyGUI,在低內存的Cortex-M3開發板上有不俗的表現,我在后續的博文中會進行相關的介紹。
?
?
本文轉自yefanqiu51CTO博客,原文鏈接:http://blog.51cto.com/yfsoft/321208,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的STM32(Cortex-M3)开发,RVDS和MDK谁优谁劣?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js_调试_01_14 个你可能不知道的
- 下一篇: Python [9] optparse模