RTOS的系統(tǒng)節(jié)拍
傳統(tǒng)的RTOS都是利用一個(gè)硬件定時(shí)器產(chǎn)生周期性的節(jié)拍中斷,作為系統(tǒng)的時(shí)基。在多數(shù)的應(yīng)用中,系統(tǒng)節(jié)拍的周期都是毫秒級(jí)的,RTOS的超時(shí)、延遲、定時(shí)的分辨率都是以節(jié)拍為單位。即使一個(gè)任務(wù)在幾個(gè)連續(xù)的節(jié)拍內(nèi)執(zhí)行,系統(tǒng)節(jié)拍中斷還是會(huì)周期性的發(fā)生,浪費(fèi)了CPU的執(zhí)行時(shí)間。下圖是一個(gè)示例,雖然某段時(shí)間內(nèi)只有IDLE任務(wù)在執(zhí)行,系統(tǒng)節(jié)拍中斷還是會(huì)如期發(fā)生。
此外,任務(wù)延遲或超時(shí)等時(shí)間相關(guān)的功能都基于系統(tǒng)滴答中斷計(jì)時(shí),計(jì)時(shí)時(shí)間到后,通過系統(tǒng)節(jié)拍周期中斷觸發(fā)調(diào)度器。因此,如果任務(wù)的延遲時(shí)間小于一個(gè)系統(tǒng)節(jié)拍周期,則只能主動(dòng)等待,直到所需的時(shí)間結(jié)束。
?周期級(jí)分辨率的RTOS
SEGGER之前推出的embOS Ultra,改變了過去RTOS采用周期節(jié)拍中斷作為系統(tǒng)時(shí)基的工作方式,采用硬件定時(shí)器加計(jì)數(shù)器的方式,只在必要時(shí)產(chǎn)生中斷。這就消除了傳統(tǒng)的周期性節(jié)拍中斷,減少了不必要的CPU活動(dòng),同時(shí)能降低系統(tǒng)的功耗。embOS Ultra基于時(shí)間事件的調(diào)度都能以微秒指定。
?體驗(yàn)embOS Ultra微秒級(jí)調(diào)度
目前embOS Ultra支持CortexM/R/A,以及RISC-V架構(gòu)的處理器。從官網(wǎng)可以下載到基于SEGGER Embedded Studio的示例Demo,用于測(cè)試,內(nèi)核以二進(jìn)制庫(kù)提供。embOS Ultra的API完全兼容embOS,只是多了幾個(gè)任務(wù)管理的API,任務(wù)可以按照ms或us延遲。
先將Demo例程的任務(wù)做了修改,HPTask分別以1000us、2000us不等延遲,LPTask以80ms延遲。
static void HPTask(void) {
while (1) {
BSP_SetLED(0);
OS_TASK_Delay_us(1000);
BSP_ClrLED(0);
OS_TASK_Delay_us(2000);
BSP_SetLED(0);
OS_TASK_Delay_us(3000);
BSP_ClrLED(0);
OS_TASK_Delay_us(4000);
}
}
static void LPTask(void) {
while (1) {
BSP_ToggleLED(1);
OS_TASK_Delay_ms(80u);
}
}
下載代碼至目標(biāo)板上運(yùn)行,通過SystemView來觀測(cè)系統(tǒng)的執(zhí)行:
從OS事件視圖可以看到,系統(tǒng)不存在周期性的節(jié)拍中斷,只是在需要進(jìn)行任務(wù)調(diào)度時(shí)觸發(fā)一次中斷。從下面的Timeline視圖可以更直觀的看出,紅色涂抹的位置是系統(tǒng)中斷。
注意上圖中的時(shí)間(996.8us、1.9ms,2.9ms……)并不是任務(wù)的間隔時(shí)間,而是調(diào)度器執(zhí)行的間隔時(shí)間。
再將任務(wù)代碼改成:
static void HPTask(void) {
while (1) {
BSP_SetLED(0);
OS_TASK_Delay_us(50);
BSP_ClrLED(0);
OS_TASK_Delay_us(100);
}
}
static void LPTask(void) {
while (1) {
BSP_ToggleLED(1);
OS_TASK_Delay_us(200u);
}
}
HPTask任務(wù)分別延遲50us和100us,LPTask延遲200us,運(yùn)行后觀測(cè)Timeline:
HPTask首次執(zhí)行延遲了50us之后,系統(tǒng)定時(shí)器中斷觸發(fā),調(diào)度器開始執(zhí)行,從IDEL任務(wù)切換到HPTask任務(wù)。同時(shí)可以發(fā)現(xiàn),從中斷觸發(fā)到HPTask任務(wù)體開始執(zhí)行實(shí)際上已經(jīng)過去了10us,這是因?yàn)橹袛嗵幚砗腿蝿?wù)調(diào)度的執(zhí)行需要消耗一定CPU時(shí)間,這個(gè)與處理器架構(gòu)和CPU運(yùn)行頻率有關(guān),在Cortex-M上大概在10us左右。也就是說在當(dāng)前的處理器上,延遲時(shí)間小于10us是沒有意義的,但是在主頻很高的MPU(應(yīng)用處理器)上這個(gè)時(shí)間可能要短很多。
總之,現(xiàn)在很多的MCU的性能都已經(jīng)很高了。同時(shí),一些應(yīng)用要求處理器有比較高的計(jì)算能力,還要求系統(tǒng)能有很好的實(shí)時(shí)性,甚至在MPU上使用RTOS。此種應(yīng)用場(chǎng)景下,如果RTOS支持CPU周期級(jí)別的分辨率,這實(shí)際上可以進(jìn)一步提升系統(tǒng)的實(shí)時(shí)性。而且,在針對(duì)一些外設(shè)的處理上,使用微秒級(jí)的延遲,還能提高CPU的使用效率,擴(kuò)展了RTOS的潛在應(yīng)用范圍。
審核編輯 :李倩
-
mcu
+關(guān)注
關(guān)注
146文章
17002瀏覽量
350326 -
高分辨率
+關(guān)注
關(guān)注
0文章
45瀏覽量
15307 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3241瀏覽量
114482
原文標(biāo)題:embOS-Ultra:高分辨率系統(tǒng)時(shí)間
文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論