📄 ex1.c
字号:
#include <includes.h>
#include <cygnalcon.h>
#include <stdio.h>
sbit LED = P0^7; // LED: '1' = ON; '0' = OFF
void TaskA(void*) reentrant;
void TaskB(void*) reentrant;
void TaskC(void*) reentrant;
void TaskD(void*) reentrant;
void TaskE(void*) reentrant;
//void TaskS(void*) reentrant;
void TaskS(void *pdat) ;
OS_STK TaskStartStkS[MaxStkSize];
OS_STK TaskStartStkA[MaxStkSize];//注意:在ASM文件中设置?STACK空间为40H即64。
OS_STK TaskStartStkB[MaxStkSize];
OS_STK TaskStartStkC[MaxStkSize];
OS_STK TaskStartStkD[MaxStkSize];
OS_STK TaskStartStkE[MaxStkSize];
OS_EVENT *TxMbox; //声明一个邮箱
OS_EVENT *CommQ;
void *CommMsg[10];
char code FILEMSG[]="编译日期:" __DATE__ " | 编译时间:" __TIME__ ;
unsigned char code STARTMSG[]={ "\n"
"+------------------------+-----------------------+\n"
"| Starting ...... |\n"
"+------------------------+-----------------------+\n"
"| %s | \n"
"+------------------------+-----------------------+\n"
"| CPU: C8051F060 | OS: UCOS II 2.51 |\n"
"+------------------------+-----------------------+\n"
"| RAM: 20K | ROM: 64K |\n"
"+------------------------+-----------------------+\n"
};
void main(void)
{
INT8U err;
config();
SFRPAGE = UART0_PAGE;
printf (STARTMSG,FILEMSG);
printf ("UCOSII Ver=%d\n",(int)OS_VERSION);
printf ("OSTime=%d,%d\n",(int)(OSTimeGet()/1000000),(int)(OSTimeGet()%1000000));
OSInit();
OSTaskCreate(TaskS, (void *)0, TaskStartStkS,2);
TxMbox = OSMboxCreate((void *)0); //创建一个邮箱
CommQ = OSQCreate(&CommMsg[0], 10); //建立消息队列
err = OSQFlush(CommQ);
OSTimeSet (100);
SFRPAGE = UART0_PAGE;
printf ("UCOSII Verson=%d\n",(int)OSVersion ());
printf ("UCOSII Starting OK ...\n");
InitTimer0();
OSStart();
}
void TaskS(void *pdat)
{
INT8U err;
pdat=pdat;
OSStatInit();
/* err=OSTaskCreateExt(TaskA,
(void *)0,
TaskStartStkA,
8,
8,
TaskStartStkA,
MaxStkSize,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR
);
*/
/* err=OSTaskCreateExt(TaskB,
(void *)0,
TaskStartStkB,
9,
9,
TaskStartStkB,
MaxStkSize,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR
);
*/
OSTaskCreate(TaskA, (void *)0, TaskStartStkA,8);
OSTaskCreate(TaskB, (void *)0, TaskStartStkB,9);
OSTaskCreate(TaskC, (void *)0, TaskStartStkC,5);
OSTaskCreate(TaskD, (void *)0, TaskStartStkD,6);
// OSTaskCreate(TaskE, (void *)0, TaskStartStkE,7);
while(1)
{
printf ("taskstart OK...\n");
OSTaskDel(OS_PRIO_SELF);
}
}
void TaskA(void *pdat) reentrant
{
static int i;
pdat=pdat;
for(;;)
{
printf("TASKA %d\n",i);
if (i==1) OSTaskCreate(TaskE, (void *)0, TaskStartStkE,7);
if (i==5)
{
OSTaskDel(7);
while (OSTaskDelReq(7) != OS_TASK_NOT_EXIST)
{
OSTimeDly(1);
}
}
if (++i>=30) i=0;
if (i==10) OSSchedLock();
if (i==15) OSSchedUnlock ();
OSTimeDly(1*OS_TICKS_PER_SEC);
LED=!LED;
}
}
void TaskB(void *pdat) reentrant
{
static int i;
INT8U err;
void *msg;
pdat=pdat;
for(;;)
{
msg = OSQPend(CommQ, 500,&err);
if (err == OS_NO_ERR)
{ /* 在指定时间内接受到消息 */
printf("TASKB %s ----------------------------------------\n",msg);
}
else
{ /* 在指定的时间内没有接受到指定的消息 */
printf("TASKB 没有接到消息 %d,_____________________________\n",i++);
}
}
}
void TaskC(void *pdat) reentrant
{
static int i;
char txmsg[10];
pdat=pdat;
for(;;)
{
sprintf(txmsg,"msg c %d",i);
OSMboxPost(TxMbox, (void *)&txmsg); /* Send message to Task #5 */
OSQPost(CommQ, "TASKC的消息");
printf("TASKC %d\n",i++);
OSTimeDly(2*OS_TICKS_PER_SEC);
//OSTimeDlyHMSM(0,0,5,00);
}
}
void TaskD(void *pdat) reentrant
{
static int i;
char *rxmsg;
OS_STK_DATA stk_data;
INT32U stk_size;
INT8U err;
pdat=pdat;
for(;;)
{
rxmsg = (char *)OSMboxPend(TxMbox, 0, &err); /* Wait for message from Task #4 */
printf( "TASKD TIME=%06d%06d "
"CPU利用率%02d, "
"邮件接收: c %s, %d\n",
(unsigned int)(OSTimeGet()/1000000), (unsigned int)(OSTimeGet()%1000000),
(int)OSCPUUsage,rxmsg,i++);
/* for (i=8;i<=9;i++)
{
err = OSTaskStkChk(3, &stk_data);
if (err == OS_NO_ERR)
{
stk_size = stk_data.OSFree + stk_data.OSUsed;
printf("TASKD TASKID=%04d,RAM=%04d,Free=%04d,Used=%04d",i,stk_size,stk_data.OSFree , stk_data.OSUsed);
}
else
{
printf("TASKD 检查任务堆栈状态");
}
}
*/
//OSTimeDly(15);
//OSTimeDlyHMSM(0,0,2,000);
}
}
void TaskE(void *pdat) reentrant
{
pdat=pdat;
for(;;)
{
OSMboxPost(TxMbox, "任务E邮件");
//printf("TaskE runing %d\n",i++);
OSQPost(CommQ, "======TASKe的消息 hello ha ha");
OSQPost(CommQ, "******TASKe的消息 hello ha ha");
OSTimeDly(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -