中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vxworks中Task的Hook怎么用

發布時間:2021-12-22 10:34:36 來源:億速云 閱讀:339 作者:小新 欄目:互聯網科技

這篇文章給大家分享的是有關vxworks中Task的Hook怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

VxWorks里可以給Task注冊6種Hook,分別用于Create、Delete、Stop、Continue、Switch、Swap。

Create

vxworks中Task的Hook怎么用

其參數createHook是一個函數,原型如下

vxworks中Task的Hook怎么用

這個taskCreateHookAdd()的作用是: 每次有Task在創建新Task的過程中,就會自動調用注冊的函數createHook()

taskCreateHookDelete()負責刪除之前注冊的Hook

taskCreateHookAdd()可以注冊的Hook數量默認為40

vxworks中Task的Hook怎么用

 

Delete

vxworks中Task的Hook怎么用

與Create的類似,每次有Task刪除其它Task時,都會自動調用函數deleteHook()

Stop

vxworks中Task的Hook怎么用

每次有Task在Stop其它Task時,都會自動調用函數stopHook()

可以注冊的Hook最多為4個

vxworks中Task的Hook怎么用

 

Continue

vxworks中Task的Hook怎么用

每次有Task在Continue其它Task時,都會自動調用函數contHook()

Switch

vxworks中Task的Hook怎么用

每次有Task切換執行時,都會調用函數switchHook()。例如Task B搶占了正在執行的Task A,就會調用switchHook()。Task A再恢復執行時,就再次調用switchHook()。

可以注冊的Hook最多為16個

vxworks中Task的Hook怎么用

 

Swap

vxworks中Task的Hook怎么用

與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里調用。可以被調用的函數如下

vxworks中Task的Hook怎么用

 

下面我們看一個完整的Hook例子

先聲明幾個Hook函數:Create、Delete、Stop和Continue的Hook都是打印Task的名字;Switch和Stop的Hook因為能夠調用的函數很有限,因此我們只是記錄一下切換的次數

vxworks中Task的Hook怎么用

 

然后分別注冊這些Hook。注冊Swap時,我們在例子中只注冊一個方向,例如切入方向。

并啟動一個test Task,它循環打印自己的執行次數,然后掛起自己。

vxworks中Task的Hook怎么用

在VxWorks里試試這個例子

執行testHook(),可以看到createHook()提示Shell創建了T1。然后test()自己打印執行了一次。

vxworks中Task的Hook怎么用

看一下切換次數,是不是符合預期。swapOut為0,因為我們沒有記錄它。

vxworks中Task的Hook怎么用

看看test的狀態

vxworks中Task的Hook怎么用

然后讓它再跑一圈,看看切換次數還對不對。swapOut保持不變,其它幾個計數器變大了

vxworks中Task的Hook怎么用

 

試試Stop和Continue,也沒問題

vxworks中Task的Hook怎么用

最后是Delete

vxworks中Task的Hook怎么用

是不是有點意思?

最后了才想起來要查看Task Name的話,可以直接使用 taskName(),沒必要訪問TCB的成員呀 ?

vxworks中Task的Hook怎么用

感謝各位的閱讀!關于“vxworks中Task的Hook怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定远县| 交口县| 南宁市| 玛曲县| 洛川县| 叙永县| 新河县| 宣恩县| 循化| 醴陵市| 东安县| 肃宁县| 桂平市| 霍山县| 巴东县| 思茅市| 银川市| 普洱| 时尚| 广灵县| 嵊州市| 社旗县| 永登县| 铁岭县| 德化县| 光泽县| 汾西县| 安新县| 交口县| 五指山市| 兴文县| 临朐县| 赤壁市| 怀远县| 盐池县| 日土县| 平顶山市| 崇礼县| 潢川县| 吉木乃县| 霍山县|