📄 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 + -