|
|
uC/OS-II是如何生成任務(wù)控制塊的實(shí)體的呢?答案很簡(jiǎn)單,uC/OS-II是以結(jié)構(gòu)體數(shù)組的形式生成了任務(wù)控制塊的實(shí)體。任務(wù)控制塊實(shí)體的聲明如下:
1.JPG (10.49 KB, 下載次數(shù): 63)
下載附件
2013-7-14 04:02 上傳
該代碼在ucos_ii.h中,OS_MAX_TASKS為最多的用戶任務(wù)數(shù),OS_N_SYS_TASKS為系統(tǒng)任務(wù)數(shù),一般情況下為2。因此,在內(nèi)存中分配了OS_MAX_TASKS+OS_N_SYS_TASKS個(gè)任務(wù)控制塊,這些任務(wù)控制塊占用了(OS_MAX_TASKS+OS_N_SYS_TASKS)*SizeOf(OS_TCB)個(gè)內(nèi)存空間。
宏OS_MAX_TASKS在OS_CFG.h中定義,OS_CFG.h是整個(gè)操作系統(tǒng)的配置文件。宏OS_N_SYS_TASKS在ucos_ii.h中定義,它的值與另一個(gè)宏OS_TASK_STAT_EN有關(guān),代碼如下所示:
2.JPG (14.67 KB, 下載次數(shù): 80)
下載附件
2013-7-14 04:02 上傳
OS_TASK_STAT_EN>0表示系統(tǒng)具有統(tǒng)計(jì)任務(wù)的時(shí)候,OS_N_SYS_TASKS的值應(yīng)為2,否則應(yīng)為1.
OS_TASK_STAT_EN在OS_CFG.h中定義,意義為系統(tǒng)是否具有統(tǒng)計(jì)任務(wù),OS_TASK_STAT_EN的默認(rèn)值是1,表示有統(tǒng)計(jì)任務(wù),如果確實(shí)不需要統(tǒng)計(jì)任務(wù),可以把OS_TASK_STAT_EN的值設(shè)置為0,這時(shí)候系統(tǒng)任務(wù)只有空閑任務(wù),因此OS_N_SYS_TASKS的值就是1.反之,系統(tǒng)如果有統(tǒng)計(jì)任務(wù),再加上空閑任務(wù),那么系統(tǒng)任務(wù)的數(shù)量就是2,OS_N_SYS_TASKS的值就是2.
于是,系統(tǒng)任務(wù)總數(shù)=OS_MAX_TASKS+OS_N_SYS_TASKS,那么上面程序中的代碼定義的任務(wù)控制塊的數(shù)量就等于系統(tǒng)的任務(wù)總數(shù)。
uC/OS-II最多可以管理64個(gè)任務(wù),因此,在有統(tǒng)計(jì)任務(wù)的情況下,OS_MAX_TASKS不能超過62。通常,為節(jié)省內(nèi)存,提高運(yùn)行效率 ,在實(shí)際情況下,如果用戶只有5個(gè)任務(wù),完全可以把OS_MAX_TASKS的值設(shè)置為5,這樣既節(jié)省了大量的內(nèi)存資源,又提高了運(yùn)行效率。
任務(wù)控制塊實(shí)體的聲明的程序代碼定義了系統(tǒng)任務(wù)總數(shù)個(gè)任務(wù)控制塊數(shù)組,于是這些任務(wù)控制塊序號(hào)分別是0,1,2,……,OS_MAX_TASKS+OS_N_SYS_TASKS-1,對(duì)應(yīng)的數(shù)組元素為OSTCBTbl[0]~OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASKS-1],他們占用連續(xù)的內(nèi)存空間。
如下圖所示,列出了系統(tǒng)初始化后實(shí)際的任務(wù)控制塊,其中第一個(gè)任務(wù)控制塊的內(nèi)容被展示出來。
3.JPG (95.94 KB, 下載次數(shù): 77)
下載附件
2013-7-14 04:02 上傳
如上圖所示是系統(tǒng)實(shí)際運(yùn)行時(shí),內(nèi)存中的實(shí)際信息。可見,第一個(gè)任務(wù)控制塊即OSTCBTbl[0]是從地址0x00433300開始的,包含了前面講到的所有任務(wù)控制塊成員。該任務(wù)控制塊的優(yōu)先級(jí)是0x3f,對(duì)應(yīng)十進(jìn)制的63,所以是優(yōu)先級(jí)最低的空閑任務(wù),任務(wù)名稱OSTCBTaskName的內(nèi)容是“uC/OS-II Idle”。
|
|