?? testmbox.c
字號:
#include <string.h>
#include "includes.h"
#include "consol.h"
#define TASK_STK_SIZE 256 /* Size of each task's stacks (# of WORDs) */
#define NO_TASKS 2 /* Number of identical tasks */
static OS_STK TaskStk[NO_TASKS][TASK_STK_SIZE]; /* Tasks stacks */
static OS_EVENT *StrMbox; /*用于傳送字符串的郵箱的指針*/
static OS_EVENT *LockMbox; /*鎖定字符串緩沖區的郵箱的指針(作為二值信號量使用,有消息時未鎖定,無消息時鎖定)*/
//-----------------------------------------------
//
static char * ReadString(char *str, size_t size)
{//讀取一行字符串,不包含末尾的回車符
char c;
int i;
for(i=0; i<size-1; i++, str++)
{
c = CONSOL_GetCh();
if(c == '\r')
break;
else
*str = c;
}
*str = '\0';
return str;
}
static void WriteString(char *str)
{//寫字符串
CONSOL_Printf(str);
}
//-----------------------------------------------
static void Task1 (void *TaskRun)
{
UBYTE err;
char str[128];
for (;*(int*)TaskRun;)
{
OSMboxPend(LockMbox, 0, &err);//等待字符串緩沖區解除鎖定
WriteString("\n\n[Task1]請輸入字符串(以回車結束):");
ReadString(str, sizeof(str));
if(!strcmp(str, "exit"))
*(int*)TaskRun = 0;
OSMboxPost(StrMbox, str);
}
WriteString("\n[Task1]Exit");
OSTaskDel(OS_PRIO_SELF);//刪除自己
}
static void Task2(void *TaskRun)
{
UBYTE err;
char *str;
for(;*(int*)TaskRun;)
{
str = (char*)OSMboxPend(StrMbox, 0, &err);
WriteString("\n[Task2]收到字符串:\"");
WriteString(str);
WriteString("\"");
if(!strcmp(str, "exit"))
*(int*)TaskRun = 0;
OSMboxPost(LockMbox, (void*)-1);//解除鎖定
}
WriteString("\n[Task2]Exit");
OSTaskDel(OS_PRIO_SELF);//刪除自己
}
void RunTestMbox()
{
int Task1Run, Task2Run;
INT8U err;
Task1Run = Task2Run = 1;
WriteString("郵箱的使用 <輸入exit結束測試>\n");
StrMbox = (OS_EVENT*)OSMboxCreate((void *)0);//創建郵箱
LockMbox = (OS_EVENT*)OSMboxCreate((void *)-1);//創建郵箱(作為二值信號量)
OSTaskCreate(Task1, (void *)&Task1Run, (void *)&TaskStk[0][TASK_STK_SIZE - 1], 5);
OSTaskCreate(Task2, (void *)&Task2Run, (void *)&TaskStk[1][TASK_STK_SIZE - 1], 6);
while(Task1Run || Task2Run)
{
OSTimeDly(500);
}
OSTimeDly(500);
OSMboxDel(LockMbox, OS_DEL_NO_PEND, &err);
OSMboxDel(StrMbox, OS_DEL_NO_PEND, &err);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -