📄 light_struct.c
字号:
#include <includes.h>
#include <math.h>
#include "stdio.h"
#include "stdlib.h"
void TaskStartyya(void *yydata) ;
void TaskStartyyb(void *yydata) ;
void TaskStartyyc(void *yydata) ;
void TaskStartyyd(void *yydata) ;
OS_STK TaskStartStkyya[MaxStkSize];//注意:我在ASM文件中设置?STACK空间为40H即64。
OS_STK TaskStartStkyyb[MaxStkSize];
OS_STK TaskStartStkyyc[MaxStkSize];
OS_STK TaskStartStkyyd[MaxStkSize];
sbit LED0 = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;
sbit LED4 = P3^4;
sbit LED5 = P3^5;
sbit LED6 = P3^2;
sbit LED7 = P3^3;
OS_EVENT *sem;
OS_EVENT *CommQ1,*CommQ2,*CommQ3;
void *CommMsg0[10];
void *CommMsg1[10];
void *CommMsg2[10];
struct num_data
{
unsigned int data1;
unsigned int data2;
unsigned int data3;
};
void main(void)
{
OSInit();
InitTimer0();
InitSerial();
InitSerialBuffer();
sem = OSSemCreate(1);
CommQ1 = OSQCreate(&CommMsg0[0],10);
CommQ2 = OSQCreate(&CommMsg1[0],10);
OSTaskCreate(TaskStartyya, (void *)0, &TaskStartStkyya[0],8);
OSTaskCreate(TaskStartyyb, (void *)0, &TaskStartStkyyb[0],7);
OSTaskCreate(TaskStartyyc, (void *)0, &TaskStartStkyyc[0],5);
OSTaskCreate(TaskStartyyd, (void *)0, &TaskStartStkyyd[0],10);
OSStart();
}
/*
void TaskStartyya(void *yydata) reentrant
{
yydata=yydata;
clrscr();
PrintStr("\n\t\t*******************************\n");
PrintStr("\t\t* Hello! The world. *\n");
PrintStr("\t\t*******************************\n\n\n");
for(;;)
{
PrintStr("\tAAAAAA111111 is active.\n");
OSTimeDly(OS_TICKS_PER_SEC);
}
}
void TaskStartyyb(void *yydata) reentrant
{
yydata=yydata;
for(;;)
{
PrintStr("\tBBBBBB333333 is active.\n");
OSTimeDly(3*OS_TICKS_PER_SEC);
}
}
void TaskStartyyc(void *yydata) reentrant
{
yydata=yydata;
for(;;)
{
PrintStr("\tCCCCCC666666 is active.\n");
OSTimeDly(6*OS_TICKS_PER_SEC);
}
}
void TaskStartyy(void *yydata)
{
INT8U err;
unsigned char *msg;
while(1)
{
msg = OSSemPend(CommQ, 0, &err);
LED0=1;
OSTimeDly(6*OS_TICKS_PER_SEC);
LED0=0;
OSTimeDly(6*OS_TICKS_PER_SEC);
}
}
*/
void TaskStartyya(void *yydata)
{
INT8U err;
int i;
static struct num_data ddd;
yydata =yydata;
while(1)
{
/*ddd.data1=rand()%3+1;
ddd.data2=rand()%3;
ddd.data3=ddd.data1+ddd.data2;*/
ddd.data1=8;
for(i=0;i<16;i++)
{
switch(i)
{
case 0: ddd.data2=0;break;
case 1: ddd.data2=1;break;
case 2: ddd.data2=3;break;
case 3: ddd.data2=7;break;
case 4: ddd.data2=15;break;
case 5: ddd.data2=31;break;
case 6: ddd.data2=63;break;
case 7: ddd.data2=127;break;
case 8: ddd.data2=255;break;
case 9: ddd.data2=128;break;
case 10: ddd.data2=192;break;
case 11: ddd.data2=224;break;
case 12: ddd.data2=240;break;
case 13: ddd.data2=248;break;
case 14: ddd.data2=252;break;
case 15: ddd.data2=254;break;
case 16: ddd.data2=255;break;
}
ddd.data3=ddd.data1+ddd.data2;
OSTimeDly(200);
err = OSQPost(CommQ1,&ddd);
}
}
}
void TaskStartyyb(void *yydata)
{
INT8U err;
static struct num_data *pdat_taskb;
static unsigned char buf0,buf1,buf2;
yydata =yydata;
while(1)
{
pdat_taskb = OSQPend(CommQ1, 0, &err);
buf0 = pdat_taskb->data1;
buf1 = pdat_taskb->data2;
buf2 = pdat_taskb->data3;
OSSemPend(sem, 0, &err);
/* switch(buf0)
{ case 0: PrintStr("0\n"); break;
case 1: PrintStr("1\n"); break;
case 2: PrintStr("2\n"); break;
case 3: PrintStr("3\n"); break;
}
switch(buf1)
{
case 0: PrintStr("0\n"); break;
case 1: PrintStr("1\n"); break;
case 2: PrintStr("2\n"); break;
}
switch(buf2)
{
case 0: PrintStr("0\n"); break;
case 1: PrintStr("1\n"); break;
case 2: PrintStr("2\n"); break;
case 3: PrintStr("3\n"); break;
case 4: PrintStr("4\n"); break;
case 5: PrintStr("5\n"); break;
} */
PrintStr("TaskB\n\n\n");
OSSemPost(sem);
err = OSQPost(CommQ2,pdat_taskb);
}
}
void TaskStartyyc(void *yydata)
{ INT8U err;
static unsigned int buf0_taskc,buf1_taskc,buf2_taskc;
static struct num_data *pdat_taskc;
yydata=yydata;
while(1)
{
pdat_taskc= OSQPend(CommQ2, 0, &err);
buf0_taskc = pdat_taskc->data1;
buf1_taskc = pdat_taskc->data2;
buf2_taskc = pdat_taskc->data3;
if(buf2_taskc!=buf0_taskc+buf1_taskc) PrintStr("Erro\n");
else { OSSemPend(sem, 0, &err);
/*switch(buf0_taskc)
{
case 1: if(buf1_taskc) LED1=0;else LED1=1; PrintStr("LED1\n");break;
case 2: if(buf1_taskc) LED2=0;else LED2=1; PrintStr("LED2\n");break;
case 3: if(buf1_taskc) LED3=0;else LED2=1; PrintStr("LED3\n");break;
}*/
if(buf1_taskc & 1) {LED0=0; PrintStr("LED0\n"); }
else LED0=1;
if(buf1_taskc & 2) {LED1=0; PrintStr("LED1\n");}
else LED1=1;
if(buf1_taskc & 4) {LED2=0;PrintStr("LED2\n"); }
else LED2=1;
if(buf1_taskc & 8) {LED3=0; PrintStr("LED3\n");}
else LED3=1;
if(buf1_taskc & 16) {LED4=0; PrintStr("LED4\n");}
else LED4=1;
if(buf1_taskc & 32) {LED5=0; PrintStr("LED5\n");}
else LED5=1;
if(buf1_taskc & 64) {LED6=0; PrintStr("LED6\n");}
else LED6=1;
if(buf1_taskc & 128) {LED7=0; PrintStr("LED7\n");}
else LED7=1;
PrintStr("TaskC\n\n\n");
OSSemPost(sem);
}
}
}
void TaskStartyyd(void *yydata)
{
INT8U err;
static struct num_data *pdat_taskd;
static unsigned char buf0_taskd,buf1_taskd,buf2_taskd;
yydata=yydata;
while(1)
{
/* pdat_taskd = OSQPend(CommQ3, 0, &err);
buf0_taskd = pdat_taskd->data1;
buf1_taskd = pdat_taskd->data2;
buf2_taskd = pdat_taskd->data3; */
/*
switch(buf0_taskd)
{ case 0: PrintStr("0\n"); break;
case 1: PrintStr("1\n"); break;
case 2: PrintStr("2\n"); break;
}
switch(buf1_taskd)
{
case 0: PrintStr("0\n"); break;
case 1: PrintStr("1\n"); break;
case 2: PrintStr("2\n"); break;
}
switch(buf2_taskd)
{
case 0: PrintStr("0\n"); break;
case 1: PrintStr("1\n"); break;
case 2: PrintStr("2\n"); break;
case 3: PrintStr("3\n"); break;
case 4: PrintStr("4\n"); break;
}
*/
OSSemPend(sem, 0, &err);
PrintStr("TaskD\n\n\n");
OSSemPost(sem);
OSTimeDly(150);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -