1. 程式人生 > >ucosiii淺析內核對象-軟件定時器

ucosiii淺析內核對象-軟件定時器

sta 初始化 一次 等待 軟件定時器 通過 全局變量 技術 ali

內核對象和各種內核機制的函數接口都在os.h裏聲明,實現在各自的.c文件,比如os_tmr.cos_time.c

C語言全局變量一般會默認初始化;局部變量如若不初始化,會分配垃圾數據的;建議使用時都手動初始化。

其實使用內核對象時,就類似與使用任務,只不過在創建對象之前,要先聲明一個內核對象。

好了,上面閑聊了幾句,今天來說說ucosiii的幾個內核對象。

首先說“軟件定時器”,其實單純的講就是定時作用,這裏我們要註意的就是,使用它方法和使用任務類似;那麽我們就先來分析分析任務的執行過程:

  1. main會初始化ucos;調用一個起始任務創建函數(它的參數就是就是任務的工作模式,任務信息,任務函數指針)來創建任務
    ;啟動多任務管理。
  2. 任務函數指針指向起始任務函數會初始化操作系統;調用若幹普通任務創建函數(與上一致)來創建任務;刪除起始任務本身。
  3. 任務函數就會完成具體的操作。

那繼續說軟件定時器,在上面的3裏任務函數會聲明一個定時器對象,然後調用一個定時器創建函數(它的參數為定時器信息,工作模式,回調函數指針等)來創建任務,回調函數完成一些自定義的操作(每次定時完成會調用此回調函數),最後調用OSTmrStart()啟動軟件定時器;接下來就可以使用它了。

技術分享圖片

我們可以知道,用OSTimeDly是將任務置為等待態,CPU的使用權暫時被剝奪,開啟定時器之後,該任務還是可以使用CPU

通過debug我們也可以發現,運行完

OSTimeDly之後(也可以說定時了指定時間之後),會完成一次回調函數裏面的操作。也就驗證了這個結論“定時完成之後會調用回調函數”。

ucosiii淺析內核對象-軟件定時器