您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關vxworks中Task的Hook怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
VxWorks里可以給Task注冊6種Hook,分別用于Create、Delete、Stop、Continue、Switch、Swap。
Create
其參數createHook是一個函數,原型如下
這個taskCreateHookAdd()的作用是: 每次有Task在創建新Task的過程中,就會自動調用注冊的函數createHook()
taskCreateHookDelete()負責刪除之前注冊的Hook
taskCreateHookAdd()可以注冊的Hook數量默認為40
Delete
與Create的類似,每次有Task刪除其它Task時,都會自動調用函數deleteHook()
Stop
每次有Task在Stop其它Task時,都會自動調用函數stopHook()
可以注冊的Hook最多為4個
Continue
每次有Task在Continue其它Task時,都會自動調用函數contHook()
Switch
每次有Task切換執行時,都會調用函數switchHook()。例如Task B搶占了正在執行的Task A,就會調用switchHook()。Task A再恢復執行時,就再次調用switchHook()。
可以注冊的Hook最多為16個
Swap
與Switch比較像,都是在Task切換時調用相應的Hook。
區別是:Switch是每次Task切換都會調用相應的Hook;而Swap注冊Hook后,只對taskSwapHookAttach()掛接的任務有效。而且taskSwapHookAttach()掛接時,還可以指定是切入有效,還是切出有效。例如taskSwapHookAttach((FUNCPTR)swapHook,TaskA,1,0)表示TaskA被CPU執行時才會調用swapHook(),即切入有效;而TaskA被其它Task搶占了,是不會觸發swapHook()的,即切出無效。
另外,Switch與Swap注冊的Hook是在Kernel的上下文里執行,因此并不是所有的系統函數都可以在它們的Hook里調用。可以被調用的函數如下
下面我們看一個完整的Hook例子
先聲明幾個Hook函數:Create、Delete、Stop和Continue的Hook都是打印Task的名字;Switch和Stop的Hook因為能夠調用的函數很有限,因此我們只是記錄一下切換的次數
然后分別注冊這些Hook。注冊Swap時,我們在例子中只注冊一個方向,例如切入方向。
并啟動一個test Task,它循環打印自己的執行次數,然后掛起自己。
在VxWorks里試試這個例子
執行testHook(),可以看到createHook()提示Shell創建了T1。然后test()自己打印執行了一次。
看一下切換次數,是不是符合預期。swapOut為0,因為我們沒有記錄它。
看看test的狀態
然后讓它再跑一圈,看看切換次數還對不對。swapOut保持不變,其它幾個計數器變大了
試試Stop和Continue,也沒問題
最后是Delete
是不是有點意思?
最后了才想起來要查看Task Name的話,可以直接使用 taskName(),沒必要訪問TCB的成員呀 ?
感謝各位的閱讀!關于“vxworks中Task的Hook怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。