這篇文章給大家分享的是有關(guān)vxworks中Task的Hook怎么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
郟縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!
VxWorks里可以給Task注冊(cè)6種Hook,分別用于Create、Delete、Stop、Continue、Switch、Swap。
Create
其參數(shù)createHook是一個(gè)函數(shù),原型如下
這個(gè)taskCreateHookAdd()的作用是: 每次有Task在創(chuàng)建新Task的過(guò)程中,就會(huì)自動(dòng)調(diào)用注冊(cè)的函數(shù)createHook()
taskCreateHookDelete()負(fù)責(zé)刪除之前注冊(cè)的Hook
taskCreateHookAdd()可以注冊(cè)的Hook數(shù)量默認(rèn)為40
Delete
與Create的類(lèi)似,每次有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()的,即切出無(wú)效。
另外,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)槲覀儧](méi)有記錄它。
看看test的狀態(tài)
然后讓它再跑一圈,看看切換次數(shù)還對(duì)不對(duì)。swapOut保持不變,其它幾個(gè)計(jì)數(shù)器變大了
試試Stop和Continue,也沒(méi)問(wèn)題
最后是Delete
是不是有點(diǎn)意思?
最后了才想起來(lái)要查看Task Name的話(huà),可以直接使用 taskName(),沒(méi)必要訪問(wèn)TCB的成員呀 ?
感謝各位的閱讀!關(guān)于“vxworks中Task的Hook怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
本文標(biāo)題:vxworks中Task的Hook怎么用
文章來(lái)源:http://chinadenli.net/article20/gidsjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、搜索引擎優(yōu)化、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、企業(yè)網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)