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