📄 main.c
字号:
#ifndef OS_MASTER_FILE
#include "includes.h"
#endif
//声明任务堆栈
OS_STK TestTask4Stk[64];
OS_STK TestTask5Stk[64];
OS_STK TestTask6Stk[64];
OS_STK TestTask7Stk[64];
void InitS0 ( unsigned int baud_rate ) TASK_REENTRANT //baud_rate,n,8,1
{
ES = 0;//1; //EA=1;ET1=1;
SCON = 0x50; /* 0x52;//SCON */
TMOD |= 0x20; /*0x20;// TMOD */
TCON = 0x40;//0x60; /*0x60;// TCON */
PCON = PCON&0x7f;
switch(baud_rate){ //波特率设置
case 1200:
TL1 = 0xe8;TH1 = 0Xe8;break; //1200
case 2400:
TL1 = 0xf4;TH1 = 0Xf4;break; //2400
case 4800:
TL1 = 0xfa;TH1 = 0Xfa;break; //4800
case 9600:
TL1 = 0xfd;TH1 = 0Xfd;break; //9600
case 19200:
PCON = PCON|0x80;TL1 = 0xfd;TH1 = 0Xfd;break;//19200
case 38400:
PCON = PCON|0x80;TL1 = 0xfe;TH1 = 0Xfe;break;//38400
default:
TL1=0xfd;TH1=0Xfd;break; //9600
}
}
//********************************************************************************************************
//
// 设置时钟节拍中断函数_?OSTickISR的tick率
// NOTE: 1: 一般tick率为10-100次/秒;
// 2: 特别注意不要在这里启动时钟节拍!!!
// 3: 最好在第一个任务(优先级最高的任务)里启动tick时钟节拍
// 4: 请尽量不要更改中断优先级寄存器IP的低2位,当INT0与T0同级时就会影响到正常tick
//
//
//********************************************************************************************************
void InitTick ( void ) TASK_REENTRANT
{
TMOD |= 0x01; //选T0,方式1(16位)
TH0 = 0x3c; //定时50ms
TL0 = 0x0b0;
TR0 = 1;
TI = 1;
//TF0 = 1;
IP = 0x02; //设置中断优先级T0最高
ET0 = 1;
EA = 1;
//请注意在第一个任务里启动T0,即:TR0=1;
// 在OS_CPU_A.ASM的_?OSTickISR里使TH0=0x3ch;TL0=0x0b0h;
}
void TestTask4 (void * os_pdata) TASK_REENTRANT
{//本任务优先级为4
os_pdata = os_pdata;
InitS0 ( 38400 );
InitTick(); //初始化OSTickISR()
printf ("\n*********************************************************\n");
printf ("************************任务:TASK-4************************\n");
printf ("***************这是最高优先级任务的第一次启动**************\n");
printf ("***************多任务已经启动,tick已经开始 ****************\n");
printf ("***********************************************************\n");
while (1)
{
printf ("*****TASK-44444\n");
OSTimeDly(100);
}
}
void TestTask5(void * os_pdata) TASK_REENTRANT
{//本任务优先级为5
os_pdata = os_pdata;
while(1)
{
printf ("********************TASK-55555\n");
OSTimeDly(200);
}
}
void TestTask6(void * os_pdata) TASK_REENTRANT
{//本任务优先级为6
os_pdata = os_pdata;
while(1)
{
printf ("***********************************TASK-66666\n");
OSTimeDly(400);
}
}
void TestTask7(void * os_pdata) TASK_REENTRANT
{//本任务优先级为7
os_pdata = os_pdata;
while(1)
{
printf ("**********************************************************************TASK-77777\n");
OSTimeDly(800);
}
}
void main (void)
{
OSInit();
/*INT8U OSTaskCreate (void (*task)(void *pd)TASK_REENTRANT,
void *os_pdata,
OS_STK *ptos,
INT8U prio)TASK_REENTRANT)
*/
OSTaskCreate (TestTask4,(void *)0, &TestTask4Stk[63], 4);
OSTaskCreate (TestTask5,(void *)0, &TestTask5Stk[63], 5);
OSTaskCreate (TestTask6,(void *)0, &TestTask6Stk[63], 6);
OSTaskCreate (TestTask7,(void *)0, &TestTask7Stk[63], 7);
OSStart();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -