幾類常用的Xenomai 原生API

2021-07-27 20:11:37 字數 3519 閱讀 2176

幾類常用的xenomai 原生api:

1、任務管理

xenomai 本身提供的一系列多任務排程機制,主要有以下一些函式:

intrt_task_create (rt_task *task, const char *name, int stksize, int prio, intmode) ; 任務的建立;

int rt_task_start(rt_task *task, void(*entry)(void *cookie), void *cookie) ; 開始任務排程;

intrt_task_suspend (rt_task *task); 掛起任務;

intrt_task_delete (rt_task *task) ; 刪除任務;

intrt_task_set_periodic (rt_task *task, rtime idate, rtime period) ;設定任務執行週期;

intrt_task_wait_period (unsigned long *overruns_r) ;掛起任務到下個週期再執行;

intrt_task_set_priority (rt_task *task, int prio);設定任務優先順序;

2、記憶體堆服務

intrt_heap_create (rt_heap *heap, const char *name, size_t heapsize, int mode) 建立乙個記憶體堆空間或乙個共享記憶體片段;

intrt_heap_delete (rt_heap *heap) 刪除乙個記憶體堆空間或乙個共享記憶體片段;

int rt_heap_bind(rt_heap *heap, const char *name, rtime timeout) 繫結共享記憶體空間;

intrt_heap_unbind (rt_heap *heap) 接觸共享記憶體空間的繫結;

3、資訊管道服務

intrt_pipe_create (rt_pipe *pipe, const char *name, int minor, size_t poolsize) 建立通訊管道;

intrt_pipe_delete (rt_pipe *pipe) 刪除通訊管道;

ssize_t rt_pipe_receive (rt_pipe *pipe, rt_pipe_msg **msgp, rtime timeout) 從管道接受一條資訊;

ssize_trt_pipe_send (rt_pipe *pipe, rt_pipe_msg *msg, size_t size, int mode) 向管道傳送一條資訊;

xenomai 在實時核心之上還提供了多組api 模擬多種不同的實時作業系統和程式設計規範,包括posix、vxworks 和rtai 等。這使得實時應用系統的開發和移植變得非常方便。

xenomai 的移植

xenomai 提供了乙個與 linux 無縫結合地實時子系統,所以首先要做的是將xenomai 作為目標核心的一部分進行編譯。xenomai 提供了乙個指令碼檔案scripts/prepare-kernel.sh 用來進行目標核心的編譯。這個指令碼檔案同樣能夠應用於adeos 對於核心的補丁。指令碼檔案使用方法如下:

$scripts/preparekernel.sh

–linux=[adeos=][arch=]

–linux 選項指定了目標核心源**樹路徑。

–adeos 選項指定了與目標核心版本很相匹配的adeos補丁的路徑。如果adeos已經安裝在目標核心中,這個引數選項可以忽略。如果系統偵測到以前安裝過adeos補丁,將不再安裝。

–arch 選項給指令碼檔案指定了目標板的結構。如果沒有說明該選項,編譯系統將會偵測並推薦乙個合理的預設值。

下面以x86 和linux2.6.15 架構為例說明配置命令的使用: cd

scripts/preparekernel.sh

–linux=/usr/src/linux2.6.15ipipe–arch=x86

adeos=ksrc/arch/i386/patches/adeosipipe2.6.15i3861.201.patch

建立實時子系統後,需要對xenomai 核心選項進行配置,其方法與通常linux 核心的配置方法類似。

如圖3.2 所示,標準核心結合了實時子核心後,將會在核心配置選項中多出一條「real-time sub-system」選項。使用者可在子選項的子選單中選擇或去除相應的功能。

配置核心選項後,直接配置xenomai 部分並編譯、安裝linux 核心就成功安裝了xenomai 實時子核心。命令如下:

mkdir && cd

./configure enablex86sep

$ makeinstall

以上是以x86 架構為例說明xenomai 實時子系統的安裝,本文中的基於arm 的目標板實時子系統的安裝基本步驟相同,只需在安裝後,將生成的庫檔案即宿主機/usr/xenomai 目錄拷貝至目標板的/usr/目錄下,以**用程式使用。

3.2.2.3 移植的注意點

通過以上章節的分析,移植xenomai 至linux 核心的步驟就清晰了,但在其過程中會有很多莫名其妙的錯誤,大部分都是因為在配置linux 核心選項時有些選項是必須安裝卻沒有安裝,有些選項選擇後會對 xenomai 的編譯產生一些致命的錯誤而導致實時子系統安裝的失敗,特別是與時間有關的選項。所以,移植 xenomai 需要仔細閱讀相關文件,遇到問題時逐步排除可能產生問題的選項,才能正確安裝子系統。

3.2.2.4 移植正確性驗證

xenomai 子系統移植完成後,如系統沒有報錯即可編寫實時程式對系統移植的正確性進行驗證。

驗證程式不需要實現十分複雜的功能,本文中編寫的測試程式,使用了xenomai實時子系統的原生api,該程式建立了任務,指定了任務的優先順序,對任務的實體部分進行了簡單地實現,部分源**如下所示:

#include 

#include

#define task_prio 99 /* highest rt priority */

#define task_mode 0 /* no flags */

#define task_stksz 0 /* stack size (use default one) */

#define task_period 100000 /* 100 usc period */

rt_task task_desc;

void sampling_task (void *cookie)

} int main (int argc, char *argv)

該測試程式編譯後執行無誤,實時子系統xenomai 安裝正確,使用者可進行實時任務的設計和開發。
while(1)
中斷響應時間測試思路為:編寫乙個發生時機可以預知的中斷,可以在中斷發生前捕獲系統當前時間 start,中斷發生並呼叫 isr 時再次捕獲系統當前時間 end,則end-start 的值可近似認為是中斷響應時間。

經測試,xenomai實時子系統的實時效能達到微秒級的響應,能夠很好的滿足實時應用的要求。

常用的Xenomai 原生API

常用的xenomai 原生api 1 任務管理 xenomai 本身提供的一系列多任務排程機制,主要有以下一些函式 int rt task create rt task task,const char name,int stksize,int prio,int mode 任務的建立 int rt t...

構建Xenomai的Linux實時系統

linux ubuntu 14.04 3.13,替換核心,核心版本 3.14.17 xenomai 2.6.4 sudo apt get install kernel package sudo apt get install fakeroot build essential crash kexec ...

如何區分網線是幾類的 幾類網線怎麼區分

在現在的通訊技術領域中,網路是必不可少的,為生活 工作 娛樂等提供了非常大的便利。網路的發展是有目共睹的,從最開始的10兆網,到後續的百兆 千兆,甚至萬兆,這是網速的提公升,而網速提公升的同時,網線配置也有相應的變化,目前有五類 六類 七類等網線,那麼幾類網線怎麼區分呢?下面就隨齊家網專家一起來了解...