vxworks中Task的Hook怎么用

发布时间:2021-12-22 10:34:36 作者:小新
来源:亿速云 阅读:337

这篇文章给大家分享的是有关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怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. Thinkphp中Hook行为怎么用
  2. vxworks中VirtualBox怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vxworks task hook

上一篇:Task中二进制信号量怎么用

下一篇:vxworks中Task如何计数信号量

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》