當您設計嵌入式系統(tǒng)時,您需要回答的問題之一是您的應用程序是否需要實時操作系統(tǒng) (RTOS)。許多嵌入式設計人員都回避使用 RTOS 內(nèi)核,因為他們擔心內(nèi)核在處理關(guān)鍵部分時會禁用中斷,這會妨礙時間敏感型應用程序無法滿足最后期限。
什么是實時操作系統(tǒng)? RTOS 是一種軟件,可以盡可能高效地管理中央處理單元 (CPU)、微處理單元 (MPU) 甚至數(shù)字信號處理器 (DSP) 的時間。大多數(shù) RTOS 內(nèi)核是用 C 語言編寫的,需要一小部分用匯編語言編寫的代碼來使內(nèi)核適應不同的 CPU 架構(gòu)。
內(nèi)核為程序員提供了許多有用的服務,包括多任務處理、中斷管理、任務間通信和信令、資源管理、時間管理和內(nèi)存分區(qū)管理。應用程序基本上分為多個任務,每個任務負責應用程序的一部分。任務是一個簡單的程序,它認為它自己擁有 CPU。每個任務都根據(jù)任務的重要性分配一個優(yōu)先級。
大多數(shù)用于嵌入式系統(tǒng)的內(nèi)核都是“搶占式”的,這意味著內(nèi)核總是執(zhí)行準備好運行的最重要的任務。搶占式內(nèi)核也是事件驅(qū)動的,這意味著任務被設計為等待事件發(fā)生才能執(zhí)行。當事件發(fā)生時,任務執(zhí)行并執(zhí)行其功能。如果任務等待的事件沒有發(fā)生,內(nèi)核將運行其他任務。等待任務消耗 CPU 時間為零;內(nèi)核允許您避免使用輪詢循環(huán),這是對 CPU 時間的不好利用。
許多嵌入式程序員回避使用 RTOS 內(nèi)核,因為他們擔心內(nèi)核會給他們的應用程序增加太多復雜性。事實證明,您只需要少數(shù)服務即可使用內(nèi)核啟動您的項目。至于開銷,RTOS 確實可能需要 2% 到 5% 的 CPU 資源來執(zhí)行其職責。
然而,更重要的是 RTOS 在進入臨界區(qū)時需要禁用中斷。根據(jù) CPU 本身、時鐘頻率以及內(nèi)存訪問是否需要等待狀態(tài),RTOS 可以禁用中斷數(shù)十微秒。對于大多數(shù)嵌入式應用程序而言,此限制通常不是問題,但在每微秒都很重要時可能會出現(xiàn)問題。
低功耗藍牙 (BLE) IoT 設備越來越多地配備 BLE 鏈路,因為當與智能手機或類似手持設備結(jié)合使用時,BLE 使這些 IoT 設備的調(diào)試和配置變得簡單方便。BLE 可以有多種操作模式、多種連接、多個廣告商等等,其中一些甚至可以重疊。
掃描模式: 設備掃描其他設備發(fā)送的廣告包。掃描由掃描之間的間隔和設備正在偵聽的時間窗口組成。掃描儀在每個間隔改變頻道頻率。需要在收到請求后 150 μs 內(nèi)做出響應。這稱為幀間空間 (IFS)。
廣告模式: BLE 設備也可以自行執(zhí)行廣告,廣告時間可能在 20 毫秒到 3 小時之間。
連接模式: Master 在每個連接間隔發(fā)送一個數(shù)據(jù)包,BLE Slave 設備在 150 μs 后回復 Master,即 IFS。如果 Master 有其他東西要發(fā)送給 Slave,它會在 150 μs 后向 Slave 發(fā)送一個數(shù)據(jù)包。設備相互發(fā)送數(shù)據(jù)包,直到兩端都沒有數(shù)據(jù)要發(fā)送。
對于 32 位 CPU 來說,150 微秒可能看起來很長,但在處理傳入請求時還有很多工作要做。數(shù)據(jù)包具有流控信息,指示從另一端請求什么序列號;可能有地址白名單過濾需要處理。
實際上,執(zhí)行這些操作會消耗 120 μs 到 130 μs 的 CPU 時間。如果無法在 150 μs 內(nèi)處理數(shù)據(jù)包,通常不會發(fā)生任何不良情況;數(shù)據(jù)吞吐量可能會略有下降或打開連接可能會延遲。從客戶的角度來看,這種行為與無線電干擾相同。但是,連續(xù)錯過這個截止日期不是一種選擇,因為它會使最終產(chǎn)品無法使用。
BLE 應用程序中 的 RTOS 如果 RTOS 可能會在數(shù)十微秒內(nèi)禁用中斷,那么您為什么要考慮在基于 BLE 的應用程序中使用它呢?嗯,答案是這些時間緊迫的事件可以在 RTOS 之外輕松處理。具體來說,可以在 RTOS 范圍之外分配特定的時間敏感中斷服務例程 (ISR)。這些稱為非內(nèi)核感知 (nKA) ISR,顧名思義,它們只是繞過 RTOS 內(nèi)核。nKA ISR 的優(yōu)先級高于內(nèi)核感知 (KA) ISR。
圖 1:Cortex-M3 CPU 上的 ISR 和任務優(yōu)先級。
圖 1 顯示了典型 Cortex-M3 CPU 的 ISR 和任務的優(yōu)先級。如果 RTOS 需要保護臨界區(qū),它會將 Cortex-M3 CPU 的 BASEPRI 寄存器設置為 0x40,從而禁用優(yōu)先級為 0x40 及以下的 KA ISR。因為 0x00 和 0x20 是更高的優(yōu)先級,它們將被允許中斷 CPU,即使 RTOS 處于臨界區(qū)的中間。
因此,時間敏感的 BLE ISR 可以簡單地分配優(yōu)先級 0x00 或 0x20,當它們發(fā)生時,將立即處理它們,而與低優(yōu)先級 ISR 或任務的狀態(tài)無關(guān)。
一項任務可能會為 nKA ISR 提供設置信息——操作模式、配置等。nKA ISR 可能還需要在任務級別執(zhí)行進一步的非時間關(guān)鍵處理。因此,如果不允許 nKA ISR 進行任何 RTOS API 調(diào)用,nKA ISR 如何與任務通信?設置共享內(nèi)存相當容易,如圖2 所示。
圖 2:nKA ISR 和任務之間的通信。
nKA ISR 將信息存儲到與其共享任務的內(nèi)存中。
由于 nKA ISR 無法進行任何 RTOS API 調(diào)用,因此它需要觸發(fā) KA 中斷,進而允許進行內(nèi)核調(diào)用。ARM Cortex-M CPU 的嵌套向量中斷控制器 (NVIC) 允許系統(tǒng)設計人員做到這一點,但設計人員需要識別應用程序未使用的 I/O 設備并竊取其中斷向量以用于此目的。
因此,KA ISR 可以向任務發(fā)出信號,讓其知道共享 RAM 中的數(shù)據(jù)可用。
當所有 ISR 都已完成,并且 RTOS 已決定發(fā)出信號的任務現(xiàn)在是最高優(yōu)先級時,該任務可以讀取 nKA ISR 發(fā)送給它的數(shù)據(jù)。
該任務可以根據(jù)需要將 nKA ISR 的信息存儲在一個共享區(qū)域中,該共享區(qū)域只能由 nKA ISR 讀取。數(shù)據(jù)寫入共享 RAM,但只有在設置“數(shù)據(jù)可用”標志時才能讀取。ARM Cortex-M3 CPU 和上面的處理器具有特殊指令,可確保設置或清除“數(shù)據(jù)可用”標志可以自動完成,以防止競爭條件,而無需禁用全局中斷。
nKA ISR 將輪詢?nèi)蝿仗峁┑臄?shù)據(jù)。這通常不是問題,因為無論如何都會在 nKA ISR 發(fā)生時發(fā)生這種情況。
總結(jié) RTOS 和時間敏感的應用程序(如 BLE)可以通過制作非內(nèi)核感知的時間敏感 ISR 輕松共存。使用與此類似的方案可確保時間關(guān)鍵代碼不受 RTOS 存在的影響。同時,RTOS 可以最有效地利用 CPU 來處理時間不敏感的代碼。
-
cpu
+關(guān)注
關(guān)注
68文章
11076瀏覽量
217008 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7143瀏覽量
125560 -
應用程序
+關(guān)注
關(guān)注
38文章
3334瀏覽量
59018 -
低功耗藍牙
+關(guān)注
關(guān)注
1文章
245瀏覽量
21946
發(fā)布評論請先 登錄

超小藍牙模組,遠距離,低功耗#藍牙芯片 #低功耗藍牙 #物聯(lián)網(wǎng) #硬聲創(chuàng)作季
藍牙低功耗技術(shù)
RTOS低功耗設計原理及實現(xiàn)_TicklessMode(FreeRTOS的實現(xiàn))
低功耗藍牙怎么低功耗?如何界定
藍牙低功耗在工業(yè)應用
藍牙低功耗的問題
低功耗藍牙(BLE)的特點介紹(1)
RTOS低功耗設計原理的講解和實現(xiàn)概述

我們該如何選擇低功耗藍牙芯片的軟件支持
如何在RTOS中處理微控制器的低功耗特性
低功耗藍牙在低功耗設計中的應用

低功耗藍牙技術(shù)的特點 低功耗藍牙如何實現(xiàn)低功耗?
國產(chǎn)藍牙模組 | 低功耗藍牙應用

評論