實時操作系統(tǒng)的滴答Tick設置多少才合適?
最近有讀者問了這么一個問題:為啥RTOS的系統(tǒng)滴答(Tick)默認配置都是1000,我配置為100、10000,或者2000可以不?
相信很多初學者都有這個疑問,包括我初學RTOS也曾困惑滴答配置不同值到底有啥不同和影響。
今天就來簡單說下關于RTOS系統(tǒng)滴答的內容!
什么是系統(tǒng)滴答?系統(tǒng)滴答(SysTick),有些地方也叫時鐘節(jié)拍、系統(tǒng)心跳等。
操作系統(tǒng)可以多任務間進行切換,就是靠一個系統(tǒng)定時器以**頻率中斷,為操作系統(tǒng)提供調度(上下文切換)才能實現任務切換。
而這個定時器,就是我們本文說的系統(tǒng)滴答。
早些年的51、430單片機,跑RTOS,都是單獨利用一個Timer定時器提供系統(tǒng)滴答。
為了考慮跑RTOS這個問題,Cortex-M內核自帶系統(tǒng)滴答這個定時器。
你會發(fā)現市面上很多單片機基本都自帶有SysTick這個定時器,像Cortex-M0、 M3、 M4這些內核的單片機都有的,而且只要簡單調用官方寫好的API函數即可使用。
系統(tǒng)配置文件通常,系統(tǒng)滴答(OS_TICKS)位于系統(tǒng)配置文件中,對系統(tǒng)配置文件進行配置也是重要的一步。(一些系統(tǒng)通過圖形化界面進行配置,其實也是對系統(tǒng)配置文件進行配置)
比如FreeRTOSConfig.h
再比如ucos系統(tǒng)的os_cfg.h
OS_TICKS一般是配置為1000,從宏定義和注釋很容易理解,就是每秒系統(tǒng)滴答的次數。
這里的配置選項很多,初學者可能不理解一些選項的含義,可以使用官方默認配置即可,等熟悉到一定程度,這些配置選項自然就理解了。
系統(tǒng)滴答配置多少才合適?系統(tǒng)滴答配置1000,代表系統(tǒng)1ms要進行一次輪轉調度,檢查是否有更高優(yōu)先級任務要執(zhí)行(并切換任務)。
1ms是什么概念??
可能你認為1ms時間好短,但對于操作系統(tǒng)而言,1ms的時間卻是很長。
100M主頻的單片機,執(zhí)行一次調度(幾十條語句),時間在us級別,你說1ms對于系統(tǒng)而言有多長?
為啥配置為1000?肯定很多人有這個疑問,配置為1000,為啥不是100、10000,或者2000?
1000是一個比較適合的中等值,其他100、10000,或者2000也可以,只是不利于系統(tǒng)以及編程。
a.如果滴答太大,10K,甚至100K,對系統(tǒng)的負擔比較大。因為自身調度會占用CPU時間。
b.1ms滴答一次,方便編程時統(tǒng)延時。2k、10k這種值,在用到系統(tǒng)延時時,不方便計算。
vTaskDelay(1000);
如果滴答值為1000,則代表延時1秒;如果滴答值為2000,則代表延時0.5秒,很明顯這種不利于編程;
配置為其他數值有啥影響?除1000之外,方便計算延時的就是1,或者1M。(很明顯1,或者1M都不現實)
配置為1,系統(tǒng)1秒才響應一次,這還叫實時操作系統(tǒng)?
配置為1M,1us調度一次,CPU基本都在做調度的工作,不用干其他事了。
除此之外,100、10000,或者2000,就是延時計算不方便之外,按理說也是可以的。
小結1.實時操作系統(tǒng)的SysTick,在沒有特殊情況下,最好默認配置1000;
2.在系統(tǒng)允許的情況下,SysTick數值越大,系統(tǒng)實時性越高;反之實時性越差;
3.主頻相對偏低(比如低于10M)的處理器,SysTick值可以適當配置第一點;
······------------?END?------------
后臺回復『RTOS』『嵌入式軟件設計與開發(fā)』閱讀更多相關文章。
歡迎關注我的公眾號,回復“加群”按規(guī)則加入技術交流群,回復“1024”查看更多內容。
歡迎關注我的視頻號:ic.com/weixin/tr/2021-07/14/271tjfgi056.jpg">
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。