對於系統的學習,一直也來是我非常向往的地方。但是由於各種原因一直沒有實現,而且進展也非常緩慢。不管怎麼說,自己一定會努力朝這個方面發展,希望以後能在自己的項目中使用OS,從而走上更高的臺階。
不積跬步,無以至千里。下面將留下我的腳印。。。
1. 在調用uCOS-II功能函數時,中斷總應當是開着的。原因是:任務被掛起一段時間,直到掛起時間到,但由於中斷關掉了,時鐘節拍中斷一直得不到服務,所以會使整個應用程序崩潰。
2. 在分配任務優先級時,建議不使用優先級爲0、1、2、3及OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO。原因是:這些優先級可能後面版本的OS會使用,當然也可以使用,但一段不能使用OS_LOWEST_PRIO優先級。
3. 函數OSSchedLock()和OSSchedUnlock()是禁止和允許任務調度。必須成對出現,且可以嵌套到255層。當OSLockNesting = 0時,任務的調度重新得到允許。在使用這兩個函數時要非常謹慎,因爲它們會影響OS對任務的正常管理。在調用OSSchedLock()之後,用戶應用程序不得調用可能會使當前任務掛起的系統功能函數。
OSFlagPend() OSMboxPend() OSMutexPend() OSTimeDly()
OSQPend() OSSemPend() OSTaskSuspend(OS_PRIO_SELF) OSTimeDlyHMSM()
4. 空閒任務中調用了OSTaskIdleHook(),可以在這個函數中編寫任何用戶代碼,可以寫一些讓CPU進入低功耗模式。OSTaskIdle()是永遠處於就緒態的,所以不能在OSTaskIdleHook()中調用任何可以使任務掛起的PEND函數,OSTimeDly???()函數及OSTaskSuspend()函數。
5. 統計任務的使用,必須在初始化時建立的第一個也是唯一的任務中調用統計任務的初始化函數OSStatInit()。
void main(void)
{
OSInit();
OSStart();
}
void TaskStart(void *pdata)
{
OSStatInit(); // 初始化統計任務
for(;;)
{
}
}
6. 時鐘節拍的啓動一定要在多任務啓動以後,也就是在調用OSStart()之後,再開啓時鐘節拍器。換句話說,調用OSStart()之後應做的第一件事件是初始化定時中斷。