VxWorks 任務使用的學習

2021-10-08 05:32:04 字數 3815 閱讀 7554

對任務的操作使用tasklib 中的庫函式,需要包含的標頭檔案為: tasklib.h.

此外,經常使用的庫還有taskinfo, 主要包括的是獲得任務資訊的庫的數。需要包含的標頭檔案為: tasklib.h.

涉及的函式為: tasknametoid0, 即從任務的任務名獲得對應的id號。

在任務延遲時還需要和系統直接相關的庫syslib 中的函式sysclkrateget)和

sysclkrateset),需要包含的.**件為: syslib.h.

1. taskspawn

函式: int taskspawn (char *name, int priority, int options, int stacksize, funcptr entrypt, int arg1, nt arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, intarg9, int arg10)

引數*name

指向發起任務的任務名字串首位址的指標,存放在任務堆疊的啟始(pstackbase) 處

priority

發起任務的優先順序

options

任務的可選項 ,包括:

–vx_fp_task(0x0008,使任務支援浮點型計算,必須有嵌入式cpu的同時支援)

–vx_ private_ env [0x0080,支援私有環境變數(參見envlib)]

–vx_ no_ stack _fll (0x0100,不在建立任務時使用checkstack()填充堆疊)

–vx_ unbreakable (0x0002, 不允許任務的斷點除錯)

stacksize

堆疊加上任務名的總大小,單位為byte

entrypt

任務對應的函式入口指標

arg1 ~arg10

函式引數

返回任務id,如果分配堆疊時記憶體不足或建立失敗返回error

描述:發起以entrypt指向的函式為入口的任務,並且可以帶10個引數作為entrypt .指向函式的引數。可以使用乙個函式發起多個任務,並同時執行。

例如有函式statustest(int param1, int param2),則使用下面兩條語句發起任務名分別為「ttest1」 和「ttest2」,引數分別為「i,2」和「3,4",任務優先順序為100,任務堆疊大小為1000byte, test 作為函式入口的兩個任務。

taskspawn("「ttest1",100,0,1000,(funcptr)test, 1,2,0,0,0,0,0,0,0,0); .

taskspawn(「ttest2」,100,0, 1000,(funcptr)test,3,4,0,0,0,0,0,0,0,0);

由於函式中的區域性變數在發起任務時都儲存在任務堆疊中,因此有較大區域性陣列的函

數在發起任務時必須注意堆疊大小。

在shell下輸入sp,類似於taskspawn, sp 使用taskspawn的預設值。

格式為:sp函式名函式引數1,函式引數2, …

shell下輸入sp攜帶的函式引數可以按照實際使用的引數個數,而不需要像程式中使

用taskspawn()那樣必須寫滿10 個。如果輸入的引數個數少於函式引數個數,則後面的參

數值為0。由sp發起的任務預設任務名,格式為「u[n]t[m]",其中的n和m按順序逐漸遞

增,保證任務名不重複。任務預設優先順序100,預設堆疊大小20000byte,

例如:sp test,1,2

####在shell下輸入「i」,可以察看當前存活的任務的資訊,如任務名、優先順序和執行狀態

等。2. taskdelete

函式: status taskdelete (int tid)

描述:刪除乙個任務,同時釋放堆疊和對應的wind._tcb任務控制塊的資源。

除的同時,會呼叫taskdeletehookadd0函式繫結的函式。

引數:tid

待刪除的任務id

返回0k,如果任務無法刪除則返回error。

3. taskdelay

函式: status taskdelay(int ticks)

描述:此函式使呼叫它的任務釋放cpu,並等待規定的時間。通常用於定時查詢一些

不使用中斷的外部條件。

引數:ticks,延遲的tick數。vxworks 系統將時間分為時間片(tick) 使用,預設is為60個時間片。可以通過函式sysclkrateget()/sysclkrateset0來獲得/設定is對應的時間片個數。也就是說,ticks 個時間片對應的時間是ticks/sysclkrateget()秒。

返回:ok;當被中斷服務程式呼叫,或者呼叫其任務接收到沒有被陰塞或者被忽略掉的訊號(signa1) 時,返回error

4.sysclkrateget0

函式: int sysclkrateget0

描述:獲得系統中1s對應的時間片個數。具體情況需要對應於相對的bsp.在使用此函式前,請仔細檢視bsp資料夾中的參考文件。

引數:無。

返回:系統中ls對應的時間片個數。

5. sysclkrateset

函式: status sysclkrateset(int tickspersecond)

描述:設定系統時鐘每秒鐘的中斷數,通常被usrconfig.c中的usrroot()函式呼叫。此函式可能和posix標準的clocklib相關,請參看clocklib.與sysclkrateget()類似,需要察看bsp的參考文件。提高每秒的tick數可以將系統時間劃分得更細,但不能將其設定得太高,否則會導致系統將大量時間花費在任務排程上,降低系統效率。通常設定的tick 數在幾十到幾千的範圍內。

引數:tickspersecond,每秒的時間片數目

返回:ok,如果引數非法(例如將引數設為負數)或者無法設定時間片則返回error。

6.tasknametod

函式: int tasknametod(char *name}

描述:通過任務名獲得該任務的id。用這種方法獲得任務的控制通常是低效的,因為

函式必須搜尋的任務列表的全部。

引數:*name,指向任務名字串的首位址的指標。

返回:任務id,當找不到使用該任務名的任務時返回error。

一般情況下,使用者程式使用的任務優先順序不要小於50。如果使用者程式的優先順序過高,超過了系統任務的優先順序,可能會影響系統的執行。為了除錯方便,一般由程式發起的任務優先順序應當低於用shell下sp發起的任務的優先順序,以保證shell的優先響應。故將使用者優先順序設定為低於100。 根據任務執行的先後次序劃分任務優先順序。

任務間的同步使用訊號燈。

vxworks的訊號燈操作庫為scmlib、 semblib、 semclib、 semmlib, 分別對應通用訊號燈操作與二進位制、計數型和互斥訊號燈的操作。需要包括的.**件為semlib.h。

當乙個任務的執行需要由另–個任務來觸發時,就可以使用訊號燈。例如任務a和任

務b,任務a一直等待某個條件被滿足,而這個條件是否滿足由任務b來確定。條件不滿

足時任務a必須不占用cpu,而條件一旦滿足,任務a立刻開始執行。此時任務a採用

定時任務使用

1.我本地字符集異常,導致開啟定時任務亂碼 bash warning setlocale lc ctype cannot change locale utf 8 no such file or directory 因為我終端為zsh,所以需要 vim zshrc 設定字符集 export lc al...

VxWorks的任務與任務排程

作為實時作業系統,任務排程是基於優先順序的,且可搶占式的排程方式。同時對於相同優先順序的任務,支援round robin迴圈排程方式 以下簡稱rr排程 vxworks核心三個佇列 tick 佇列,ready 佇列,active 佇列,另外還有乙個佇列涉及到任務,即任務等待資源時所處的佇列,這個佇列可...

crond 計畫任務使用

在ubuntu 測試 12.04 預設crond 服務是開啟的 crontab e 第一次編輯時提示選擇編輯器 vim 3 date time.log 每3分鐘更新一次時間到time.log檔案中 sudo service cron restart 重啟服務 目標版測試 ti平台 如果busybox...