📄 hw.c
字号:
#include "..\\includes.h"
#include "..\\drivers\\lcd.h"
#include "..\\drivers\\CommRtos.h"
#define KEY_ESC 0x1b
#define TASK_STK_SIZE 200
#define TASK_START_ID 10
#define TASK_1_ID 11
#define TASK_2_ID 12
#define TASK_3_ID 13
#define TASK_START_PRIO 10
#define TASK_1_PRIO 11
#define TASK_2_PRIO 12
#define TASK_3_PRIO 13
typedef struct _Data
{
INT16U m_nStart;
INT16U m_nEnd;
}DATA;
DATA TaskData[4];
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
OS_STK Task3Stk[TASK_STK_SIZE];
OS_EVENT *RandomSem;
void TaskStart(void *data);
void Task1(void *data);
void Task2(void *data);
void Task3(void *data);
extern void TimeTickInit(void);
void main(void)
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE -1], TASK_START_PRIO);
OSStart();
}
void TaskStart(void *data)
{
BYTE cnt, err, sData, i;
char dispBuf[10];
char dispSecBuf[10];
WORD dataCnt;
INT16U a;
disable();
TimeTickInit();
enable();
data=data;
dataCnt=cnt=0;
a=0;
CommInit();
DispInit(2,16);
RandomSem=OSSemCreate(3);
DispStr( 0, 0, "1: 2: ");
DispStr( 1, 0, "3: 4: ");
for( i=0; i< 4 ; i++)
{
TaskData[i].m_nStart= (i *100);
TaskData[i].m_nEnd = (i *100)+99;
}
OSTaskCreateExt( Task1, (void *)&TaskData[1], &Task1Stk[TASK_STK_SIZE-1], TASK_1_PRIO, TASK_1_ID, &Task1Stk[0], TASK_STK_SIZE, (void *)0, OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt( Task2, (void *)&TaskData[2], &Task2Stk[TASK_STK_SIZE-1], TASK_2_PRIO, TASK_2_ID, &Task2Stk[0], TASK_STK_SIZE, (void *)0, OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt( Task3, (void *)&TaskData[3], &Task3Stk[TASK_STK_SIZE-1], TASK_3_PRIO, TASK_3_ID, &Task3Stk[0], TASK_STK_SIZE, (void *)0, OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
a = TaskData[0].m_nStart;
for(;;)
{
OSSemPend(RandomSem, 0, &err);
DispStr(0, 3, "Pend");
sData = CommGetChar(0, &err);
OSSemPost ( RandomSem);
sprintf( dispSecBuf, "%4u", a);
DispStr( 0, 3, dispSecBuf);
a++;
if( a==101)
{
a=0;
}
OSTimeDlyHMSM(0, 0, 2, 0);
}
}
void Task1(void *data)
{
INT8U sData, err;
DATA* Data;
char dispBuf2[10];
INT16U b;
Data= (DATA*) data;
b=Data->m_nStart;
for(;;)
{
for( ; b<= Data-> m_nEnd; b++)
{
OSSemPend(RandomSem, 0, &err);
DispStr(0, 11, "Pend");
sData=CommGetChar(0, &err);
OSSemPost ( RandomSem);
sprintf( dispBuf2, "%4u", b);
DispStr (0, 11, dispBuf2);
OSTimeDlyHMSM( 0, 0, 30, 0);
}
b= Data->m_nStart;
OSTimeDlyHMSM(0, 0, 2, 0);
}
}
void Task2(void *data)
{
INT8U sData, err;
DATA* Data;
char dispBuf3[10];
INT16U c;
Data= (DATA*) data;
c=Data->m_nStart;
for(;;)
{
for( ; c<= Data-> m_nEnd; c++)
{
OSSemPend(RandomSem, 0, &err);
DispStr(1, 3, "Pend");
sData=CommGetChar(0, &err);
OSSemPost ( RandomSem);
sprintf( dispBuf3, "%4u", c);
DispStr (1, 3, dispBuf3);
OSTimeDlyHMSM( 0, 0, 10, 0);
}
OSTimeDly(4);
c= Data->m_nStart;
OSTimeDlyHMSM(0, 0, 2, 0);
}
}
void Task3(void *data)
{
INT8U sData, err;
DATA* Data;
char dispBuf4[10];
INT16U d;
Data= (DATA*) data;
d=Data->m_nStart;
for(;;)
{
for( ; d<= Data-> m_nEnd; d++)
{
OSSemPend(RandomSem, 0, &err);
DispStr(1, 11, "Pend");
sData=CommGetChar(0, &err);
OSSemPost ( RandomSem);
sprintf( dispBuf4, "%4u", d);
DispStr (1, 11, dispBuf4);
OSTimeDly(10);
}
d= Data->m_nStart;
OSTimeDly(20);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -