main.c

来自「lpc214x_ucosii_280_Keil VERLED OSSem基于UC」· C语言 代码 · 共 152 行

C
152
字号
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
** mcu123.com add keil
********************************************************************************************************/
#include "..\arm\config.h"
#include "cfg.h"

#define	TaskStkLengh	64			//Define the Task0 stack length 定义用户任务0的堆栈长度
#define LED0 0X00000400 
#define LED1 0X00000800

OS_STK	TaskStk0 [TaskStkLengh];		//Define the Task0 stack 定义用户任务0的堆栈
OS_STK	TaskStk1 [TaskStkLengh];		//Define the Task1 stack 定义用户任务1的堆栈
OS_EVENT *Uart0Point;					//定义一个信号量指针,当建立一个信号量成功时,会返回一个非零的指针

void 	Task0(void *pdata);			//Task0 任务0
void 	Task1(void *pdata);			//Task1 任务1

int main (void)
{	UARTxInit(0,115200);									   //初始化串口0,115200 bps
	sprintf(str,"UART0 IS SET 115200 BPS! \n\r");
	UARTxSendStr(0,str);

	OSInit ();																										
	OSTaskCreate (Task0,(void *)0, &TaskStk0[TaskStkLengh - 1], 2);			 //建立任务0
	OSTaskCreate (Task1,(void *)0, &TaskStk1[TaskStkLengh - 1], 3);			 //建立任务1
	OSStart ();
	return 0;															
}
/*********************************************************************************************************
**                            Task0 任务0
********************************************************************************************************/
void Task0	(void *pdata)
{	uint8 err;							//定义一个变量在OSSemPend(Uart0Point,0,&err)用到
	uint8 sem=0x02;						//定义一个非0的信号量 ,如果为0,则信号量无效
	pdata = pdata;
	TargetInit ();
	IO0DIR|=LED0;
	sprintf(str,"TASK0 IS OSSemCreate(sem) \n\r");
	UARTxSendStr(0,str);

	Uart0Point= OSSemCreate(sem);                           /* 建立信号量     */
    if (Uart0Point == NULL)
    {
        while (1);
    }
	sprintf(str,"TASK0 IS OSSemCreate(sem) successful! \n\n\n\r\r\r");	  /* 建立信号量成功     */
	UARTxSendStr(0,str);

	while (1)
	{	
		sprintf(str,"TASK0 IS requisition UART0 \n\r");
		UARTxSendStr(0,str); 
		OSSemPend(Uart0Point,0,&err);						 //请求信号量
		if (&err!=OS_NO_ERR)
		{
			
		sprintf(str,"TASK0 requisition successful\n\r");
		UARTxSendStr(0,str); 
		//--------------------------------------------------------------------------------
		if ((IO0PIN & LED0) ==0)
		{	IO0SET=IO0SET |LED0;
			sprintf(str,"TASK0 IS RUNNING , P0.10=1\n\r");
		}
		else 													//led0闪烁
		{ 	IO0CLR=IO0CLR|LED0 ;
			sprintf(str,"TASK0 IS RUNNING , P0.10=0\n\r");
		}
		UARTxSendStr(0,str);
		//--------------------------------------------------------------------------------
		sprintf(str,"TASK0 Set Free UART0 \n\r");
		UARTxSendStr(0,str);
		OSSemPost(Uart0Point);								  //用完后,释放信号量
			 
		sprintf(str,"TASK0 IS Running OSTimeDly(OS_TICKS_PER_SEC/10)\n\n\n\r\r\r");
		UARTxSendStr(0,str);

		}
		OSTimeDly(OS_TICKS_PER_SEC/2);   		//延时0.1秒	
			
		
	}
}

/*********************************************************************************************************
**                            Task1 任务1
********************************************************************************************************/
void Task1	(void *pdata)
{	uint8 err;
	pdata = pdata;
	TargetInit ();
	IO0DIR|=LED1;


	while (1)
	{  	
		sprintf(str,"TASK1 IS requisition UART0 \n\r");
		UARTxSendStr(0,str);
		OSSemPend(Uart0Point,0,&err);						 //请求信号量
		if (&err!=OS_NO_ERR)
		{

		sprintf(str,"TASK1 requisition successful\n\r");
		UARTxSendStr(0,str);
		//--------------------------------------------------------------------------------
		if ((IO0PIN & LED1) ==0)
		{	IO0SET =IO0SET| LED1;
			sprintf(str,"TASK1 IS RUNNING , P0.11=0\n\r");
		}
		else 												  //led1闪烁
		{	IO0CLR=IO0CLR|LED1	;
			sprintf(str,"TASK1 IS RUNNING , P0.11=0\n\r");
		}	 
		UARTxSendStr(0,str);
		//--------------------------------------------------------------------------------												  //用完后,释放信号量
		//OSSemPost(Uart0Point);									//用完后,释放信号量
		sprintf(str,"TASK1 Set Free UART0 \n\r");
		UARTxSendStr(0,str);

		sprintf(str,"TASK1 IS Running OSTimeDly(OS_TICKS_PER_SEC/2)\n\n\n\r\r\r");
		UARTxSendStr(0,str);
		}
		OSTimeDly(OS_TICKS_PER_SEC/2);   		//延时0.5秒
	}
}
   
   
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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