基于CMSIS標準的 Cortex-M3應用軟件開(kāi)發(fā)
(4)數據類(lèi)型
CMSIS對數據類(lèi)型的定義是在stdint.h中完成的,對核寄存器結構體的定義是在core_cm3.h中完成的,寄存器的訪(fǎng)問(wèn)權限是通過(guò)相應的標識來(lái)指示的。CMSIS定義以下3種標識符來(lái)指定訪(fǎng)問(wèn)權限:_I(volatile const)、_O(volatile)和_IO(volatile)。其中_I用來(lái)指定只讀權限,_O指定只寫(xiě)權限,_IO指定讀寫(xiě)權限。
(5)調 試
嵌入式軟件開(kāi)發(fā)中的一個(gè)基本需求就是能通過(guò)終端來(lái)輸出調試信息,一般可通過(guò)2種方式實(shí)現:一種是使用串口線(xiàn)連接板上的UART和PC上的COM口,通過(guò)PC上的超級終端來(lái)查看調試信息;另一種則是采用半主機機制,但有可能不被所用的工具鏈支持。基于Cortex-M3核的軟件調試突破了這樣的限制,Cortex-M3內核提供了一個(gè)ITM(Instrumentation Trace Macrocell)接口,通過(guò)SWV(Serial Wire Viewer)可調試由SWO引腳接收到的ITM數據。ITM實(shí)現了32個(gè)通用的數據通道,基于這樣的實(shí)現,CMSIS規定用通道0作為終端來(lái)輸出調試信息,通道31用于操作系統的輸出調試(特權模式訪(fǎng)問(wèn))。在core_cm3.h中定義了ITM_SendChar()函數,因此可通過(guò)調用該函數來(lái)重寫(xiě)fputc,以在應用程序中通過(guò)printf打印調試信息,并可通過(guò)ITM Viewer查看這些調試信息。有了這樣的實(shí)現,嵌入式軟件開(kāi)發(fā)者就可以在不配置串口和使用終端調試軟件的情況下輸出調試信息,在一定程度上減少了工作量。
(6)安全機制
在嵌入式軟件開(kāi)發(fā)過(guò)程中,代碼的安全性和健壯性一直是開(kāi)發(fā)人員所關(guān)注的,因此CMSIS在這方面也作出了努力,所有的CMSIS代碼都基于MISRA-C2004(Motor Industry Software Reliability Association forthe C programming language)標準。MIRSA-C 2004制定了一系列安全機制用來(lái)保證驅動(dòng)層軟件的安全性,是嵌入式行業(yè)都應遵循的標準。對于不符合MISRA標準的,編譯器會(huì )提示錯誤或警告,這主要取決于開(kāi)發(fā)者所使用的工具鏈。本文引用地址:http://dyxdggzs.com/article/163413.htm
3 基于CMSIS標準的代碼實(shí)現
CMSIS降低了代碼開(kāi)發(fā)的難度,為了更好地詮釋這一點(diǎn),下面以一個(gè)基于STM32微處理器的簡(jiǎn)單例子來(lái)說(shuō)明。代碼實(shí)現如下:
可以看到用戶(hù)程序中僅需短短的幾行代碼就實(shí)現了定時(shí)器的功能,每隔1 S報數1次,并可通過(guò)ITM窗口查看輸出的調試信息。其中SystemInit()用來(lái)初始化時(shí)鐘,SysTick_Config()用來(lái)配置系統定時(shí)器,而SysTick_Han-dler()用來(lái)處理系統時(shí)鐘異常,該異常每1 ms發(fā)生1次。由于重寫(xiě)了fputc(),所以可通過(guò)printf()函數將調試信息打印到ITM窗口上,輸出結果如圖4所示。
結 語(yǔ)
本文闡述了基于CMSIS標準的軟件架構、規范,并通過(guò)一個(gè)實(shí)例更加清晰地解讀了CMSIS作為一個(gè)新的基于Cortex-M核處理器系列的軟件開(kāi)發(fā)標準所具有的巨大潛力。它不僅降低了軟件開(kāi)發(fā)的難度,更減少了軟件開(kāi)發(fā)的成本。因此,工程師盡早掌握CMSIS標準,對進(jìn)行基于Cortex-M3處理器的軟件開(kāi)發(fā)會(huì )大有幫助。
評論