如何使TaskSwitchHookAdd在VxWorks中执行工作

How to make TaskSwitchHookAdd execution work in VxWorks

提问人:Umashanker Rapolu 提问时间:3/21/2023 更新时间:3/21/2023 访问量:44

问:

我在VxWorks平台上的嵌入式板上运行的程序上看到一个问题。

问题描述:一个优先级为 150 -> 的用户空间任务 A 添加了 TaskSwitchHookAdd((FUNCPTR) monitor_TaskA),以通过信号量资源验证 TaskA 中的对象状态。我在 monitor_TaskA() 函数中使用了 sem_Give() 和任务 A 中存在的函数 validate_TaskA_obj_states(),该函数在无限的 while(1) 循环中运行,永远等待 sem_Take(),并对其执行自定义操作。但是,在执行这段代码时,我从未看到该代码是在 validate_TaskA_obj_states() 中执行的,但是在 VxWorks 板上使我的实际应用程序崩溃。如果我想通过 -> validate_TaskA_obj_states() 监控任务 A 内部对象状态到微秒粒度,在这种情况下最好的方法是什么。为什么这个函数在板上崩溃,没有特定的错误消息看起来像是潜在的死锁情况。使用没有任何代码的空 monitor_TaskA() 函数(没有 Sem_Give()),我能够看到应用程序不会崩溃。但是,为什么不同例程中的 sem_Give() 和 sem_Take() 不适用于 TaskSwitchHookAdd 函数执行。

如果您有更好的选择通过任务库执行相同的任务,请告诉我。如果可能,请将伪代码或引用代码添加到其中。

谢谢。

我已经尝试了问题描述中指定的方法。

内核 vxworks 上下文 任务切换

评论


答: 暂无答案