天天看點

ucosIII OS_TYPE.H /OS_CFG_APP.H 解釋B-2 DATA TYPES (OS_TYPE.H)B-3 μC/OS-III STACKS, POOLS AND OTHER (OS_CFG_APP.H)

ucosIII User's Manual.pdf 文檔,μC/OS-III Configuration Manual章節B-2 B-3 翻譯,以進一步了解ucosIII 的移植及裁剪。

B-2 DATA TYPES (OS_TYPE.H)

os_type.h包含μC/OS-III所用到的資料類型,這些資料類型隻應在μC/OS-III的移植時被修改。

修改os_type.h的原因是處理器針對特定字長可能會運作的更好。例如一個16位處理器在處理16位值時可能更有效率,而32位處理器對32位值更合适,即便會有額外的RAM開銷。換言之,使用者可能需要在處理器性能和記憶體開銷上作出選擇。

B-3 μC/OS-III STACKS, POOLS AND OTHER (OS_CFG_APP.H)

μC/OS-III允許使用者配置空閑任務堆棧的大小、統計任務堆棧、消息池、時鐘節拍輪盤、定時器輪盤、調試表等。這是通過os_cfg_app.h進行完成的。

OS_CFG_TASK_STK_LIMIT_PCT_EMPTY:

這個#define為空閑任務,統計任務,節拍任務,中斷隊列處理任務和定時器任務的任務堆棧 設定堆棧溢出檢測限位(以空餘百分比的形式)。換句話說,設定值是堆棧剩餘的空間比例。

例如,如果堆棧的大小為1000個CPU_STK單元,而使用者聲明的OS_CFG_TASK_STK_LIMIT_PCT_EMPTY為10,則堆棧溢出檢測限位将在堆棧%90滿或在%10空的時候被置位。

如果處理器的堆棧是從高位址向低位址的增長,那麼檢測限位應該靠近堆棧的“基位址”,即接近堆棧的0單元。

如果處理器不支援自動堆棧限位檢測,則應該将這個#define設定為0.

OS_CFG_IDLE_TASK_STK_SIZE:

設定空閑任務的堆棧大小(以CPU_STK為機關),注意,設定的任務堆棧大小至少要大于OS_CFG_STK_SIZE_MIN值(見os_cfg.h)

OS_CFG_INT_Q_SIZE:

如果OS_CFG_ISR_POST_DEFERRED_EN設定為1(見os_cfg.h),則這個#define指定了中斷隊列可以容納的項目數。此隊列的大小取決于 ISR處理程式期間,可能發生多少此中斷?其大小還取決于是否允許中斷嵌套。一個很好的初始值大約是10.

OS_CFG_INT_Q_TASK_STK_SIZE:

如果OS_CFG_ISR_POST_DEFERRED_EN設定為1(見os_cfg.h),則#define設定的ISR處理任務(ISR handler task’s stack)的堆棧大小(以CPU_STK為機關)

OS_CFG_ISR_STK_SIZE:

此項設定了μC/OS-III的中斷堆棧大小(以CPU_STK為機關),注意,次堆棧的大小需要滿足中斷嵌套的最壞情況,假設處理器支援中斷嵌套。該堆棧的聲明在os_cfg_app.c中,形式如下:

CPU_STK OSCfg_ISRStk[OS_CFG_ISR_STK_SIZE];

OS_CFG_MSG_POOL_SIZE:

此項指定了OS_MSGs消息池中可用的OS_MSGs數量。其值以OS_MSG單元的數量表示。消息池在os_cfg_app.c中聲明,形式如下:

OS_MSG OSCfg_MsgPool[OS_CFG_MSG_POOL_SIZE];

OS_CFG_STAT_TASK_PRIO:

OS_CFG_STAT_TASK_RATE_HZ:

設定統計任務的執行頻率,HZ為機關。建議該值是節拍頻率的偶數分之一

OS_CFG_STAT_TASK_STK_SIZE:

OS_CFG_TICK_RATE_HZ:

OS_CFG_TICK_TASK_PRIO:

節拍任務的優先級。建議将此任務設定在一個相當高的優先級上,但并不是最高的。配置設定給該任務的優先級必須大于0并且小于OS_CFG_PRIO_MAX-1.

OS_CFG_TICK_TASK_STK_SIZE:

OS_CFG_TICK_WHEEL_SIZE:

這個#define定義了OSTickWheel[]表中的項目數。“輪盤”的作用,是可以減少節拍任務每次需要檢查更新的任務數量。輪盤的大小應該是應用程式的預期總任務數的幾分之一。

其值應該是4~1024之間的數。任務管理的開銷在某種程度上決定了輪盤的大小。較大的輪盤尺寸将會減小節拍管理的負荷,但會需要更多地RAM。輪盤的每個項目都包含一個指針、一個計數器,計數器記錄了在輪盤的這一條“輪輻”上等待的任務數。這個計數器通常16位的。建議不要将OS_CFG_TICK_WHEEL_SIZE設定為與節拍頻率成倍數的關系。如果應用程式有很多任務,建議設定一個較大的輪盤尺寸。作為初始值,建議使用一個質數(3,5,7,11,13,17,19,23…)。

OS_CFG_TMR_TASK_PRIO:

指定μC/OS-III定時器任務優先級。建議設定在一個中等偏低的優先級上。

應遵守如下規則:

ucosIII OS_TYPE.H /OS_CFG_APP.H 解釋B-2 DATA TYPES (OS_TYPE.H)B-3 μC/OS-III STACKS, POOLS AND OTHER (OS_CFG_APP.H)

OS_CFG_TMR_TASK_RATE_HZ

定時器任務的頻率。一般預設設定為10Hz。當然定時器可以以更高的速度運作,代價是更高的處理器開銷。

注:OS_CFG_TMR_TASK_RATE_HZ必須是OS_CFG_TICK_TASK_RATE_HZ的整數分之一。換句話說,如果設定OS_CFG_TICK_TASK_RATE_HZ==1000Hz,請不要設定OS_CFG_TMR_TASK_RATE_HZ為11,因為那樣子每次定時器更新都将需要90.91時鐘節拍,不是整數。

OS_CFG_TMR_TASK_STK_SIZE:

定時器任務的堆棧大小。

OS_CFG_TMR_WHEEL_SIZE:

定時器的更新采用了輪轉的輪盤機制。“輪盤”的作用,是可以減少定時器管理任務每次需要檢查更新的任務數量。輪盤的大小用該時應用程式的總定時器數目的幾分之一。

其值應該是4~1024之間的數。定時器管理的開銷在某種程度上決定了輪盤的大小。較大的輪盤尺寸将會減小定時器管理的負荷,但會需要更多地RAM。輪盤的每個項目都包含一個指針、一個計數器,計數器記錄了在輪盤的這一條“輪輻”上等待的任務數。這個計數器通常16位的。建議不要将此值設定為與節拍頻率成倍數的關系。如果應用程式有很多定時器,建議設定一個較大的輪盤尺寸。作為初始值,建議使用一個質數(3,5,7,11,13,17,19,23…)。

如有出入,以英文原版為主。

繼續閱讀