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

📄 main.c

📁 AVR的UCO/S-II
💻 C
字号:
#include "config.h"
//#include "stdlib.h"
//#include "uart.h"
#define	  DS2	(1 << 24)           	// P1.24控制DS2
#define	  DS3	(1 << 25)           	// P0.25控制DS3
#define   DS4    (1<<8)
#define DIS1    20  //P1.20 
#define DIS2	21  //P1.21
#define DIS3	22  //P1.22
#define DIS4	23  //P1.23
#define	Task0StkLengh	64				// 定义用户任务0的堆栈长度 //
#define	TaskDS2StkSize	64				// 定义任务TaskDS2的堆栈长度//
#define	TaskDS3StkSize	64				// 定义任务TaskDS3的堆栈长度//
#define	TaskDS4StkSize	64				//定义任务TaskDS4的堆占长度//
#define TaskDS5StkSize  64				//定义任务TaskDS5 的堆占长度//
#define TaskDS6StkSize	64				 //定义任务TaskDS6的堆占长度//
#define TaskDS7StkSize  64				//定义任务TaskDS7的堆占长度//
#define TaskDS8StkSize  64			   //定义任务TaskDS8的堆占长度//
OS_STK	Task0Stk   [Task0StkLengh];		// 定义用户任务0的堆栈//
OS_STK	TaskDS2Stk [TaskDS2StkSize];	// 定义任务TaskDS2的堆栈//
OS_STK	TaskDS3Stk [TaskDS3StkSize];	// 定义任务TaskDS3的堆栈 //
OS_STK	TaskDS4Stk [TaskDS4StkSize];	 //定义任务TaskDS4的堆占//
OS_STK  TaskDS5Stk [TaskDS5StkSize];	 //定义任务TaskDS5的堆占//
OS_STK  TaskDS6Stk [TaskDS6StkSize];     //定义任务TaskDS6的堆占//
OS_STK  TaskDS7Stk [TaskDS7StkSize];	 //定义任务TaskDS7的堆占//
OS_STK  TaskDS8Stk [TaskDS8StkSize];	 //定义任务TaskDS8的堆占//
void  Task1(void *pdata);				// Task0 任务0 //
void  TaskDS2(void *pdata);				// 任务TaskDS2//
void  TaskDS3(void *pdata);				// 任务TaskDS3//
void  TaskDS4(void *pdata);				//任务TaskDS4//
void  TaskDS5(void *pdata);              //任务TaskDS5//
void  TaskDS6(void *pdata);              //任务TaskDS6//
void  TaskDS7(void *pdata);				 //任务TaskDS7//
void  TaskDS8(void *pdata);
OS_EVENT *uartsem;
OS_EVENT *databox;
OS_EVENT *dispsem;
/*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :c语言的主函数,由它启动多任务环境
*********************************************************************************************************
*/
int main (void)
{	
	OSInit ();
	uartsem = OSSemCreate(1);
	dispsem = OSSemCreate(0);
	databox = OSMboxCreate((void*)0);																										
	OSTaskCreate (Task1,(void *)0, &Task0Stk[Task0StkLengh - 1], 2);		
	OSStart ();
	return 0;															
}

/*
********************************************************************************************************
** 									Task0 任务0
** 							完成目标板初始化和创建TaskLED1任务
********************************************************************************************************
*/

void Task1	(void *pdata)
{
	pdata = pdata;
	TargetInit ();
	OSTaskCreate (TaskDS2,(void *)0, &TaskDS2Stk[TaskDS2StkSize - 1], 3);		
	OSTaskCreate (TaskDS3,(void *)0, &TaskDS3Stk[TaskDS3StkSize - 1], 4);
	OSTaskCreate (TaskDS4,(void *)0, &TaskDS4Stk[TaskDS4StkSize - 1], 5);
	OSTaskCreate (TaskDS5,(void *)0, &TaskDS5Stk[TaskDS5StkSize - 1], 6);
	OSTaskCreate (TaskDS6,(void *)0, &TaskDS6Stk[TaskDS6StkSize - 1], 7);
	OSTaskCreate (TaskDS7,(void *)0, &TaskDS7Stk[TaskDS7StkSize - 1], 8);
	OSTaskCreate (TaskDS8,(void *)0, &TaskDS8Stk[TaskDS8StkSize - 1], 9);	
	while (1)
	{
		OSTimeDly(10);
	}
}

/*
********************************************************************************************************
** 									TaskDS2
** 								    DS2任务	 //
********************************************************************************************************
*/
void  TaskDS2(void *pdata)
{
    pdata = pdata;                          	 	// 避免编译警告	//

	PINSEL2 = PINSEL2 & (~0x08);				    // P1[25:16]选择GPIO
				
    IO1DIR |= DS2;			                    	// 设置LED1控制口输出 //
    IO1SET  = DS2;
    
    for (;;)
    {
        IO1CLR = DS2;
        OSTimeDly(OS_TICKS_PER_SEC / 4);
        IO1SET = DS2;
        OSTimeDly(OS_TICKS_PER_SEC / 2);
    }
}

 /*
********************************************************************************************************
** 									TaskDS3
** 								    DS1任务
********************************************************************************************************
*/
void  TaskDS3(void *pdata)
{
    pdata = pdata;                          	 	// 避免编译警告	 //

	PINSEL0 = 0x00000000;		                    // 设置管脚连接GPIO
				
    IO0DIR |= DS3;			                    	// 设置LED1控制口输出 //
    IO0SET  = DS3;
    
    for (;;)
    {
        IO0CLR = DS3;
        OSTimeDly(OS_TICKS_PER_SEC / 5);
        IO0SET = DS3;
        OSTimeDly(OS_TICKS_PER_SEC / 3);
    }
}
/********************************************************************************/
/*	 函数名:TaskDS4()                                                          */
/*   功能 :蜂鸣器鸣叫                                                          */
/*   入口参数:*pdata                                                           */
/*   出口参数:无                                                               */
/*******************************************************************************/
void  TaskDS4(void *pdata)
{
    pdata = pdata;                          	 	// 避免编译警告	//

	PINSEL0 = 0x00000000;		                    // 设置管脚连接GPIO
				
    IO0DIR |= DS4;			                    	// 设置LED1控制口输出 //
    IO0SET  = DS4;
    for (;;)
    {
        IO0CLR = DS4;
        OSTimeDly(OS_TICKS_PER_SEC / 5);
        IO0SET = DS4;
        OSTimeDly(OS_TICKS_PER_SEC / 3);
    }
}
/*******************************************************************************/
/*   函数名:TaskDS5()                                                         */
/*   功能:  使用信号量串口发送str1[]                                          */
/*  入口参数:*pdata                                                           */
/*  出口参数:无                                                               */
/********************************************************************************/ 
void  TaskDS5(void *pdata)
{ 

 	 uint8  err;
	 uint8 str1[]="I AM TASK DS5." ;
     pdata = pdata;
	 UART0Init(9600);
	 for(;;)
	{
	 OSSemPend(uartsem,0,&err);
 	 uart0_sendstr(str1);
	 OSTimeDly(OS_TICKS_PER_SEC / 10);
	 err = OSSemPost(uartsem);
	 }
}
/*********************************************************************************/
/*   函数名:TaskDS6()															 */
/*	 功能:使用信号量串口发送str2[]											     */
/*	 入口参数:*pdata														 	 */
/*	 出口参数:无															     */
/*********************************************************************************/
void TaskDS6(void *pdata)
{
   uint8  err;
   uint8  str2[]="i am task ds6." ;
   pdata  =  pdata;
   for(;;)
    {
	 OSSemPend(uartsem,0,&err);
	 uart0_sendstr(str2);
	 err = OSSemPost(uartsem);
	}
}
/**********************************************************************************/
/*   函数名:TaskDS7(void *pdata)                                                 */
/*	 功能:键盘扫描  使用消息邮箱发送键值                                         */
/*	 入口参数:	*pdata															  */
/*	 出口参数:无																 */
/**********************************************************************************/
void TaskDS7(void *pdata)
{	
    
	uint32    data;
   //	uint8     err;
    pdata = pdata;
	IO0DIR  |=(1<<10)|(1<<11)|(1<<12)|(1<<13);
	for(;;)
	{
	   data = key_scan();
	  OSMboxPost(databox,(void*)&data);
	  OSTimeDly(10);
	}
}
/*********************************************************************************/
/* 函数名:TaskDS8(void *pdata);												  */
/* 功能:接受消息邮箱的消息	送到LED显示									    	  */
/* 入口参数:	*pdata															*/
/* 出口参数:无																	*/
/*********************************************************************************/
  void TaskDS8(void *pdata)
{	
    unsigned char  *msg;
	unsigned char y;
	uint8  err;
	pdata = pdata;
	IO0DIR|=(uint32)(1<<7);
	IO1DIR|=(0x0f<<DIS1);
    IO1SET|=(0x0f<<DIS1);
	MSPI_Init();
	for (;;)
	{
	  
	  msg = OSMboxPend(databox,10,&err);
	   y =  *msg;
		
	    
		   OSSemPend(dispsem,0,&err);
	       IO1SET|=(0x0f<<DIS1);
	       MSPI_SendData(y);	// 发送显示数据
	       IO1CLR|=(1<<(DIS1));
	       

	}

}
/*********************************************************************************************************/
/**                            End Of File																  */
/********************************************************************************************************/

⌨️ 快捷键说明

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