📄
字号:
/**************************************************************************
* *
* PROJECT : ARM port for UCOS-II *
* *
* MODULE : EX1.c *
* *
* AUTHOR : Michael Anburaj *
* URL : http://geocities.com/michaelanburaj/ *
* EMAIL: michaelanburaj@hotmail.com *
* *
* PROCESSOR : Any processor *
* *
* IDE : Any IDE *
* *
* DESCRIPTION : *
* This is a sample code to test UCOS-II. *
* *
**************************************************************************/
#include "includes.h"
#include "consol.h"
/* ********************************************************************* */
/* Global definitions */
/* ********************************************************************* */
/* File local definitions */
#define TASK_STK_SIZE 256 /* Size of each task's stacks (# of WORDs) */
#define NO_TASKS 10 /* Number of identical tasks */
OS_STK TaskStartStk[TASK_STK_SIZE];
/* ********************************************************************* */
/* Local functions */
//开始
//#define TASK_STK_SIZE 2048 /*堆栈大小*/
//#define N_TASKS 2 /*任务数量*/
//OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /*任务堆栈*/
OS_EVENT *StrMbox; /*用于传送字符串的邮箱的指针*/
OS_EVENT *LockMbox; /*锁定字符串缓冲区的邮箱的指针(作为二值信号量使用,有消息时未锁定,无消息时锁定)*/
//-----------------------------------------------
//
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;
}
void WriteString(char *str)
{//写字符串
CONSOL_Printf(str);
}
//-----------------------------------------------
void Task1 (void *data)
{
UBYTE err;
char str[128];
data=data;
for (;;)
{
OSMboxPend(LockMbox, 0, &err);//等待字符串缓冲区解除锁定
WriteString("\n\n[Task1]请输入字符串(以回车结束):");
ReadString(str, sizeof(str));
OSMboxPost(StrMbox, str);
}
}
void Task2(void *data)
{
UBYTE err;
char *str;
data=data;
for(;;)
{
str = (char*)OSMboxPend(StrMbox, 0, &err);
WriteString("\n[Task2]收到字符串:\"");
WriteString(str);
WriteString("\"\n");
OSMboxPost(LockMbox, (void*)-1);//解除锁定
}
}
void Run()
{
StrMbox = (OS_EVENT*)OSMboxCreate((void *)0);//创建邮箱
LockMbox = (OS_EVENT*)OSMboxCreate((void *)-1);//创建邮箱(作为二值信号量)
OSTaskCreate(Task1, (void *)0, (void *)&TaskStk[0][TASK_STK_SIZE - 1], 5);
OSTaskCreate(Task2, (void *)0, (void *)&TaskStk[1][TASK_STK_SIZE - 1], 6);
}
void TaskStart (void *data)
{
data = data; /* Prevent compiler warning */
CONSOL_Printf("uC/OS-II, The Real-Time Kernel ARM Ported version\n");
CONSOL_Printf("邮箱的使用\n");
OSStatInit(); /* Initialize uC/OS-II's statistics */
Run();
while(1)
{
OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */
}
}
/* ********************************************************************* */
/* Global functions */
void APP_vMain (void)
{
OSInit(); /* Initialize uC/OS-II */
// RandomSem = OSSemCreate(1); /* Random number semaphore */
OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 0);
FRMWRK_vStartTicker(OS_TICKS_PER_SEC); /* os_cfg.h */
OSStart(); /* Start multitasking */
}
/* ********************************************************************* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -