基于CMSIS標(biāo)準(zhǔn)的 Cortex-M3應(yīng)用軟件開(kāi)發(fā)
2 CMSIS規(guī)范
(1)文件結(jié)構(gòu)
CMSIS的文件結(jié)構(gòu)如圖3所示(以STM32為例)。其中stdint.h包括對(duì)8位、16位、32位等類型指示符的定義,主要用來(lái)屏蔽不同編譯器之前的差異。core_cm3.h和core_cm3.C中包括Cortex_M3核的全局變量聲明和定義,并定義一些靜態(tài)功能函數(shù)。system_device>.h和system_device>.c(即圖3中的system_stm32.h和system_stm32.c)是不同芯片廠商定義的系統(tǒng)初始化函數(shù)SystemInit(),以及一些指示時(shí)鐘的變量(如SystemFre-quency)。device>.h(即圖3中的stm32.h)是提供給應(yīng)用程序的頭文件,它包含core_cm3.h和system_device>.h,定義了與特定芯片廠商相關(guān)的寄存器以及各中斷異常號(hào),并可定制M3核中的特殊設(shè)備,如MCU、中斷優(yōu)先級(jí)位數(shù)以及SysTick時(shí)鐘配置。雖然CMSIS提供的文件很多,但在應(yīng)用程序中只需包含device.>h。本文引用地址:http://www.ex-cimer.com/article/163413.htm
(2)工具鏈
CMSIS支持目前嵌入式開(kāi)發(fā)的三大主流工具鏈,即ARM ReakView(armcc)、IAR EWARM(iccarm)以及GNU工具鏈(gcc)。通過(guò)在core_cm3.C中的如下定義,來(lái)屏蔽一些編譯器內(nèi)置關(guān)鍵字的差異。
這樣,CPAL中的功能函數(shù)就可以被定義成靜態(tài)內(nèi)聯(lián)類型(static_INLINE),實(shí)現(xiàn)編譯優(yōu)化。
(3)中斷異常
CMSIS對(duì)異常和中斷標(biāo)識(shí)符、中斷處理函數(shù)名以及中斷向量異常號(hào)都有嚴(yán)格的要求。異常和中斷標(biāo)識(shí)符需加后綴_IRQn,系統(tǒng)異常向量號(hào)必須為負(fù)值,而設(shè)備的中斷向量號(hào)是從0開(kāi)始遞增,具體的定義如下所示(以STM32為例):
CMSIS對(duì)系統(tǒng)異常處理函數(shù)以及普通的中斷處理函數(shù)名的定義也有所不同。系統(tǒng)異常處理函數(shù)名需加后綴_Handler,而普通中斷處理函數(shù)名則加后綴_IRQHandler。這些異常中斷處理函數(shù)被定義為weak屬性,以便在其他的文件中重新實(shí)現(xiàn)時(shí)不出現(xiàn)重復(fù)定義的錯(cuò)誤。這些處理函數(shù)的地址用來(lái)填充中斷異常向量表,并在啟動(dòng)代碼中給以聲明,例如:NMI_Handler、MemManage_Handler、SysTick_Handler、WWDG_IRQHandler等。
評(píng)論