📄 mytest.c
字号:
#include "includes.h"
void Task2(void *mydata)reentrant;
void Task3(void *mydata)reentrant;
INT8U *err;
char code menu[] =
"\n"
"+ KEIL-C51 UCOS2 +\n"
"| C: display |\n"
"| Rx: run taskx for example:R2 x=2~3 |\n"
"| Dx: kill taskx for example:D2 |\n"
"| Tx: create taskx for example:T2,but you must push D2 firstly|\n"
"| S: task state for example:S |\n"
"| N: current task for example:N |\n"
"| ESC: quit current task |\n"
"command:";
//初始化定时器1,用于波特率传输
void InitTimer1(void){
TMOD &= 0xf0;
TMOD=TMOD|0x20;
TH1=0xfe;
TR1=1;
}
//初始化串口
void InitSerial(void){
SCON=0X50;
ES=1;
}
//输出字符串函数
void SendCh(INT8U *chp)reentrant{
while(O_dex);
O_dex=1;
O_buf=chp;
TI=1;
}
void PutCh(INT8U ch){
while(O_dex);
O_dex=1;
SBUF=ch;
}
void TaskStat(void){
static INT8U i;
for(i=0;i<OS_LOWEST_PRIO+1;i++){
if(OSTCBPrioTbl[i]){
SendCh("\ntask");
PutCh(i+0x30);
SendCh("--stat-------------->");
switch(OSTCBPrioTbl[i]->OSTCBStat){
case OS_STAT_RDY: SendCh("ready");
break;
case OS_STAT_SEM: SendCh("waite sem");
break;
case OS_STAT_MBOX: SendCh("waite mbox");
break;
case OS_STAT_Q: SendCh("waite queue");
break;
case OS_STAT_SUSPEND:SendCh("suspend");
break;
default: break;
}
}
}
}
//用户编写的任务
void Task1(void *mydata) reentrant{
mydata=mydata;
OSTaskSuspend(2);
OSTaskSuspend(3);
SendCh(menu);
while(1){
OSSemPend(Sem1,0,err);
switch(I_buf[0]){
case 'C': SendCh(menu);
break;
case 'R': if(I_dex>1){ //运行任务
switch(I_buf[1]){ // 那个任务
case 0x32: if(OSTCBPrioTbl[2]){
SendCh("\n");
OSTaskResume(2);
}else SendCh("\nunexist this task\ncommand:");
break;
case 0x33: if(OSTCBPrioTbl[3]){
SendCh("\n");
OSTaskResume(3);
}else SendCh("\nunexist this task\ncommand:");
break;
default: SendCh("\ncan't run this task\ncommand:");
break;
}
}else{
SendCh("\nerr command\ncommand:");
}
break;
case 'D': if(I_dex>1){ //删除任务
switch(I_buf[1]){ // 那个任务
case 0x31: SendCh("\nkill this task is disable\ncommand:");
break;
default:
if(OSTCBPrioTbl[I_buf[1]-0x30]&&I_buf[1]-0x30<6){
OSTaskDel(I_buf[1]-0x30);
SendCh("\nkill this task\ncommand:");
}else{
SendCh("\nunexist this task\ncommand:");
}
break;
}
}else{
SendCh("\nerr command\ncommand:");
}
break;
case 'T': if(I_dex>1){ //建立任务
switch(I_buf[1]){ // 那个任务
case 0x31: SendCh("\nthis task is exist\ncommand:");
break;
case 0x32: if(OSTCBPrioTbl[2])
SendCh("\nthis task is exist\ncommand:");
else{
OSTaskCreateExt(Task2,2,2,(void *)0,OS_TASK_OPT_STK_CLR + OS_TASK_OPT_STK_CHK);
OSTaskSuspend(2);
SendCh("\ncreate task2\ncommand:");
}
break;
case 0x33: if(OSTCBPrioTbl[3])
SendCh("\nthis task is exist\ncommand:");
else{
OSTaskCreateExt(Task3,3,3,(void *)0,OS_TASK_OPT_STK_CLR + OS_TASK_OPT_STK_CHK);
OSTaskSuspend(3);
SendCh("\ncreate task3\ncommand:");
}
break;
default: SendCh("\ncan't create this task\ncommand:");
break;
}
}else{
SendCh("\nerr command\ncommand:");
}
break;
case 'S': TaskStat();
SendCh("\ncommand:");
break;
case 'N': SendCh("\ncurrent task is----->task");
PutCh(OSTCBCur->OSTCBPrio+0x30);
SendCh("\ncommand:");
break;
case 0x0d: SendCh("\ncommand:");
break;
default: SendCh("\nerr command\ncommand:");
break;
}
I_dex=0;
}
}
void Task2(void *mydata) reentrant{
mydata=mydata;
while(1){
SendCh("\rtask2 is runging!");
}
}
void Task3(void *mydata) reentrant{
mydata=mydata;
while(1){
SendCh("\rtask3 is runging!");
}
}
void main (void)
{
InitTimer1();
InitSerial();
OSInit();
Sem1=OSSemCreate(0);
#if OS_TASK_CREATE_EXT_EN
OSTaskCreateExt(Task1,1,1,(void *)0,OS_TASK_OPT_STK_CLR + OS_TASK_OPT_STK_CHK);
OSTaskCreateExt(Task2,2,2,(void *)0,OS_TASK_OPT_STK_CLR + OS_TASK_OPT_STK_CHK);
OSTaskCreateExt(Task3,3,3,(void *)0,OS_TASK_OPT_STK_CLR + OS_TASK_OPT_STK_CHK);
#endif
#if OS_TASK_CREATE_EN
OSTaskCreate(Task1,1);
OSTaskCreate(Task2,2);
OSTaskCreate(Task3,3);
#endif
TimeTickConfig();
OSStart();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -