CM3內核正常工作時是按照指令順序執行的,當發生異常或者中斷時,將打斷正在執行的動作,進而執行異常或中斷的服務程序。
異常系統具有保障CM3工作的安全性和健壯性的作用。
1 異常類型
異常分為復位(Reset),不可屏蔽中斷(NMI),硬件錯誤(HardFault),存儲管理錯誤(MemManageFault),總線錯誤((BusFault)),用法錯誤(UsageFault),系統調用(SVC),可懸掛系統調用(PendSV),系統節拍(SysTick)等。
2 優先級的定義
當異常存在多個時,就會出現競爭,進而出現優先級的概念。當不同的異常發生時,究竟該響應哪一個?這是由優先級來決定的。
在 CM3 中,優先級對于異常來說很關鍵的,它會影響一個異常是否能被響應,以及何時可以響應。優先級的數值越小,則優先級越高。 CM3 支持中斷嵌套,使得高優先級異常會搶占(preempt)低優先級異常。有 3 個系統異常:復位, NMI 以及硬 fault,它們有固定的優先級,并且它們的優先級號是負數,從而高于所有其它異常。所有其它異常的優先級則都
是可編程的(但不能編程為負數)。
原則上,CM3可支持256級的可編程優先級,但是芯片公司考慮到成本以及精簡設計,只會支持少于256的優先級,比如8,16,32等。
以下的3位(MSB高位對齊)表示,可以支持8級優先級:
但是,優先級的規定并不是只用“搶占優先級”來定義,為了使搶占機能更加可控,CM3還把256級優先級分成高低兩段,分別是搶占優先級和亞優先級。二者占的位數不同,也就是所謂的優先級分組。
搶占優先級最多有7位,所以最多128個搶占級。
在計算搶占優先級和亞優先級的有效位數時,必須先求出下列值:
1 芯片實際使用了多少位來表達優先級.
2 優先級組是如何劃分的。
舉個例子,如果只使用 3 個位來表達優先級([7:5]),并且優先級組的值是 5(從比特 5
處分組),則你得到 4 級搶占優先級,且在每個搶占優先級的內部有 2 個亞優先級。
通過這樣的優先級機制,可以對異常或者中斷進行優先級編程(手動指定優先級)。
3 向量表
當發生了異常并且要響應它時, CM3 需要定位其處理例程的入口地址(函數入口地址)。這些入口地址存儲在所謂的“(異常)向量表”中。CM3 認為該表位于零地址處,且各向量占用 4 字節,因此每個表項占用 4 字節。
4 Fault類異常
有若干個系統異常專用于 fault 處理。 CM3 中的 Faults 可分為以下幾類:
1 總線 faults (取指出錯,POP/PUSH錯誤)
2 存儲器管理 faults (訪問MPU范圍外的地址,往只讀區域寫數據,用戶級訪問特權級地址)
3 用法 faults (未定義指令,除數為0)
4 硬 faults (前三者錯誤的服務例程無法執行時,變為HardFault)
5 SVC和PendSV
操作系統中的任務調度,用戶/內核態的上下文切換,可以通過SVC和PendSV異常來實現。
SVC(系統服務調用,亦簡稱系統調用)和 PendSV(可懸起系統調用),它們多用于在操作系統之上的軟件開發中。 SVC 用于產生系統函數的調用請求。例如,操作系統不讓用戶程序直接訪問硬件,而是通過提供一些系統服務函數,用戶程序使用 SVC 發出對系統服務函數的呼叫請求,以這種方法調用它們來間接訪問硬件。因此,當用戶程序想要控制特定的硬件時,它就會產生一個 SVC 異常,然后操作系統提供的 SVC 異常服務例程得到執行,它再調用相關的操作系統函數,后者完成用戶程序請求的服務。
這種“提出要求——得到滿足”的方式,很好、很強大、很方便、很靈活、很能可持續發展。首先,它使用戶程序從控制硬件的繁文縟節中解脫出來,而是由 OS 負責控制具體的硬件。第二, OS 的代碼可以經過充分的測試,從而能使系統更加健壯和可靠。第三,它使用戶程序無需在特權級下執行,用戶程序無需承擔因誤操作而癱瘓整個系統的風險。第四,通過 SVC 的機制,還讓用戶程序變得與硬件無關,因此在開發應用程序時無需了解硬件的操作細節,從而簡化了開發的難度和繁瑣度,并且使應用程序跨硬件平臺移植成為可能。開發應用程序唯一需要知道的就是操作系統提供的應用編程接口(API),并且了解各個請求代號和參數表,然后就可以使用 SVC 來提出要求。
另一個相關的異常是 PendSV(可懸起的系統調用),它和 SVC 協同使用。一方面, SVC異常是必須立即得到響應的(若因優先級不比當前正處理的高, 或是其它原因使之無法立即響應, 將上訪成硬 fault——譯者注), 應用程序執行 SVC 時都是希望所需的請求立即得到響應。另一方面, PendSV 則不同,它是可以像普通的中斷一樣被懸起的(不像 SVC 那樣會上訪)。 OS 可以利用它“緩期執行” 一個異常——直到其它重要的任務完成后才執行動作。 懸起 PendSV 的方法是: 手工往 NVIC 的 PendSV 懸起寄存器中寫 1。 懸起后, 如果優先級不夠高,則將緩期等待執行。
PendSV 的典型使用場合是在上下文切換時(在不同任務之間切換)。 例如, 一個系統中有兩個就緒的任務,上下文切換被觸發的場合可以是:
1 執行一個系統調用
2 系統滴答定時器(SYSTICK)中斷,(輪轉調度中需要)
任務中正在響應中斷時(IRQ),是不能進行上下文切換的。如果 OS 檢測到某 IRQ 正在活動并且被 SysTick 搶占(進行任務間的上下文切換),它將懸起一個 PendSV 異常,以便緩期執行上下文切換。
上一篇:ARM基礎篇—ARM微處理器的應用領域及特點
下一篇:【ARM】Cortex-M3 存儲器系統
推薦閱讀
史海拾趣
面對不斷變化的市場環境和客戶需求,德爾創始終堅持可持續發展的理念。公司注重環境保護和資源節約,積極推行綠色生產和循環經濟。同時,德爾創還加強了內部管理和團隊建設,通過優化流程和提高效率來降低成本和提升效益。對于未來,德爾創已經制定了明確的發展規劃和目標,將繼續加大在技術研發、市場拓展和品牌建設等方面的投入力度,努力成為全球電子元器件行業的領軍企業之一。
EOZ Secme深知人才是企業發展的核心動力。因此,公司高度重視人才的培養和引進。通過設立研發中心、提供優厚的福利待遇等方式,EOZ Secme吸引了大量優秀人才加入。同時,公司還建立了完善的培訓體系,不斷提升員工的技能和素質。這些措施為EOZ Secme的持續發展提供了有力的人才保障。
在環保意識日益增強的今天,ACI公司積極響應國家號召,將綠色環保理念融入產品設計和生產過程中。公司采用環保材料和生產工藝,推出了一系列綠色電子產品。這些產品不僅具有優異的性能,而且符合環保標準,得到了消費者的廣泛認可。通過倡導綠色環保理念,ACI成功引領了行業潮流,樹立了良好的企業形象。
面對電子行業日益激烈的競爭環境,HANBIT Electronics深刻認識到供應鏈整合的重要性。2015年,公司啟動了全面的供應鏈優化項目,通過引入先進的ERP系統和自動化生產設備,實現了生產流程的數字化和智能化改造。同時,公司加強與上下游合作伙伴的溝通與協作,建立了穩定的供應鏈體系。這一舉措不僅提高了生產效率和產品質量,還有效降低了庫存成本和運營風險。
背景:隨著企業規模的擴大和業務的拓展,福斯特對資金的需求也越來越大。
發展:2014年,福斯特成功在上交所上市,通過資本市場融資,為公司的發展注入了強勁動力。上市后,公司繼續加大研發投入和市場開拓力度,加速企業發展步伐。
成果:上市以來,福斯特的營收和利潤均保持快速增長態勢,企業規模和實力不斷提升。同時,公司還通過并購重組等方式,進一步鞏固和擴大市場份額。
以上五個故事概述了福斯特在電子行業,特別是光伏材料領域的發展歷程和成就。這些故事不僅展現了福斯特的創業精神和創新能力,也反映了中國光伏產業從無到有、從小到大的發展歷程。
為了進一步提升競爭力,EasySync公司積極尋求與行業領先企業的戰略合作。通過與這些企業的合作,公司不僅獲得了更多的技術支持和市場資源,還共同研發出了一系列創新產品。這些產品不僅豐富了公司的產品線,還進一步鞏固了公司在同步技術領域的領先地位。
我現在搞畢業設計,要設計一個萬能手機充電器,利用手搖使發電機發電,通過整流,濾波,穩壓之后充到可充電電池,然后在充到待充電電池中.有哪位高手能提供電路圖和原理給我??`具體的穩壓電路,整流電路,濾波電路圖??元器件該如何選擇??``謝了``… 查看全部問答∨ |
作的一批板全部報廢. 單片機用的avr,外接貼片陶瓷震蕩器,16m的震蕩器居然是4.8m,只有偶爾個別的正常16m. 但是把陶瓷換到以前產品板上又正常。說明應該是電路板問題. 換成石英晶振也正常. 加電壓到6v也不行. 仔細看以前產品板,震蕩器布線也沒啥特別 ...… 查看全部問答∨ |
有誰做過煙霧探測器 用的是HIS-07離子室 和MC14468 配套使用的 不過照著硬件連接圖做出來后 為什么檢測的不準確呢???? 誰知道的幫個忙啊~~~~~~~ &n ...… 查看全部問答∨ |
|
一、安裝驅動 板子接上后,插入USB提示找到硬件,此時按照http://bbs.eeworld.com.cn/thread-360662-1-2.html的做法,將驅動安裝 二、打開QuartusII, 1、新建---> 2、選擇目錄及項目名稱 3、選擇所使用的器件: 4、設置EDA工具: ...… 查看全部問答∨ |
|
新人ccs5.1求助,No USB FET was found 用的板子是430g2553,帶仿真器,安裝的ccs5.1(安裝時安裝了仿真器驅動),debug時說"Error initializing emulator: No USB FET was found"。設備管理器沒有感嘆號:說明驅動應該正常;ccs設置也選的是對應的msp430g2553型號。另外我google這個 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 迅為IMX6開發板Android應用-AndroidStudio-calculator測試
- 玩轉 ESP32 + Arduino (二十) SIM800L上傳數據到OneNet(新版Mqtts)
- 玩轉 ESP32 + Arduino (二十一) SPIFFS文件系統 (已棄用)
- 玩轉 ESP32 + Arduino (二十二) SIM800L上傳數據到阿里IOT(溫濕度和LBS)(NTP對時)
- 玩轉 ESP32 + Arduino (二十三) 多文件系統及全局變量
- 玩轉 ESP32 + Arduino (二十四) SD卡讀寫
- 玩轉 ESP32 + Arduino (二十五) SSD1306庫驅動OLED
- 玩轉 ESP32 + Arduino(二十六) 按鍵控制庫 OneButton
- 玩轉 ESP32 + Arduino(二十七) ESP對象
- Panasonic模組整合Nordic的nRF54L15 SoC,為先進的物聯網應用實現高效能、高效率及低功耗優勢
- 學子專區論壇 - ADALM2000實驗:Hartley振蕩器
- Molex 莫仕將在2025慕尼黑上海電子展上展示領先的數據中心服務器和存儲、消費類和商用產品以及汽車和運輸解決方案
- 能游泳能攀爬,俄羅斯正研發百元級球形偵察機器人
- ModbusTCP轉Profinet:ABB機器人與PLC的高效連接
- ModbusTCP轉Profinet:工業通信的利器
- ModbusTCP轉Profinet:恒壓供水的神器
- Profinet轉ModbusTCP網關:工業升級利器
- Profinet轉ModbusTCP網關:數字化工廠的橋梁
- 三菱PLC故障排除常見問題