對任務的操作使用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...