main.c
来自「该源码是本人经调试通过的UCOS2操作系统在51单片机上移植好的源代码」· C语言 代码 · 共 91 行
C
91 行
#include <includes.h>
#define MAX_STK_SIZE 64
extern void serial_initial(void);
void TaskStartyya(void *yydata) reentrant;
void TaskStartyyb(void *yydata) reentrant;
void TaskStartyyc(void *yydata) reentrant;
OS_STK TaskStartStkyya[MAX_STK_SIZE+1];//注意:我在ASM文件中设置?STACK空间为40H即64,不要超出范围。
OS_STK TaskStartStkyyb[MAX_STK_SIZE+1];//用户栈多一个字节存长度
OS_STK TaskStartStkyyc[MAX_STK_SIZE+1];
void *MessageStorage[2];
OS_EVENT *Uart0ReviceMbox;
INT8U err,i;
INT8U *cp,*Buf;
INT8U *o,*t,*th,*f;
void main(void)
{
o="one";
t="two";
th="three";
f="four";
OSInit();
serial_initial();
InitTimer0();
Uart0ReviceMbox = OSQCreate(MessageStorage,2);
OSTaskCreate(TaskStartyya, (void *)0, &TaskStartStkyya[0],2);
OSTaskCreate(TaskStartyyb, (void *)0, &TaskStartStkyyb[0],3);
OSTaskCreate(TaskStartyyc, (void *)0, &TaskStartStkyyc[0],4);
OSStart();
}
void TaskStartyya(void *yydata) reentrant
{
yydata=yydata;
for(;;){
cp = (INT8U *)OSQPend(Uart0ReviceMbox, 80, &err); /* 接收数据 */
if(cp==o) {
printf("one\n");
}
else if(cp==t) printf("two\n");
else if (cp==th) printf("three\n");
else if(cp==f) printf("four\n");
else printf("wait timeout\n");
}
}
void TaskStartyyb(void *yydata) reentrant
{
yydata=yydata;
for(;;){
i=P0;
switch(i)
{
case 1: Buf="one";break;
case 2: Buf="two";break;
case 4: Buf="three";break;
case 8: Buf="four";break;
default: Buf="error";break;
}
if((Buf==o)||(Buf==t)||(Buf==th)||(Buf==f)) OSQPost(Uart0ReviceMbox, (void *)Buf);
//OSTimeDly(2*OS_TICKS_PER_SEC);
}
}
void TaskStartyyc(void *yydata) reentrant
{
yydata=yydata;
for(;;){
printf("t3.\n");
//OSTimeDly(3*OS_TICKS_PER_SEC);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?