摘要:今天痞子衡給大家分享的是系統中斷延遲及其測量方法。至此,系統中斷延遲及其測量方法痞子衡便介紹完畢了,掌聲在哪里歡迎訂閱歡迎訂閱文章會同時發布到我的博客園主頁主頁知乎主頁微信公眾號平臺上。
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是Cortex-M系統中斷延遲及其測量方法。
在嵌入式領域里,實時性是個經常被我們掛在嘴邊的概念,這里的實時性主要強調得是當外界事件發生時,系統是否能在規定的時間范圍內予以響應處理,這個時間閾值越小,系統的實時性就越高。當然關于這個實時性,也有軟硬之分,硬實時要求的是設定的時間閾值內必須完成響應,而軟實時則僅需根據任務的優先級盡可能快地完成響應即可。
無論是 RTOS 環境還是裸機環境下,系統最原始的實時性保障其實來自于 MCU 內核的中斷響應能力,關于中斷響應能力有一個重要指標叫中斷延遲時間,今天我們就來聊一聊 Cortex-M 內核的中斷延遲及其測量方法:
所謂中斷延遲,即從中斷請求 IRQ 信號置起開始到內核進入執行該中斷 ISR 第一條指令時的間隔,如下圖所示, 箭頭范圍內的 11 個周期就是中斷延遲時間。關于這個概念,ARM 公司專家 Joseph Yiu 的一篇博客 《Cortex-M內核系統中斷延遲入門指南》 介紹得很詳細。
為什么會有中斷延遲?其實這是無法避免的,當內核在執行 main thread 代碼時,來了中斷事件,NVIC 里對應 IRQ 信號被置起,內核接到 NVIC 通知后壓棧保存現場(以便中斷 ISR 處理完成時回到被打斷的 main thread 地方),然后再從中斷向量表里取出對應中斷 ISR 來執行,這一系列動作是需要時間的。
Cortex-M 家族發展至今,已有 M0/M0+/M1/M3/M4/M7/M23/M33/M35P/M55 等多款內核,這些內核的中斷延遲時間不一,如下表所示。注意表中的數值單位是內核的時鐘周期,并且是在零等待內存系統條件下結果(即代碼鏈接在零等待內存里)。
- Note1: 一般來說 MCU 內部與內核同頻的 SRAM 是標準的零等待內存。
- Note2: 許多運行頻率超過 100MHz 的微控制器會搭配非常慢的 Flash 存儲器(例如 30 - 50MHz),雖然可以使用 Flash 訪問加速硬件來提高性能,但中斷延遲仍然受到 Flash 存儲系統等待狀態的影響。
測量 Cortex-M 的中斷延遲方法有很多,任何一個帶中斷的 MCU 外設模塊都可以用來測中斷延遲,Cortex-M 中斷延遲時間跟觸發中斷的具體外設模塊類型基本上是無關的(最多受一點該外設中斷信號同步周期的影響)。
利用 GPIO 模塊來測量 Cortex-M 的中斷延遲是最簡單的方法,選擇兩個 GPIO,一個配置為輸入(GPIO_IN),另一個配置為上拉輸出(GPIO_OUT,初態設為高),開啟 GPIO_IN 的邊沿中斷(比如下降沿),在 GPIO_IN 邊沿中斷 ISR 里翻轉兩次 GPIO_OUT,然后用示波器測量兩個 GPIO 信號邊沿間隔得出中斷延遲時間。
uint32_t s_pin_low = 0x0;uint32_t s_pin_high = 0x1;void GPIO_IN_IRQHandler(void){ GPIO_OUT->DR = s_pin_low; GPIO_OUT->DR = s_pin_high; ClearInterruptFlag(GPIO_IN); __DSB();}
需要注意的是在如上 GPIO_IN_IRQHandler 函數偽代碼里,我們對 GPIO_OUT 做了兩次翻轉,這是有必要的。我們隨便選擇一個 CM7 芯片去實際編譯(IAR環境下,無優化)可以看到如下匯編代碼,每一次翻轉實際上由四條指令組成,我們作為計時基準的 GPIO_OUT 第一個邊沿其實是 ISR 里執行了第一句翻轉代碼后的時刻,而中斷延遲是不包含第一句翻轉代碼執行時間的。因為指令流水線優化等復雜情況,我們就不從理論上計算四條指令實際消耗時鐘周期數,直接再翻轉一次 GPIO_OUT,測量 GPIO_OUT 低電平時間即認為是這四條指令執行時間。
因此最終中斷延遲時間 td = t1 - t2,其中 t1、t2 是我們可以測量出來的時間。此外,td 時間內包含了 tx,這個 tx 是 I/O 跳變信號到芯片內部 IRQ 置起的時間,這個時間是芯片系統所需的同步時間,因芯片設計而異,本應不被計算在系統中斷延遲內,但因為這個時間無法測量,故而就放在中斷延遲里了,也算是一點小小誤差吧。
下一篇我們將在實際 Cortex-M 芯片上用這種方法去實測中斷延遲,敬請期待。
至此,Cortex-M系統中斷延遲及其測量方法痞子衡便介紹完畢了,掌聲在哪里~~~
文章會同時發布到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
??最后歡迎關注痞子衡個人微信公眾號【痞子衡嵌入式】,一個專注嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
??衡杰(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
??專欄內所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
??與痞子衡進一步交流或咨詢業務合作請發郵件至 hengjie1989@foxmail.com
??可以關注痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
??關于專欄文章有任何疑問請直接在博客下面留言,痞子衡會及時回復免費(劃重點)答疑。
??痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125365.html
摘要:處理器擁有的寄存器組。主堆棧指針復位后缺省使用的堆棧指針,用于操作系統內核以及異常處理例程包括中斷服務例程。進程堆棧指針由用戶的應用程序代碼使用。堆棧指針的最低兩位永遠是,這意味著堆棧總是字節對齊的。 ...
摘要:基于開發的軟件包導師汪禮超學員崔林威摘要騰訊物聯網操作系統是騰訊面向物聯網領域開發的實時操作系統,具有低功耗,低資源占用,模塊化,可裁剪等特性。圖中斷函數處理進行生成工程配置,按如下界面進行配置,最后點擊,并點擊。 ...
摘要:兼容的電池設備需要智能電池子系統接口由操作系統直接通過嵌入式控制器接口控制或接口。這允許任何操作系統提供一個標準的總線枚舉器,它可以直接與系統中的嵌入式控制器通信,從而允許系統中的其他驅動程序與系統中的嵌入式控制器通信并使用它們的資源。 目錄 第三章 ACPI 概念... 2 3.1系統電源...
摘要:嵌入式實時操作系統是一個特殊的程序通常稱為內核,它可以創建,銷毀,控制所有任務。顯示處理函數運行過程中,定時器產生中斷,系統進入定時器中斷程序將傳感器標志位置。實時操作系的子系統將再后續持續更新。 ...
摘要:假如我們底層的連接得到重用,這時候的情況會是這樣子很明顯,在獲取的請求中,減少了一次握手往返。在使用持久連接后,避免了一次握手往返總延遲減少為。其代價往往是不能充分利用網絡連接,造成服務器緩沖開銷,有可能導致客戶端更大的延遲。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊IVWEB團隊 發表于云+社區專欄作者:yangchunwen HTTP協議是前端性能乃...
閱讀 3735·2023-01-11 11:02
閱讀 4244·2023-01-11 11:02
閱讀 3050·2023-01-11 11:02
閱讀 5180·2023-01-11 11:02
閱讀 4737·2023-01-11 11:02
閱讀 5534·2023-01-11 11:02
閱讀 5313·2023-01-11 11:02
閱讀 3986·2023-01-11 11:02