新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 發揮ARM Cortex-M3和M4微控制器最大作用的要訣

        發揮ARM Cortex-M3和M4微控制器最大作用的要訣

        作者: 時間:2014-01-21 來源:網絡 收藏

        多項秘訣造就巧妙解決方案

        本文引用地址:http://www.104case.com/article/256977.htm


        嵌入式設計的成敗經常取決于如何在系統性能、能耗和解決方案成本之間找到適當的平衡。許多情況下,開發人員可以采用Cortex-M處理器上的獨特特性來優化產品成本或能源需求,同時維持、甚至提升它的性能。例如,Cortex-M內核天生的串行I/O能力能夠用于節省能源、簡化開發、釋放外設以用于其它應用任務。


        除了傳統的串行調試(Serial Wire Debug)功能之外,基于 Cortex-M的MCU還可以通過它的單引腳串行監視器輸出(Serial Wire Viewer Output,)3提供指令跟蹤接口,如圖2所示。這個接口可以直接把“printf格式的”調試信息傳遞給應用代碼。允許調試信息直接在任何標準的IDE中瀏覽。此外,這些信息也可以用獨立的監視器(例如,Segger的J-Link SWO Viewer軟件4,或是Silicon Labs的energyAware Commander 4)進行瀏覽。由于SWO輸出內建于內核硬件本身,因此它是Cortex-M內核與生俱來的優點。SWO不占用MCU的任何UART接口,這些接口它們可能早已被分配給了應用。


        圖2:專用 Cortex SWO接口節省I/O引腳并加速調試。

        基于SWO的調試還有一個重要的優勢在于,它讓在進入最低的休眠模式時,保持調試連接有效,而在大多數情況下,傳統的調試連接這時是不能正常工作的。SWO的指令追蹤還可以用于跟蹤程序計數器,以幫忙IDE統計出程序各項功能所占用的時間。這些統計數字能夠與電流測量結合起來,幫助開發人員對設計功耗進行微調。


        基于Cortex-M的供應商正在開始重新認識這項優點,而且有些廠商已經為了這個目的而把功耗模式和電流測量硬件納入到本身的開發平臺。例如,Silicon Labs的EFM32 Gecko MCU入門級和開發級工具包都包含功耗測量輸出,并可搭配energyAware Profiler工具6中的程序代碼追蹤功能。圖3顯示了如何讓設計人員精確定位到哪個程序功能塊最耗費能源,并且能夠快速調試其它與能源有關的問題。



        圖3:軟硬件工具精確定位耗能最大的功能,無需示波器和萬用表,快速排除問題。


        智能休眠節省每一微瓦


        Cortex-M處理器的Sleep-on-Exit(中斷完成時直接進入休眠)是另一項“一箭雙雕”的功能,可同時節省CPU周期和能耗。這點在由中斷所驅動的應用中格外有用,因為處理器的大部分時間不是在執行中斷處理,就是在中斷事件之間休眠。在進入中斷服務例程(ISR)時,MCU必須花費好幾個指令周期把當前線程狀態入棧,然后在退出中斷處理返回時恢復原有線程狀態,即“出棧”。當應用需要處理器在退出ISR后直接進入休眠狀態時,傳統MCU仍然必須恢復原先存儲的狀態信息,然后線程代碼才能讓MCU進入休眠狀態。同樣地,當下次的中斷喚醒MCU時,它的狀態必須再次入棧。


        而當使能ARM Cortex-M上的Sleep-on-Exit功能后,MCU就會在中斷處理完成后直接進入休眠狀態,而不用先返回到原有線程上(見圖4)。這會使處理器仍然保持在中斷狀態,因為消除了喚醒再入棧過程,因而節省下許多寶貴的機器周期。消除入棧出棧過程既節省了時間也節省了能耗,否則電能就會被不必要的指令周期白白消耗,也包括哪些傳統MCU在休眠和喚醒之間管理堆棧的代碼。而且,當處理器被中止調試請求(Halt Debug Request)喚醒時,出棧過程將會自動進行。

        圖4:ARM Cortex-M的Sleep-on-Exit功能通過避免不必要的代碼執行和減少出棧入棧操作降低功耗。(引自:《The Definitive Guide to the ARM 1》)



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武平县| 益阳市| 视频| 蒲城县| 万源市| 泽库县| 巴东县| 涿鹿县| 西华县| 蒲城县| 安西县| 阳城县| 崇义县| 璧山县| 冕宁县| 万州区| 韩城市| 荥经县| 长沙县| 星子县| 东乡县| 肇庆市| 靖宇县| 同江市| 康保县| 临夏县| 平罗县| 万州区| 西乌珠穆沁旗| 海南省| 许昌县| 博野县| 康定县| 黎城县| 彭阳县| 宜兴市| 惠州市| 射洪县| 阜新| 姜堰市| 汝城县|