2011-10-15 29 views
0

我正在研究在內核和用戶空間中使用RTAI的大型項目。我不會詳細介紹這個項目的細節,但是這裏只是簡要介紹一個問題出現的地方。如何檢測函數的調用線程是否已經是RTAI實時?

在用戶空間中,我的項目提供了其他人用來編寫某些軟件的庫。這些程序本身可能有RTAI實時線程。現在

,在RTAI一些功能要求其調用線程已經rt_thread_init版,所以如果我想在庫中的函數使用它們,我需要通過調用rt_thread_init後來rt_task_delete暫時使調用線程實時。

現在,這裏的問題:

如果我的函數的調用線程已然是實時的,那麼我rt_thread_init ING我以爲只是失敗,但後來我rt_task_delete,使線程非實時(除了這個事實,當線程本身(假設我又什麼都沒有改變)rt_task_delete S,RTAI崩潰。

如果我的函數的調用線程不是實時的,一切正常。

現在,我採取了一個參數的功能,以便於調用函數告訴圖書館它是否是實時的。然而,我想知道RTAI是否有一個函數或一些東西,所以我可以用它來自動檢測當前線程是否是實時的。

不知道是否有任何RTAI用戶(我當然沒有看到RTAI標籤),但希望能有。

回答

1

從來沒有嘗試過,所以這是一個猜測 - 但你有沒有考慮使用rt_whoami?

獲取當前任務的任務指針。

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

我會想象它會失敗(返回NULL?)如果你在非RT任務...

+0

這真是一種絕望的行爲在堆棧溢出問這個,但我很高興我做到了!現在拿到這個+1直到星期一,我去試試 – Shahbaz

+0

你知道,根據RTAI的維護者的說法,'rt_whoami'只在內核空間和'rt_buddy'中被替換,儘管他說它只適用於調試。但是,我從2003年開始閱讀這封電子郵件,並且'rt_buddy'也不在文檔中。我曾問過這是否仍然如此。 – Shahbaz

相關問題