《VxWorks7編程指南》筆記(五)——看門狗時鐘(Watchdog)

VxWorks在內核中提供了看門狗機制,允許任何C函數以特定的延時掛接到一個定時器上。

看門狗定時器被作爲系統時鐘ISR的一部分而維持。由看門狗定時器觸發的函數,將作爲系統時鐘的中斷服務代碼而執行。如下函數由wdLib庫提供:

 

看門狗定時器示例

 

靜態實例化看門狗定時器

wdCreate()函數執行了一個動態的、兩步的操作,可以在運行時爲看門狗定時器分配內存,並初始化看門狗定時器對象。看門狗定時器(包括其他VxWorks對象)也可以靜態實例化(意味着在編譯時爲對象分配內存),然後在運行時初始化。

宏VX_WDG在編譯時聲明一個看門狗定時器,僅需要一個看門狗定時器名作爲參數。函數wdInitialize()用於在運行時初始化看門狗定時器並將其使能。宏與函數必須使用同一個看門狗定時器名稱。

 

靜態實例化看門狗示例

 

使用公共看門狗定時器進行進程間通信

VxWorks看門狗定時器可以作爲私有對象創建,也可以作爲公共對象創建。如果創建爲公共對象,那麼在系統全局都可以進行訪問。

 

問題:如何使用看門狗定時器週期性地執行一個特定的函數myFun()?

方法:僅需要在myFun()函數中遞歸地調用wdStart()函數,其中又將myFun()函數作爲參數傳入wdStart()中。需要注意遞歸退出條件的設置。示例僞代碼如下:

int myFun(){
    
    if(condition is true){
        return 0;                 //跳出遞歸調用
    }

    wdStart(...,myFun(),...);    //在看門狗中掛接myFun()以週期執行該函數

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章