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

📄 ledflow3.c

📁 文件: LedFlow.c LedFlow2.c LedFlow3.c LedFlow4.c LedFlow.mcp 等相关文件。 这是一个学习uC/os-II的实用源程序
💻 C
字号:
#include "config.h"

#define		TASK_STK_SIZE		64
#define 	LedFlowSpeed		5

OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK TaskLedStk[TASK_STK_SIZE*2];
OS_STK TaskLedStk1[TASK_STK_SIZE*2];
OS_STK TaskLedStk2[TASK_STK_SIZE*2];
static OS_EVENT *LedFlowSem;
static OS_EVENT *Led1FlowSem;
static OS_EVENT *Led2FlowSem;

#define		Led1		(1<<22)
#define		Led2		(1<<23)
#define		Led3		(1<<24)
#define		Led4		(1<<25)

void TaskStart(void *pdata);
void TaskLed(void *pdata);
void TaskLed1(void *pdata);
void TaskLed2(void *pdata);


void  DelayNms(INT32U  dly);

int main()
{
	OSInit();
	OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE-1], 0);
	OSStart();
	return 0;
}


void TaskStart(void *pdata)
	{
	pdata = pdata;
	
	TargetInit();
	LedFlowSem = OSSemCreate(1);
	Led1FlowSem = OSSemCreate(1);
	Led2FlowSem = OSSemCreate(1);
	
	IO0DIR |= Led1|Led2|Led3|Led4;
	IO0SET =  Led1|Led2|Led3|Led4;
	PINSEL0 = (PINSEL0&0x00000000) | 0x05;
	PINSEL1 = (PINSEL1&0x00000000);
		
	OSTaskCreate(TaskLed, (void *)0, &TaskLedStk[TASK_STK_SIZE-1],8);
	OSTaskCreate(TaskLed1,(void *)0, &TaskLedStk1[TASK_STK_SIZE*2-1],9);
	OSTaskCreate(TaskLed2,(void *)0, &TaskLedStk2[TASK_STK_SIZE*2-1],10);
	
		for(;;)
			{
			OSTimeDlyHMSM(0,0,1,10);
			OS_ENTER_CRITICAL();
			OSSemPost(LedFlowSem);
			OS_EXIT_CRITICAL();
			OSTimeDlyHMSM(0,0,1,10);
			OS_ENTER_CRITICAL();
			OSSemPost(Led1FlowSem);
			OS_EXIT_CRITICAL();
			OSTimeDlyHMSM(0,0,1,10);
			OS_ENTER_CRITICAL();
			OSSemPost(Led2FlowSem);
			OS_EXIT_CRITICAL();
			OSTimeDlyHMSM(0,0,0,200);
			}
	}

void TaskLed(void *pdata)
	{
	uint8 err;
	pdata = pdata;
	
		for(;;)
		{
		OS_ENTER_CRITICAL();
		OSSemPend(LedFlowSem, 0, &err);
		OS_EXIT_CRITICAL();
		IO0CLR = Led1;
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led1;
		DelayNms(2);
		IO0CLR = Led2;
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led2;
		DelayNms(2);
		IO0CLR = Led3;
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led3;
		DelayNms(2);
		IO0CLR = Led4;
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led4;
		DelayNms(2);
		OS_ENTER_CRITICAL();
		OSSemPend(LedFlowSem, 0, &err);
		OS_EXIT_CRITICAL();
		//OSTimeDlyHMSM(0,0,1,100);
		}
	}
	
void TaskLed1(void *pdata)
	{
	uint8 err;
	pdata = pdata;
	
	for(;;)
		{
		OS_ENTER_CRITICAL();
		OSSemPend(Led1FlowSem, 0, &err);
		OS_EXIT_CRITICAL();
		IO0CLR = Led1|Led2|Led3|Led4;
		
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led1|Led2|Led3|Led4;
		DelayNms(LedFlowSpeed*100);
		IO0CLR = Led1|Led2|Led3|Led4;
		
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led1|Led2|Led3|Led4;
		DelayNms(LedFlowSpeed*100);
		//OSTimeDlyHMSM(0,0,0,100);
		OS_ENTER_CRITICAL();
		OSSemPend(Led1FlowSem, 0, &err);
		OS_EXIT_CRITICAL();
		//OSTimeDlyHMSM(0,0,1,100);
		}
	}
	
void TaskLed2(void *pdata)
	{
	uint8 err;
	pdata = pdata;
	
	for(;;)
		{
		OS_ENTER_CRITICAL();
		OSSemPend(Led2FlowSem, 0, &err);
		OS_EXIT_CRITICAL();
		IO0CLR = Led1|Led2;
		//OSTimeDly(OS_TICKS_PER_SEC/LedFlowSpeed);
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led1|Led2;
		DelayNms(LedFlowSpeed*100);
		IO0CLR = Led3|Led4;
		//OSTimeDly(OS_TICKS_PER_SEC/LedFlowSpeed);
		DelayNms(LedFlowSpeed*100);
		IO0SET = Led3|Led4;
		DelayNms(LedFlowSpeed*100);
		//OSTimeDlyHMSM(0,0,0,100);
		OS_ENTER_CRITICAL();
		OSSemPend(Led2FlowSem, 0, &err);
		OS_EXIT_CRITICAL();
		//OSTimeDlyHMSM(0,0,1,100);
		
		}
	}
	
/****************************************************************************
* 名称:DelayNmS()
* 功能:长软件延时
* 入口参数:dly		延时参数,值为1时,延时为1ms
* 出口参数:无
****************************************************************************/
void  DelayNms(INT32U  dly)
{  INT32U  i;

   for(; dly>0; dly--) 
      for(i=0; i<7142; i++);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -