時鐘又稱為定時器,負責維護時間,防止程序壟斷cpu。作業系統需要通過時間來規範其任務的執行,其最小的時間單位是時鐘節拍(os tick)。
在rt-thread中,時鐘節拍的長度可以根據rt_tick_per_second的定義來調整,即通過改變時鐘頻率來調整時鐘節拍。
實現方式
時鐘節拍由配置為中斷觸發模式的硬體定時器產生,當中斷到來時,將呼叫一次:void rt_tick_increase(void),通知作業系統已經過去乙個系統時鐘;不同硬體定時器中斷實現都不同,以stm32定時器作為示例如下:
void systick_handler(void)
在中斷函式中呼叫rt_tick_increase()對全域性變數rt_tick進行自加,**請參考rt-thread官網
獲取時鐘節拍
rt_tick_t rt_tick_get(void);
rt-thread定時器定時器控制塊
在 rt-thread 作業系統中,定時器控制塊由結構體 struct rt_timer 定義並形成定時器核心物件,再鏈結到核心物件容器中進行管理。
struct rt_timer
;typedef struct rt_timer *rt_timer_t;
定時器跳表(skip list)演算法
系統新建立並啟用的定時器都會按照以超時時間排序的方式插入到 rt_timer_list 鍊錶中,也就是說 t_timer_list 鍊錶是乙個有序鍊錶,rt-thread 中使用了跳表演算法來加快搜尋鍊錶元素的速度,查詢的時間複雜度均為o(log n)。
對於定時器跳表演算法,在後續的部落格中,會做詳細的介紹,敬請期待。
定時器的管理方式
在系統啟動時需要初始化定時器管理系統。可以通過下面的函式介面完成:
void rt_system_timer(void);
如果需要使用soft_timer,則系統初始化時,應該呼叫下面這個函式介面:
void rt_system_timer_thread_init(void);
定時器控制塊中包含定時器相關的重要引數,在定時器各種狀態間起到紐帶的作用,如下圖所示:
如上圖所示,定時器控制塊主要包括:
時鐘管理-rt-thread文件中心
RT Thread核心學習
一 概述 二 執行緒的組成 2.1 執行緒 入口函式 2.2 執行緒控制塊 2.3 執行緒棧 三 執行緒相關的api 3.1 執行緒的建立 3.2 狀態的切換 四 注意事項與補充 4.1 動態建立與靜態建立的優缺點比較?4.2 系統滴答時鐘頻率的選取 4.3 執行緒棧大小分配的小策略 4.4 執行緒...
RT Thread核心學習之執行緒管理
執行緒是作業系統能夠進行運算排程的最小單位,它被包含在程序之中,是程序中的實際運作單位,其本質是將複雜的應用 乙個程序 分解成多個小的 可排程的 序列化的程式單元,當合理的劃分任務並正確執行時,能夠讓系統滿足實時系統的效能及時間的要求。如下圖所示,嵌入式系統執行任務a,該任務是系統通過感測器採集資料...
Linux核心學習
交叉工具鏈 核心相關知識 linux系統的構成 使用者空間 核心空間 思考 為什麼劃分為兩個層次?目的其實是為保護作業系統,防止應用程式的異常導致作業系統崩潰。核心空間與使用者空間是程式執行的兩種不同狀態,通過系統呼叫和硬體中斷能夠完成從使用者空間到核心空間的轉移。那麼linux的核心由哪些構成呢?...