main.c 9.17 KB
#include "includes.h"
#include "bsp.h"
/*
*********************************************************************************************************
*                                       静态全局变量
*********************************************************************************************************
*/
static OS_TCB   AppTaskFeedDogTCB;
static CPU_STK  AppTaskFeedDogStk[APP_CFG_TASK_FEEDDOG_STK_SIZE];	

static OS_TCB   AppTaskEthernetSerCom;
static CPU_STK  AppTaskEthernetSerComStk[APP_CFG_TASK_ETHERNETSERCOM_STK_SIZE];

static OS_TCB   AppTaskEthernetCliCom;
static CPU_STK  AppTaskEthernetCliComStk[APP_CFG_TASK_ETHERNETCLICOM_STK_SIZE];

static OS_TCB   AppTaskMotion;
static CPU_STK  AppTaskMotionStk[APP_CFG_TASK_MotionControl_STK_SIZE];

static OS_TCB   AppTaskCANTCB;
static CPU_STK  AppTaskCANTCBStk[APP_CFG_TASK_USER_CAN_STK_SIZE];

static  OS_TCB   AppTaskSpeed;
static  CPU_STK  AppTaskSpeedStk[APP_CFG_TASK_Speed_STK_SIZE];

/*
*********************************************************************************************************
*                                      函数声明
*********************************************************************************************************
*/
static void  AppTaskCreate 			(void *p_arg);
static void  AppTaskFeedDog 		(void *p_arg);
static void  AppTaskEthernetSer		(void *p_arg);
static void  AppTaskEthernetCli		(void *p_arg);
static void  AppTaskMotionControl	(void *p_arg);
static void  AppTaskSpeedCtr 		(void *p_arg);
static void  AppTaskCanUpdate 		(void *p_arg);

/*
*********************************************************************************************************
*	函 数 名: main
*	功能说明: 标准c程序入口。
*	形    参: 
*	返 回 值: 无  70000 32000
*********************************************************************************************************
*/
				
int main(void)
{
  OS_ERR  err;
	CPU_Init();
	bsp_Init();
	BSP_Tick_Init();
	/* 初始化uC/OS-III 内核 */
    OSInit(&err);  	
    AppTaskCreate(&err); /* 创建任务 */
	/* 启动多任务系统,控制权交给uC/OS-III */
    OSStart(&err);
    (void)&err;
    return (0);
}

/*
*********************************************************************************************************
*	函 数 名: AppTaskCreate 149  405  296  109
*	功能说明: 创建应用任务
*	形    参:p_arg 是在创建该任务时传递的形参
*	返 回 值: 无
*********************************************************************************************************
*/
u8 PVDFlag = 0;

static void AppTaskCreate(void *p_arg)
{
	OS_ERR      err;	
	if(PVDFlag == 5)
	{
		/* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */
		OSTaskCreate((OS_TCB       *)&AppTaskFeedDogTCB,  /* 任务控制块地址 */           
					 (CPU_CHAR     *)"App Task FeedDog",  /* 任务名 */
					 (OS_TASK_PTR   )AppTaskFeedDog,      /* 启动任务函数地址 */
					 (void         *)0,                 /* 传递给任务的参数 */
					 (OS_PRIO       )APP_CFG_TASK_FeedDog_PRIO, /* 任务优先级 */
					 (CPU_STK      *)&AppTaskFeedDogStk[0],     /* 堆栈基地址 */
					 (CPU_STK_SIZE  )APP_CFG_TASK_FEEDDOG_STK_SIZE / 10, /* 堆栈监测区,这里表示后10%作为监测区 */
					 (CPU_STK_SIZE  )APP_CFG_TASK_FEEDDOG_STK_SIZE,      /* 堆栈空间大小 */
					 (OS_MSG_QTY    )0,  /* 本任务支持接受的最大消息数 */
					 (OS_TICK       )0,  /* 设置时间片 */
					 (void         *)0,  /* 堆栈空间大小 */
					 (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
					 (OS_ERR       *)&err);
	}
	//以太网通讯任务
		OSTaskCreate((OS_TCB       *)&AppTaskEthernetSerCom,  /* 任务控制块地址 */           
					 (CPU_CHAR     *)"App Task Ethernet Ser",  /* 任务名 */
					 (OS_TASK_PTR   )AppTaskEthernetSer,      /* 启动任务函数地址 */
					 (void         *)0,                 /* 传递给任务的参数 */
					 (OS_PRIO       )APP_CFG_TASK_EthernetSer_PRIO, /* 任务优先级 */
					 (CPU_STK      *)&AppTaskEthernetSerComStk[0],     /* 堆栈基地址 */
					 (CPU_STK_SIZE  )APP_CFG_TASK_ETHERNETSERCOM_STK_SIZE / 10, /* 堆栈监测区,这里表示后10%作为监测区 */
					 (CPU_STK_SIZE  )APP_CFG_TASK_ETHERNETSERCOM_STK_SIZE,      /* 堆栈空间大小 */
					 (OS_MSG_QTY    )0,  /* 本任务支持接受的最大消息数 */
					 (OS_TICK       )0,  /* 设置时间片 */
					 (void         *)0,  /* 堆栈空间大小 */
					 (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
					 (OS_ERR       *)&err);	
		//Client
		//运动控制			 
//		OSTaskCreate((OS_TCB       *)&AppTaskMotion,  /* 任务控制块地址 */           
//					 (CPU_CHAR     *)"App Task Motion Control",  /* 任务名 */
//					 (OS_TASK_PTR   )AppTaskMotionControl,      /* 启动任务函数地址 */
//					 (void         *)0,                 /* 传递给任务的参数 */
//					 (OS_PRIO       )APP_CFG_TASK_MotionControl_PRIO, /* 任务优先级 5*/
//					 (CPU_STK      *)&AppTaskMotionStk[0],     /* 堆栈基地址 */
//					 (CPU_STK_SIZE  )APP_CFG_TASK_MotionControl_STK_SIZE / 10, /* 堆栈监测区,这里表示后10%作为监测区 */
//					 (CPU_STK_SIZE  )APP_CFG_TASK_MotionControl_STK_SIZE,      /* 堆栈空间大小 */
//					 (OS_MSG_QTY    )0,  /* 本任务支持接受的最大消息数 */
//					 (OS_TICK       )0,  /* 设置时间片 */
//					 (void         *)0,  /* 堆栈空间大小 */  
//					 (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
//					 (OS_ERR       *)p_arg);
					 /****************************CANdriver**********************************/
		OSTaskCreate((OS_TCB       *)&AppTaskCANTCB,
					 (CPU_CHAR     *)"App Task CAN",
					 (OS_TASK_PTR   )AppTaskCanUpdate,
					 (void         *)0,
					 (OS_PRIO       )APP_CFG_TASK_CAN_PRIO,
					 (CPU_STK      *)&AppTaskCANTCBStk[0],
					 (CPU_STK_SIZE  )APP_CFG_TASK_USER_CAN_STK_SIZE / 10,
					 (CPU_STK_SIZE  )APP_CFG_TASK_USER_CAN_STK_SIZE,
					 (OS_MSG_QTY    )0,
					 (OS_TICK       )0,
					 (void         *)0,
					 (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_SAVE_FP | OS_OPT_TASK_STK_CLR),
					 (OS_ERR       *)&err);	
		
//		OSTaskCreate((OS_TCB       *)&AppTaskEthernetCliCom,  /* 任务控制块地址 */           
//					 (CPU_CHAR     *)"App Task Ethernet Cli",  /* 任务名 */
//					 (OS_TASK_PTR   )AppTaskEthernetCli,      /* 启动任务函数地址 */
//					 (void         *)0,                 /* 传递给任务的参数 */
//					 (OS_PRIO       )APP_CFG_TASK_EthernetCli_PRIO, /* 任务优先级 */
//					 (CPU_STK      *)&AppTaskEthernetCliComStk[0],     /* 堆栈基地址 */
//					 (CPU_STK_SIZE  )APP_CFG_TASK_ETHERNETCLICOM_STK_SIZE / 10, /* 堆栈监测区,这里表示后10%作为监测区 */
//					 (CPU_STK_SIZE  )APP_CFG_TASK_ETHERNETCLICOM_STK_SIZE,      /* 堆栈空间大小 */
//					 (OS_MSG_QTY    )0,  /* 本任务支持接受的最大消息数 */
//					 (OS_TICK       )0,  /* 设置时间片 */
//					 (void         *)0,  /* 堆栈空间大小 */
//					 (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
//					 (OS_ERR       *)&err);			
						 
		OSTaskCreate((OS_TCB       *)&AppTaskSpeed,  /* 任务控制块地址 */           
					 (CPU_CHAR     *)"App Task Speed Ctr",  /* 任务名 */
					 (OS_TASK_PTR   )AppTaskSpeedCtr,      /* 启动任务函数地址 */
					 (void         *)0,                 /* 传递给任务的参数 */
					 (OS_PRIO       )APP_CFG_TASK_SpeedCtr_PRIO, /* 任务优先级 2*/
					 (CPU_STK      *)&AppTaskSpeedStk[0],     /* 堆栈基地址 */
					 (CPU_STK_SIZE  )APP_CFG_TASK_Speed_STK_SIZE / 10, /* 堆栈监测区,这里表示后10%作为监测区 */
					 (CPU_STK_SIZE  )APP_CFG_TASK_Speed_STK_SIZE,      /* 堆栈空间大小 */
					 (OS_MSG_QTY    )0,  /* 本任务支持接受的最大消息数 */
					 (OS_TICK       )0,  /* 设置时间片 */
					 (void         *)0,  /* 堆栈空间大小 */  
					 (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
					 (OS_ERR       *)p_arg);
}
/*
*********************************************************************************************************
*	函 数 名: AppTaskFeedDog
*	功能说明: 这是一个启动任务,在多任务系统启动后,必须初始化滴答计数器。本任务主要实现硬件初始化,任务创建以及清空看门狗。
*             
*	形    参: p_arg 是在创建该任务时传递的形参
*	返 回 值: 无
	优 先 级: 2
*********************************************************************************************************
*/
static  void  AppTaskFeedDog (void *p_arg)
{
	OS_ERR err;
	extern void bsp_InitWwdg(uint8_t _ucTreg, uint8_t _ucWreg, uint32_t WWDG_Prescaler);
	bsp_InitWWDG();
    while (1)
	{
		FeedDog();
		
		OSTimeDly(10, OS_OPT_TIME_DLY, &err);
    }
}

extern void do_tcp_server(void);
extern void do_tcp_client(void);

extern void do_udp(void);

static void  AppTaskEthernetSer(void *p_arg)
{
	OS_ERR err;
	SpiInit();

	while(1)
	{
//		do_tcp_server();	
//		
//			do_tcp_client();
		do_udp();
		
		OSTimeDly(10, OS_OPT_TIME_PERIODIC, &err);//huxinjie@zlg.cn
	}	
}

static void  AppTaskMotionControl(void *p_arg)
{
	OS_ERR err;
	
	while(1)
	{
				
		OSTimeDly(10, OS_OPT_TIME_PERIODIC, &err);
	}	
}
extern int32_t bsp_GetRunTime(void);
static void  AppTaskEthernetCli(void *p_arg)
{
	OS_ERR err;
	
	while(1)
	{
		OSTimeDly(1, OS_OPT_TIME_PERIODIC, &err);
	}
}
extern u8 speedModel[];


static void  AppTaskSpeedCtr (void *p_arg)
{
	(void)p_arg;
	OS_ERR err;
	while(1)
	{	
		eMBPoll();
		UpdateGPIO_Input();
		_AppTaskRunCoreUpdate();
		UpdateGPIO_Output();
		OSTimeDly(12, OS_OPT_TIME_PERIODIC, &err);
	}
}

extern unsigned char recvBuff[],recvBuffTwo[];
static void  AppTaskCanUpdate (void *p_arg)
{
	(void)p_arg;
	OS_ERR err;
	while(1)
	{	
		agv.Public.SystemTime = bsp_GetRunTime();
		_AppCanUpdate();
		OSTimeDly(1, OS_OPT_TIME_PERIODIC, &err);
	}
}