做最优秀的电子开发团队
UCOS
UCOS
UCOS II消息郵箱的使用
十二 15th
具體使用方法與信號量的方式大同小易,點擊這里查看信號量的使用.
首先建立一個OS_EVENT結構體的指針:
OS_EVENT *MSBOX;
然后初始化此結構為消息郵箱的結構:
MSBOX=OSMboxCreate(0);
然后就可以隨時使用此郵箱了.比較常用的有等待消息郵箱與發送消息郵箱:
具體使用方式見以下程式.
#include “stm32f10x_lib.h” #include “includes.h”
OS_STK os_sysinit_stk[60]; OS_STK os_ledshow_stk[60]; OS_STK os_ideluser_stk[60]; OS_STK os_uart_stk[60];
OS_EVENT *UARTBOX; //為串口數據建立一個事件
void os_sysinit_task(void *pdata) { sysinit(); initGPIOA();//
UARTBOX=OSMboxCreate(0); //初始化串口的信箱,值為空
OSTaskSuspend(2); //掛起自已,暫時不讓它運行了 while(1) { } }
void os_ledshow_task(void *pdata) { while(1) { OSTimeDlyHMSM(0,0,0,20); GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); OSTimeDlyHMSM(0,0,1,0); GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); } }
void os_ideluser_task(void *pdata) { INT8U date; while(1) { 更多 >
ucos學習筆記之信號量的使用
十二 1st
臺資黑工廠里寫的,字體為繁體,我也懶的轉換了,反正看的人也不多..
個人理解信號量的作用:任務之間同步的標識,或是對共享資源操作的一個鎖匙(MS有更強大的互斥型的信號量).總之不管那么多,一個任務可以等待一個信號量.任務或是中斷可以發送信號量,等待信號量的任務在收到信號量的時候就繼續運行.可以多個任務同時等待一個信號量,但只有優先級最高的任務得到信號量并執行.中斷不可使用信號量. 簡單的信號量應用 一:先在OS_CFG.H中把OS_SEM打頭的幾個全部定義為1;OS_MAX_EVENTS為所有的事件數量(包括消息隊列等),定義為多少看情況,我設定為20(每加一個就多用掉了近100字節的RAM). 二:定義一個OS_EVENT弄的指針 方法: OS_EVENT *SBSB; 三:在任務中創建一個信號量 方法: SBSB=OSSemCreate(5); 這樣SBSB就是一個指向了新建的一個信號量.后面那個5表示初始值,表示現在有5個信號量
四:接下來就可以在任務中使用信號量了(中斷中只可以發送信號量) 等待信號量方法:OSSemPend(SBSB,0,&ERROR); //等待SBSB這個信號量 后面的一個參數為超時,0表示永不超時,時間單位為OS的TIMESTICK,第三個參數為錯誤代碼 發送信號量方法:很簡單 OSSemPost(SBSB);就收工了
下面是我寫的最簡單應用,STM32用的,放到這里,以免以后忘了.
#include “stm32f10x_lib.h” #include “includes.h”
OS_STK os_sysinit_stk[60]; OS_STK os_ledshow_stk[60]; OS_STK os_ideluser_stk[60];
void os_sysinit_task(void *pdata) { INT8U ERROR; sysinit(); initGPIOA(); while(1) { OSSemPend(SEM01,0,&ERROR); OSTimeDly(40); GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET); OSTimeDly(20); GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET); } }
void os_ledshow_task(void *pdata) { while(1) 更多 >