⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hw.c

📁 ucosii的源代码希望能给予学习嵌入式系统的朋友一定的帮助
💻 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 + -