ucos v2.52
ostimetick()函式解析
呼叫處:os_cpu_a.asm裡_ostickisr
函式所有原始檔:os_core.c
**:void ostimetick (void)
else }
}ptcb = ptcb->ostcbnext; /* point at next tcb in tcb list */ //(10)
os_exit_critical(); //(11) }
} }內容解釋:
(1)進入臨界段, ostime++;
(2)如果os已開始執行(osstart()已執行,則執行if裡面的語句;
(3)遍歷ostcblist,直到idle task;
(4)進入臨界段
(5)如果ptcb->ostcbdly不為0,則需要處理
(6)--ptcb->ostcbdly,如果自減後為0
(7)如果任務不是由ostasksuspend()掛起的,由event掛起或只是ostimedly()掛起
(8)使該優先順序的任務處於就緒態
(9)如果任務是由ostasksuspend()掛起的,則 ptcb->ostcbdly重新置為1.
(10)得ostcblist鍊錶的下乙個os_tcb項。
(11)退出臨界段
1,重點解釋(9),為什麼的馬ostasksuspend()掛起的任務的ptcb->ostcbdly重新置為1呢?
對ostimetick()函式來說,ptcb->ostcbdly=0的task它不處理。
被ostacksuspend()掛起的任務,可以被ostaskresume()解除掛狀態,所以ostimetick()有義務持續檢測被掛起的任務,所以要保持ptcb->ostcbdly>0。
而對於非ostacksuspend()掛起的任務,不管是由event掛起或只是ostimedly()掛起,既然設定了超時時間,當ptcb->ostcbdly=0時就要置為就緒態。
2,(8)是如何使任務進入就緒態的呢?
首先,通過osrdygrp和osrdytbl[ptcb->ostcby]賦值,告知os此優先順序的任務已經準備就緒;
然後,在os_sched()裡尋找最高優先順序任務,做任務切換。
3,(5),
ptcb->ostcbdly!=0人有一種情況,此任務是等待狀態的任務。可是是因為
event掛起或只是ostimedly()掛起。
ptcb->ostcbdly=0有三種情況,一種是此任務是執行態的任務;第二種是此任務是就緒態的任務;第三種是此任務是等待狀態的任務,等待某個event,且timeout設定為0.
linux wait函式解析
程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait 就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wait就會一直阻塞在這裡,直到有乙個出現為止。wait 等待子程序中斷或結束...
matlab cov 函式解析
最近在用matlab 一直搞不懂cov 函式怎麼算出來了。從網上查了一下,結合一些程式例子總結如下 x 6 9 3 4 5 4 2 1 6 7 7 8 7 8 9 10 cov x ans 0.6667 1.3333 2.3333 3.0000 1.3333 4.6667 3.0000 5.0000...
strcpy函式解析
題目 已知strcpy函式的原型是 char strcpy char strdest,const char strsrc 1.不呼叫庫函式,實現strcpy函式。2.解釋為什麼要返回char 解說 1.strcpy的實現 char strcpy char strdest,const char str...