關(guān)于ucos中os_tmr.c中的代碼分析
我本身也是個初學(xué)者,喜歡嵌入式而自學(xué)ucos系統(tǒng),ucos是個開源的代碼,短小而又簡單,這是我學(xué)習(xí)的筆記,希望能對喜歡ucos的人有一點(diǎn)幫助,因本人也是初學(xué)者,如有錯誤迎指點(diǎn)。一般的書多是2.5版本,沒有os_tmr.c,所以我寫了關(guān)于這部分代碼的分析。
我讀ucos.中的os_tmr.c:
我想這個文件里就是為了寫一個建立在操作系統(tǒng)的定時器,原來我們學(xué)的時鐘節(jié)拍就像cpu總線時鐘脈沖一樣。我們建立的是定時器結(jié)構(gòu)體,在os_tmr.c中有一個函數(shù)OSTmr_Task()這個函數(shù)對定時器結(jié)構(gòu)體的信息進(jìn)行處理,在定時時間到了時候,該定時器中的一個指向回調(diào)函數(shù)的指針就調(diào)用這個回調(diào)節(jié)器函數(shù)進(jìn)行工作,當(dāng)然,你要寫回調(diào)函數(shù),不然就什么也不做,以前做過ucos移植的人知道要寫一個硬件定時器中斷函數(shù),這回要加個OSTmrSignal()這里有個發(fā)送信號。我們學(xué)硬件時知道,用到硬件定時器時要給它一個計算脈沖。這個軟件定時器也要一個計算脈沖。我們建立的定時器結(jié)構(gòu)體都會掛到OSTmrWheelTbl[OS_TMR_CFG_WHEEL_SIZE]上面,OS_TMR_CFG_WHEEL+SIZE是要自己定義的,至于掛到OSTmrWheelTbl[0] 到OSTmrWheelTbl[OS_TMR_CFG_WHEEL_SIZE-1]哪一個上,只要看一下OSTmr_Link (OS_TMR *ptmr, INT8U type)就明白了,而且一個OSTmrWheelTbl[n]上可以掛很多個定時器結(jié)構(gòu)體。
一、定時器的建立:
定時器是在我們的應(yīng)用程序中建立的,
OS_TMR *OSTmrCreate (INT32U dly,
INT32U period,
INT8U opt,
OS_TMR_CALLBACK callback,
void *callback_arg,
INT8U *pname,
INT8U *perr)
想使用定時器那些函數(shù)要在os_cfg.h中定義 OS_TMR_EN。
返回值是os_tmr結(jié)構(gòu)體(定義在ucos_ii.h中)。
typedef struct os_tmr {
INT8U OSTmrType;
OS_TMR_CALLBACK OSTmrCallback;
我讀ucos.中的os_tmr.c:
一、定時器的建立:
OS_TMR
想使用定時器那些函數(shù)要在os_cfg.h中定義 OS_TMR_EN。
返回值是os_tmr結(jié)構(gòu)體(定義在ucos_ii.h中)。
typedef
INT8U
OS_TMR_CALLBACK