




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選文檔常用函數手冊20151106任務管理 1 OSTaskCreate() 建立一個新任務。任務的建立可以在多任務環境啟動之前,也可以在正在運行的任務中建立。中斷處理程序中不能建立任務。一個任務可以為無限循環的結構。函數原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);參數說明:task 是指向任務代碼首地址的指針。 pdata 指向一個數據
2、結構,該結構用來在建立任務時向任務傳遞參數。 ptos is a pointer to the task's top of stack. If the configuration constant OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high memory to low memory). 'pstk' will thus point to the highest
3、 (valid) memory location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will point to the lowest memory location of the stack and the stack will grow with increasing memory locations. prio is the task's priority. A unique priority
4、 MUST be assigned to each task and the lower the number, the higher the priority.返回值:OSTaskCreate() 的返回值為下述之一:* OS_NO_ERR:函數調用成功。* OS_PRIO_EXIST:具有該優先級的任務已經存在。* OS_PRIO_INVALID:參數指定的優先級大于OS_LOWEST_PRIO。* OS_NO_MORE_TCB:系統中沒有OS_TCB可以分配給任務了。2 OSTaskSuspend() 無條件掛起一個任務。調用此函數的任務也可以傳遞參數
5、 OS_PRIO_SELF,掛起調用任務本身。當前任務掛起后,只有其他任務才能喚醒被掛起的任務。任務掛起后,系統會重新進行任務調度,運行下一個優先級最高的就緒任務。喚醒掛起任務需要調用函數OSTaskResume()。 任務的掛起是可以疊加到其他操作上的。例如,任務被掛起時正在進行延時操作,那么任務的喚醒就需要兩個條件:延時的結束以及其他任務的喚醒操作。又如,任務被掛起時正在等待信號量,當任務從信號量的等待對列中清除后也不能立即運行,而必須等到被喚醒后。函數原型:INT8U OSTaskSuspend(INT8U prio);參數說明:prio為指定要獲取掛
6、起的任務優先級,也可以指定參數 OS_PRIO_SELF,掛起任務本身。此時,下一個優先級最高的就緒任務將運行。返回值:OSTaskSuspend() 的返回值為下述之一:* OS_NO_ERR:函數調用成功。* OS_TASK_SUSPEND_IDLE:試圖掛起C/OS-II中的空閑任務(Idle task)。此為非法操作。* OS_PRIO_INVALID:參數指定的優先級大于 OS_LOWEST_PRIO 或沒有設定 OS_PRIO_SELF 的值。* OS_TASK_SUSPEND_PRIO:要掛起的任務不存在。3 OSTaskResume() 喚醒
7、一個用 OSTaskSuspend() 函數掛起的任務。OSTaskResume() 也是唯一能“解掛”掛起任務的函數。函數原型:INT8U OSTaskResume(INT8U prio);參數說明:prio指定要喚醒任務的優先級。返回值:OSTaskResume() 的返回值為下述之一:* OS_NO_ERR:函數調用成功。* OS_TASK_RESUME_PRIO:要喚醒的任務不存在。* OS_TASK_NOT_SUSPENDED:要喚醒的任務不在掛起狀態。* OS_PRIO_INVALID:參數指定的優先級大于或等于OS_LOWEST_PRIO。信號量1 OSSemCreate()
8、160; 該函數建立并初始化一個信號量,信號量的作用如下: * 允許一個任務和其他任務或者中斷同步 * 取得設備的使用權 * 標志事件的發生函數原型:OS_EVENT *OSSemCreate(INT16U value);參數說明:value 參數是所建立的信號量的初始值,可以取0到65535之間的任何值。返回值:OSSemCreate() 函數返回指向分配給所建立的信號量的控制塊的指針。如果沒有可用的控制塊,OSSemCreate() 函數返回空指針。2 OSS
9、emPend() 該函數用于任務試圖取得設備的使用權、任務需要和其他任務或中斷同步、任務需要等待特定事件的發生的場合。如果任務調用OSSemPend() 函數時,信號量的值大于零,OSSemPend() 函數遞減該值并返回該值。如果調用時信號量值等于零,OSSemPend() 函數將任務加入該信號量的等待隊列。OSSemPend() 函數掛起當前任務直到其他的任務或中斷設置信號量或超出等待的預期時間。如果在預期的時鐘節拍內信號量被設置,C/OS-默認讓最高優先級的任務取得信號量并回到就緒狀態。一個被OSTaskSuspend() 函數掛起的任務也可以接受信號
10、量,但這個任務將一直保持掛起狀態直到通過調用OSTaskResume() 函數恢復該任務的運行。函數原型:void OSSemPend ( OS_EVNNT *pevent, INT16U timeout, int8u *err );參數說明:pevent 是指向信號量的指針。該指針的值在建立該信號量時可以得到。(參考OSSemCreate() 函數)。 timeout 允許一個任務在經過了指定數目的時鐘節拍后還沒有得到需要的信號量時恢復就緒狀態。如果該值為零表示任務將持續地等待信號量,最大的等待時
11、間為65535個時鐘節拍。這個時間長度并不是非常嚴格的,可能存在一個時鐘節拍的誤差。 err 是指向包含錯誤碼的變量的指針,返回的錯誤碼可能為下述幾種: * OS_NO_ERR :信號量不為零。 * OS_TIMEOUT :信號量沒有在指定
12、數目的時鐘周期內被設置。 * OS_ERR_PEND_ISR :從中斷調用該函數。雖然規定了不允許從中斷調用該函數,但C/OS-仍然包含了檢測這種情況的功能。 * OS_ERR_EVENT_TYPE :pevent 不是指向信號量的指針。返回值:無3 OSSemPost() 該函數用于設置指定的信號
13、量。如果指定的信號量是零或大于零,OSSemPost() 函數遞增該信號量的值并返回。如果有任何任務在等待該信號量,則最高優先級的任務將得到信號量并進入就緒狀態。任務調度函數將進行任務調度,決定當前運行的任務是否仍然為最高優先級的就緒任務。函數原型:INT8U OSSemPost(OS_EVENT *pevent);參數說明:pevent 是指向信號量的指針。該指針的值在建立該信號量時可以得到。(參考OSSemCreate() 函數)。返回值:OSSemPost() 函數的返回值為下述之一:* OS_NO_ERR :信號量被成功地設置* OS_SEM_OVF :信號量的值溢出* OS_ERR_
14、EVENT_TYPE :pevent 不是指向信號量的指針時間1 OSTimeDly() 該函數用于將一個任務延時若干個時鐘節拍。如果延時時間大于0,系統將立即進行任務調度。延時時間的長度可從0到65535個時鐘節拍。延時時間0表示不進行延時,函數將立即返回調用者。延時的具體時間依賴于系統每秒鐘有多少個時鐘節拍(由文件OS_CFG.H中的OS_TICKS_PER_SEC宏來設定)。函數原型:void OSTimeDly (INT16U ticks);參數說明:ticks 為要延時的時鐘節拍數。返回值:無2 OSTimeDlyHMSM()
15、; 該函數用于將一個任務延時若干時間。延時的單位是小時、分、秒、毫秒。調用 OSTimeDlyHMSM() 后,如果延時時間不為0,系統將立即進行任務調度。函數原型: INT8U OSTimeDlyHMSM (INT8U hours,INT8U minutes,INT8U seconds,INT16U milli);參數說明:hours 為延時小時數,范圍從0-255。 minutes 為延時分鐘數,范圍從0-59。
16、 seconds 為延時秒數,范圍從0-59 milli 為延時毫秒數,范圍從0-999。 需要說明的是,操作系統在處理延時操作時都是以時鐘節拍為單位的,實際的延時時間是時鐘節拍的整數倍。如果系統時鐘節拍的間隔是10ms,而設定延時為5ms的話,則不會產生延時操作;而如果設定延時為15ms,則實際的延時是兩個時鐘節拍,也就是20ms。返回值:OSTimeDlyHMSM() 的返回值為下述之一:* OS_NO_ERR:函數調用成功。* OS_
17、TIME_INVALID_MINUTES:參數錯誤,分鐘數大于59。* OS_TIME_INVALID_SECONDS:參數錯誤,秒數大于59。* OS_TIME_INVALID_MILLI:參數錯誤,毫秒數大于999。* OS_TIME_ZERO_DLY:四個參數全為0。內存管理1 OSMemCreate() 該函數建立并初始化一個用于動態內存分配的區域,該內存區域包含指定數目的、大小確定的內存塊。應用可以動態申請這些內存塊并在用完后將其釋放回這個內存區域。該函數的返回值就是指向這個內存區域控制塊的指針,并作為OSMemGet(),OSMemPut(),O
18、SMemQuery() 等相關調用的參數。函數原型:OS_MEM *OSMemCreate( void *addr, INT32U nblks, INT32U blksize, INT8U *err );參數說明:addr 建立的內存區域的起始地址。可以使用靜態數組或在系統初始化時使用 malloc() 函數來分配這個區域的空間。 nblks 內存塊的數目。每一個內存區域最少需要定義兩個內存塊。 blks
19、ize 每個內存塊的大小,最小應該能夠容納一個指針變量。 err 是指向包含錯誤碼的變量的指針。Err可能是如下幾種情況: * OS_NO_ERR :成功建立內存區域。 * OS_MEM_INVALID_ADDR :非法地址,即地址為空指針。
20、; * OS_MEM_INVALID_PART :沒有空閑的內存區域。 * OS_MEM_INVALID_BLKS :沒有為內存區域建立至少兩個內存塊。 * OS_MEM_INVALID_SIZE :內存塊大小不足以容納一個指針變量。返回值:OSMemCreate
21、() 函數返回指向所創建的內存區域控制塊的指針。如果創建失敗,函數返回空指針。2 OSMemGet() 該函數用于從內存區域分配一個內存塊。用戶程序必須知道所建立的內存塊的大小,并必須在使用完內存塊后釋放它。可以多次調用 OSMemGet() 函數。它的返回值就是指向所分配內存塊的指針,并作為 OSMemPut() 函數的參數。函數原型:void *OSMemGet(OS_MEM *pmem, INT8U *err);參數說明:pmem 是指向內存區域控制塊的指針,可以從 OSMemCreate() 函數的返回值中得到。 &
22、#160; err 是指向包含錯誤碼的變量的指針。Err可能是如下情況: * OS_NO_ERR :成功得到一個內存塊。 * OS_MEM_NO_FREE_BLKS :內存區域中已經沒有足夠的內存塊。返回值:OSMemGet() 函數返回指向所分配內存塊的指針。如果沒有可分配的內存塊,O
23、SMemGet() 函數返回空指針。3 OSMemPut() 該函數用于釋放一個內存塊,內存塊必須釋放回它原先所在的內存區域,否則會造成系統錯誤。函數原型:INT8U OSMemPut (OS_MEM *pmem, void *pblk);參數說明:pmem 是指向內存區域控制塊的指針,可以從 OSMemCreate() 函數的返回值中得到。 pblk 是指向將被釋放的內存塊的指針。返回值:OSMemPut() 函數的返回值為下述之一:* OS_NO_ERR :成
24、功釋放內存塊* OS_MEM_FULL :內存區域已滿,不能再接受更多釋放的內存塊。這種情況說明用戶程序出現了錯誤,釋放了多于用 OSMemGet() 函數得到的內存塊。4 OSMemQuery() 該函數用于得到內存區域的信息。函數原型:INT8U OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *pdata);參數說明:pmem 是指向內存區域控制塊的指針,可以從 OSMemCreate() 函數的返回值中得到。 pdata 是一個指
25、向 OS_MEM_DATA 數據結構的指針,該數據結構包含了以下的域:void OSAddr; /* 指向內存區域起始地址的指針 */void OSFreeList; /* 指向空閑內存塊列表起始地址的指針 */INT32U OSBlkSize;
26、60; /* 每個內存塊的大小 */INT32U OSNBlks; /* 該內存區域中的內存塊總數 */INT32U OSNFree; /* 空閑的內存塊數目 */INT32U OSNUsed;
27、; /* 已使用的內存塊數目 */消息隊列1 OSQCreate() 該函數用于建立一個消息隊列。任務或中斷可以通過消息隊列向一個或多個任務發送消息。消息的含義是和具體的應用密切相關的。函數原型:OS_EVENT *OSQCreate (void *start, INT8U size);參數說明:start 是消息內存區的首地址,消息內存區是一個指針數組。 size 是消息內存區的大小。返回值:OSQCreate() 函數返回一個指向消息隊
28、列控制塊的指針。如果沒有空閑的控制塊,OSQCreate() 函數返回空指針。2 OSQPend() 該函數用于任務等待消息。消息通過中斷或任務發送給需要的任務。消息是一個指針變量,在不同的應用中消息的具體含義不同。如果調用 OSQPend() 函數時隊列中已經存在消息,那么該消息被返回給 OSQPend() 函數的調用者,該消息同時從隊列中清除。如果調用 OSQPend() 函數時隊列中沒有消息,OSQPend() 函數掛起調用任務直到得到消息或超出定義的超時時間。如果同時有多個任務等待同一個消息,C/OS-默認最高優先級的任務取得消息。一個由 OSTas
29、kSuspend() 函數掛起的任務也可以接受消息,但這個任務將一直保持掛起狀態直到通過調用 OSTaskResume() 函數恢復任務的運行。函數原型:void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err);參數說明:pevent 是指向消息隊列的指針,該指針的值在建立該隊列時可以得到。(參考 OSQCreate() 函數)。 timeout 允許一個任務以指定數目的時鐘節拍等待消息。超時后如果還沒有得到消息則恢復成就緒狀態。如果該
30、值設置成零則表示任務將持續地等待消息,最大的等待時間為65535個時鐘節拍。這個時間長度并不是非常嚴格的,可能存在一個時鐘節拍的誤差。 err 是指向包含錯誤碼的變量的指針。OSQPend() 函數返回的錯誤碼可能為下述幾種: * OS_NO_ERR :消息被正確地接受。
31、160; * OS_TIMEOUT :消息沒有在指定的時鐘周期數內接收到消息。 * OS_ERR_PEND_ISR :從中斷調用該函數。雖然規定了不允許從中斷中調用該函數,但C/OS-仍然包含了檢測這種情況的功能。 * OS_ERR_EVENT_TYPE :pevent 不是指向消息隊列的指針。返回值:OSQP
32、end() 函數返回取得的消息并將 *err 置為 OS_NO_ERR。如果沒有在指定數目的時鐘節拍內接受到消息,OSQPend() 函數返回空指針并將 *err 設置為 OS_TIMEOUT。3 OSQPostFront() 該函數用于向消息隊列發送消息。OSQPostFront() 函數和 OSQPost() 函數非常相似,不同之處在于 OSQPostFront() 函數將發送的消息插到消息隊列的最前端。也就是說,OSQPostFront() 函數使得消息隊列按照后入先出(LIFO)的方式工作,而不是先入先出(FIFO)。消息是一個指針長度的變量,在不同
33、的應用中消息的含義也可能不同。如果隊列中已經存滿消息,則此調用將返回錯誤碼。OSQPost() 函數也是如此。在調用此函數時如果有任何任務在等待隊列中的消息,則最高優先級的任務將得到這個消息。如果等待消息的任務優先級比發送消息的任務優先級高,那么高優先級的任務在得到消息后將立即搶占當前任務執行,也就是說,將發生一次任務切換。函數原型:INT8U OSQPostFront(OS_EVENT *pevent, void *msg);參數說明:pevent 是指向即將接收消息的消息隊列的指針。該指針的值在建立隊列時可以得到。(參考 OSQCreate() 函數)。 msg 是
34、即將發送的消息的指針。不允許傳遞一個空指針。返回值:OSQPostFront() 函數的返回值為下述之一:* OS_NO_ERR :消息成功地放到消息隊列中。* OS_Q_FULL :消息隊列已滿。* OS_ERR_EVENT_TYPE :pevent 不是指向消息隊列的指針。4 OSQPost() 該函數用于向消息隊列發送消息。消息是一個指針長度的變量,在不同的應用中消息的含義也可能不同。如果隊列中已經存滿消息,則此調用返回錯誤碼。如果有任何任務在等待隊列中的消息,則最高優先級的任務將得到這個消息。如果等待消息的任務優先級比發送消息的任務優先級高,那么高優
35、先級的任務將在得到消息后立即搶占當前任務執行,也就是說,將發生一次任務切換。消息是以先入先出(FIFO)方式進入隊列的,即先進入隊列的消息先被傳遞給任務。函數原型:INT8U OSQPost(OS_EVENT *pevent, void *msg);參數說明:pevent 是指向即將接受消息的消息隊列的指針。該指針的值在建立隊列時可以得到。(參考 OSQCreate() 函數)。 msg 是即將發送給隊列的消息。不允許傳遞一個空指針。返回值:OSQPost() 函數的返回值為下述之一:* OS_NO
36、_ERR :消息成功地放到消息隊列中。* OS_Q_FULL :消息隊列已滿。* OS_ERR_EVENT_TYPE :pevent 不是指向消息隊列的指針。5 OSQFlush() 該函數用于清空消息隊列。函數原型:INT8U *OSQFlush(OS_EVENT *pevent);參數說明:pevent 是指向消息隊列的指針。該指針的值在建立隊列時可以得到。(參考 OSQCreate() 函數)。返回值:OSQFlush() 函數的返回值為下述之一:* OS_NO_ERR :消息隊列被成功清空* OS_ERR_EVENT_TYPE :試圖清除不是消息隊列的對象6 OSQQuery() 該函數用來取得消息隊列的信息。用戶程序必須建立一個 OS_Q_DA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六年級學困生技能提升輔導計劃
- 2024-2025小學語文教研組團隊建設計劃
- 小學體育教師備課計劃
- 校企合作中德育人員職責劃分
- 公共服務企業文化學習心得體會
- 雙語學校推廣普通話工作總結范文
- 校園學生健康管理措施
- 文化館裝飾裝修成品保護措施總結
- 工業廠房腳手架搭設安全措施
- 高三歷史閱讀理解提升計劃
- 手工編織團建活動方案
- GB 17051-2025二次供水設施衛生規范
- 四川省眉山市東坡區 2024-2025學年七年級下學期期末道德與法治試卷(含答案)
- 2025年廣西公需科目答案01
- JJF1033-2023計量標準考核規范
- 三級安全教育登記卡(新)
- 手術報告審批單
- 《專業導論光電信息科學與工程》教學大綱
- 廣東省湛江市各縣區鄉鎮行政村村莊村名明細
- 少兒美術國畫- 少兒希望 《紫藤課件》
- 建立良好的同伴關系-課件-高二心理健康
評論
0/150
提交評論