*********************************************************************************************************
* 消息郵箱管理 (MESSAGE MAILBOX MANAGEMENT)
*
* OSMboxAccept () 查看消息郵箱(消息郵箱指針)
* OSMboxCreate () 建立並初始化一個消息郵箱(msg 參數不爲空含內容)
* OSMboxDel () 刪除消息郵箱(消息郵箱指針、刪除條件、出錯代碼指針)
* OSMboxPend () 等待一個消息郵箱函數(消息郵箱指針、允許等待的時鐘節拍、代碼錯誤指針)
* OSMboxPost () 發送消息函數(消息郵箱指針、即將實際發送給任務的消息)
* OSMboxPostOpt () 向郵箱發送一則消息(郵箱指針、消息、條件)
* OSMboxQuery () 查詢一個郵箱的當前狀態(信號量指針、狀態數據結構指針)
*********************************************************************************************************
*********************************************************************************************************
* 內存管理項 (MEMORY MANAGEMENT)
*
* OSMemCreate () 建立並初始化一塊內存區(起始地址、需要的內存塊數目、內存塊大小、返回錯誤的指針)
* OSMemGet () 從內存區分配一個內存塊
* OSMemPut () 釋放一個內存塊,內存塊必須釋放回原先申請的內存區
* OSMemQuery () 得到內存區的信息
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 互斥型信號量項管理 (MUTUAL EXCLUSION SEMAPHORE MANAGEMENT)
*
* OSMutexAccept () 無等待地獲取互斥型信號量[任務不掛起](信號量指針、錯誤代碼)
* OSMutexCreate () 建立並初始化一個互斥型信號量(優先級繼承優先級(PIP)、出錯代碼指針)
* OSMutexDel () 刪除互斥型信號量(信號指針、刪除條件、錯誤指針)
* OSMutexPend () 等待一個互斥型信號量(指針、等待超時時限、出錯代碼指針)
* OSMutexPost () 釋放一個互斥型信號量(互斥型信號量指針)
* OSMutexQuery () 查詢一個互斥型信號量的當前狀態(互斥型信號量指針、狀態數據結構指針)
*********************************************************************************************************
*/
*********************************************************************************************************
* 消息隊列管理 (MESSAGE QUEUE MANAGEMENT)
*
* OSQAccept () 檢查消息隊列中是否已經有需要的消息(消息隊列的指針)
* OSQCreate () 建立一個消息隊列(消息內存區的基地址(指針數組)、消息內存區的大小)
* OSQDel () 刪除一個消息隊列(消息隊列指針、刪除條件、錯誤指針)
* OSQFlush () 清空消息隊列(指向得到消息隊列的指針)
* OSQPend () 任務等待消息隊列中的消息(消息隊列指針、允許等待的時鐘節拍、代碼錯誤指針)
* OSQPost () 向消息隊列發送一則消息FIFO(消息隊列指針、發送的消息)
* OSQPostFront () 向消息隊列發送一則消息LIFO(消息隊列指針、發送的消息)
* OSQPostOpt () 向消息隊列發送一則消息LIFO(消息隊列指針、發送的消息、發送條件)
* OSQQuery () 查詢一個消息隊列的當前狀態(信號量指針、狀態數據結構指針)
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 信號量管理 (SEMAPHORE MANAGEMENT)
*
* OSSemAccept() 無條件地等待請求一個信號量函數
* OSSemCreate() 建立並初始化一個信號量(輸入一個信號量值)
* OSSemDel() 刪除一個信號量(信號指針、刪除條件、錯誤指針)
* OSSemPend () 等待一個信號量函數(信號量指針、允許等待的時鐘節拍、代碼錯誤指針)
* OSSemPost () 發出一個信號量函數(信號量指針)
* OSSemQuery () 查詢一個信號量的當前狀態(信號量指針、狀態數據結構指針)
*********************************************************************************************************
*/
*********************************************************************************************************
* 任務管理 (TASK MANAGEMENT)
*
* OSTaskChangePrio () 改變一個任務的優先級(任務舊的優先級、任務新的優先級)
* OSTaskCreate () 建立任務(任務代碼指針、傳遞參數指針、分配任務堆棧棧頂指針、任務優先級)
* OSTaskCreateExt () 建立擴展任務(任務代碼指針/傳遞參數指針/分配任務堆棧棧頂指針/分配任務優先級
* //(未來的)優先級標識(與優先級相同)/分配任務堆棧棧底指針/指定堆棧的容量(檢驗用)
* //指向用戶附加的數據域的指針/建立任務設定選項)
* OSTaskDel () 刪除任務(任務的優先級)
* OSTaskDelReq () 請求一個任務刪除其它任務或自身?(任務的優先級)
* OSTaskResume () 喚醒一個用OSTaskSuspend()函數掛起的任務(任務的優先級)
* OSTaskStkChk () 檢查任務堆棧狀態(任務優先級、檢驗堆棧數據結構)
* OSTaskSuspend () 無條件掛起一個任務(任務優先級)
* OSTaskQuery () 獲取任務信息(任務指針、保存數據結構指針)
*********************************************************************************************************
*/
*********************************************************************************************************
* 時鐘管理項 (TIME MANAGEMENT)
*
* OSTimeDly () 任務延時函數(時鐘節拍數)
* OSTimeDlyHMSM () 將一個任務延時若干時間(設定時、分、秒、毫秒)
* OSTimeDlyResume () 喚醒一個用OSTimeDly()或OSTimeDlyHMSM()函數的任務(優先級)
* OSTimeGet () 獲取當前系統時鐘數值
* OSTimeSet () 設置當前系統時鐘數值
*********************************************************************************************************
*/
創建任務 :
INT8U OSTaskCreate (void (*task)(void *p_arg),
void *p_arg,
OS_STK *ptos,
INT8U prio)
返回值爲錯誤信息.以下不說明的默認都是錯誤信息;
擴展:
INT8U OSTaskCreateExt (void (*task)(void *p_arg),
void *p_arg,
OS_STK *ptos,
INT8U prio,
INT16U id,
OS_STK *pbos,
INT32U stk_size,
void *pext,
INT16U opt)
掛起:
INT8U OSTaskSuspend (INT8U prio)
恢復:
INT8U OSTaskResume (INT8U prio)
改變優先級:
INT8U OSTaskChangePrio (INT8U oldprio,
INT8U newprio)
任務刪除:
INT8U OSTaskDel (INT8U prio)
請求刪除任務:
INT8U OSTaskDelReq (INT8U prio)
查詢任務信息: 查詢信息都需要先定義一個指定的類型變量或者結構體來儲存查詢信息.
INT8U OSTaskQuery (INT8U prio,
OS_TCB *p_task_data)
臨界狀態,和中斷任務調度
OS_ENTER_CRITICAL() //進入臨界 關中斷
OS_EXIT_CRITICAL() //退出臨界 開中斷
OSIntEnter() //中斷中使用 OSIntNesting+1
OSIntExit() //退出中斷時使用 OSIntNesting-1 並調度
OSSchedLock() //任務調度器上鎖 OSLockNesting+1
OSSchedUnlock() //任務調度器解鎖 OSLockNesting-1
#define OS_TASK_SW() OSCtxSw()
OSIntCtxSW()與OSCtxSw()類似,只是因爲在中斷中使用所以,少了入棧等斷點保護步驟.因爲OSIntCtxSW()是中斷函數中使用的調度.保護步驟在中斷已經完成.
延時函數
void OSTimeDly (INT32U ticks); //任務延時ticks次心跳
INT8U OSTimeDlyHMSM (INT8U hours,
INT8U minutes,
INT8U seconds,
INT16U ms); //延時具體時間.最小單位(1000/OS_TICKS_PER_SEC)ms
INT8U OSTimeDlyResume (INT8U prio); //取消任務延時
獲取時間
INT32U OSTimeGet (void); //OSStart()時爲0,心跳一次+1
void OSTimeSet (INT32U ticks) //設置
信號量
OS_EVENT *SEM;
OS_EVENT *OSSemCreate (INT16U cnt);
void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr); //等待信號量需要先創建一個變量存放*perr 錯誤信息
INT16U OSSemAccept (OS_EVENT *pevent); //等待失敗繼續運行
INT8U OSSemPost (OS_EVENT *pevent); //發送信號量
OS_EVENT *OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U *perr);//刪除信號量
INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data); //查詢信號量 需先創建OS_SEM_DATA結構體變量存儲信息.
互斥信號量
OS_EVENT *OSMutexCreate (INT8U prio, INT8U *perr) ;//創建
void OSMutexPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr);//等待請求
INT8U OSMutexPost (OS_EVENT *pevent) ;//發送
INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *p_mutex_data); //查詢
OS_EVENT *OSMutexDel (OS_EVENT *pevent, INT8U opt, INT8U *perr) ; //刪除
BOOLEAN OSMutexAccept (OS_EVENT *pevent, INT8U *perr); //無等待請求
郵箱
OS_EVENT * BOX;
OS_EVENT *OSMboxCreate (void *pmsg); //*pmsg消息指針 返回值爲郵箱指針
INT8U OSMboxPost (OS_EVENT *pevent, void *pmsg) ; //*pevent郵箱指針 *pmsg消息指針
INT8U OSMboxPostOpt (OS_EVENT *pevent, void *pmsg, INT8U opt);//廣播 opt,OS_POST_OPT_NONE和post一樣.OS_POST_OPT_BROADCAST,廣播,OS_POST_OPT_NO_SCHED只發送不調度.
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr);
void *OSMboxAccept (OS_EVENT *pevent); //無等待 返回值爲消息指針
INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data);
OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *perr); //opt:OS_DEL_NO_PEND:沒有被等待刪除.OS_DEL_ALWAYS 強制刪除.
消息隊列
OS_EVENT *OSQCreate (void **start, INT16U size);
void *OSQAccept (OS_EVENT *pevent, INT8U *perr);
OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *perr);
void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr);
INT8U OSQPost (OS_EVENT *pevent, void *pmsg);
INT8U OSQPostFront (OS_EVENT *pevent, void *pmsg); //後入先出
INT8U OSQPostOpt (OS_EVENT *pevent, void *pmsg, INT8U opt);//廣播
INT8U OSQFlush (OS_EVENT *pevent); //清空隊列
INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *p_q_data); //查詢
信號量集
OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *perr); //創建
OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *perr);//請求
OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *perr); //無等待
OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *perr); //發送
OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp, INT8U *perr); //查詢
OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, INT8U opt, INT8U *perr); //