0

我正在做一个在内核和用户空间中都使用 RTAI 的大型项目。我不会详细介绍该项目,但这里简要介绍了出现问题的地方。

在用户空间,我的项目提供了一个库,供其他人用来编写一些软件。这些程序本身可能具有 RTAI 实时线程。

现在,RTAI 中的一些函数要求它们的调用线程已经ed,所以如果我想在库中的函数中使用它们,我需要通过调用和 laterrt_thread_init临时使调用线程实时。rt_thread_initrt_task_delete

现在问题来了:

如果我的函数的调用线程已经是实时的,那么我rt_thread_init假设它只是失败了,但是然后我rt_task_delete并使该线程成为非实时的(除了当线程本身(假设我什么都没改变)再次rt_task_delete,RTAI 崩溃。

如果我的函数的调用线程不是实时的,一切都很好。

现在,我在函数中采用了一个参数,以便调用函数告诉库它是否是实时的。但是,我想知道 RTAI 是否有功能或其他东西,以便我可以用来自动检测当前线程是否是实时的。

不知道这里有没有 RTAI 用户(我当然没看到 RTAI 标签),但希望有。

4

1 回答 1

1

我自己从未尝试过,所以这是一个猜测——但你考虑过使用 rt_whoami 吗?

获取当前任务的任务指针。

https://www.rtai.org/documentation/magma/html/api/api_8c.html#a12

如果您处于非 RT 任务中,我想它会失败(返回 NULL?)...

于 2011-10-15T18:35:28.700 回答