/*****************************************************************************/ /* ZTYP Technology , Inc. Copyright (c) 2001-2018 */ /*****************************************************************************/ /* ********************************************************************************************************* * INCLUDE FILES ********************************************************************************************************* */ #include #include "app_cfg.h" #include "cpu_core.h" #include "os.h" #include "bsp.h" #include "bsp_sys.h" #include "usr_bsp_sys.h" #include "usr_drv_sys.h" #include "usr_task_sys.h" #include "usr_task_network.h" #include "usr_task_watchdog.h" #include "usr_task_heart.h" #include "usr_task_inside_para_sensor.h" #include "usr_task_many_para_sensor.h" #include "usr_task_camera.h" #include "usr_task_rtc.h" #include "usr_task_timer.h" #include "usr_task_imu.h" /* ********************************************************************************************************* * LOCAL DEFINES ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL CONSTANTS ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL DATA TYPES ********************************************************************************************************* */ /*$PAGE*/ /* ********************************************************************************************************* * LOCAL GLOBAL VARIABLES ********************************************************************************************************* */ static OS_STK AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE]; static OS_STK AppTaskUsrWatchdogStk[APP_CFG_TASK_USR_WATCHDOG_STK_SIZE]; static OS_STK AppTaskUsrTimerStk[APP_CFG_TASK_USR_TIMER_STK_SIZE]; static OS_STK AppTaskUsrRtcStk[APP_CFG_TASK_USR_RTC_STK_SIZE]; static OS_STK AppTaskUsrHeartStk[APP_CFG_TASK_USR_HEART_STK_SIZE]; static OS_STK AppTaskUsrNetworkStk[APP_CFG_TASK_USR_NETWORK_STK_SIZE]; static OS_STK AppTaskUsrCameraStk[APP_CFG_TASK_USR_CAMERA_STK_SIZE]; static OS_STK AppTaskUsrInsideSensorStk[APP_CFG_TASK_USR_INSIDE_SENSOR_STK_SIZE]; static OS_STK AppTaskUsrManyParaSensorStk[APP_CFG_TASK_USR_MANY_PARA_SENSOR_STK_SIZE]; static OS_STK AppTaskUsrImuSensorStk[APP_CFG_TASK_USR_IMU_SENSOR_STK_SIZE]; /* ********************************************************************************************************* * LOCAL MACRO'S ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL FUNCTION PROTOTYPES ********************************************************************************************************* */ static void AppTaskCreate (void); static void AppTaskStart (void *p_arg); /*$PAGE*/ /* ********************************************************************************************************* * main() * * Description : Entry point for C code. * * Arguments : none. * * Returns : none. * * Note(s) : (1) It is assumed that your code will call main() once you have performed all necessary * initialization. ********************************************************************************************************* */ int main (void) { #if (OS_TASK_NAME_EN > 0) CPU_INT08U err; #endif #if (CPU_CFG_NAME_EN == DEF_ENABLED) CPU_ERR cpu_err; #endif #if (CPU_CFG_NAME_EN == DEF_ENABLED) CPU_NameSet((CPU_CHAR *)"TM4C1294NCPDT", (CPU_ERR *)&cpu_err); #endif CPU_IntDis(); /* Disable all interrupts. */ OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel" */ OSTaskCreateExt((void (*)(void *)) AppTaskStart, /* Create the start task */ (void *) 0, (OS_STK *)&AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_START_PRIO, (INT16U ) APP_CFG_TASK_START_PRIO, (OS_STK *)&AppTaskStartStk[0], (INT32U ) APP_CFG_TASK_START_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); #if (OS_TASK_NAME_EN > 0) OSTaskNameSet(APP_CFG_TASK_START_PRIO, (INT8U *)"Start", &err); #endif OSStart(); /* Start multitasking (i.e. give control to uC/OS-II) */ while (1) { ; } } /*$PAGE*/ /* ********************************************************************************************************* * App_TaskStart() * * Description : Startup task example code. * * Arguments : p_arg Argument passed by 'OSTaskCreate()'. * * Returns : none. * * Created by : main(). * * Notes : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. ********************************************************************************************************* */ static void AppTaskStart (void *p_arg) { CPU_INT32U cpu_clk_freq; CPU_INT32U cnts; (void)p_arg; /* See Note #1 */ (void)&p_arg; BSP_Init(); /* Initialize BSP functions */ cpu_clk_freq = BSP_SysClkFreqGet(); /* Determine SysTick reference freq. */ cnts = cpu_clk_freq /* Determine nbr SysTick increments */ / (CPU_INT32U)OS_TICKS_PER_SEC; OS_CPU_SysTickInit(cnts); CPU_Init(); /* Initialize the uC/CPU services */ #if (OS_TASK_STAT_EN > 0) OSStatInit(); /* Determine CPU capacity */ #endif Mem_Init(); #ifdef CPU_CFG_INT_DIS_MEAS_EN CPU_IntDisMeasMaxCurReset(); #endif /* 对usr bsp 传递时钟量 */ usr_bsp_set_sysclock(cpu_clk_freq); /* 初始化usrbsp */ usr_bsp_sys_init(); /* 初始用户驱动 */ usr_drv_sys_init(); /* 用户自定义任务初始化 */ usr_task_sys_init(); AppTaskCreate(); /* Creates all the necessary application tasks. */ while (DEF_ON) { /* 任务主体程序 */ bsp_run_led(0); OSTimeDly(1000); bsp_run_led(1); OSTimeDly(1000); } } /* ********************************************************************************************************* * AppTaskCreate() * * Description : Create the application tasks. * * Argument(s) : none. * * Return(s) : none. * * Caller(s) : AppTaskStart() * * Note(s) : none. ********************************************************************************************************* */ static void AppTaskCreate (void) { /* 创建一个看门狗任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_watchdog, (void *) 0, (OS_STK *)&AppTaskUsrWatchdogStk[APP_CFG_TASK_USR_WATCHDOG_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_WATCHDOG_PRIO, (INT16U ) APP_CFG_TASK_USR_WATCHDOG_PRIO, (OS_STK *)&AppTaskUsrWatchdogStk[0], (INT32U ) APP_CFG_TASK_USR_WATCHDOG_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个定时器任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_timer, (void *) 0, (OS_STK *)&AppTaskUsrTimerStk[APP_CFG_TASK_USR_TIMER_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_TIMER_PRIO, (INT16U ) APP_CFG_TASK_USR_TIMER_PRIO, (OS_STK *)&AppTaskUsrTimerStk[0], (INT32U ) APP_CFG_TASK_USR_TIMER_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个RTC任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_rtc, (void *) 0, (OS_STK *)&AppTaskUsrRtcStk[APP_CFG_TASK_USR_RTC_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_RTC_PRIO, (INT16U ) APP_CFG_TASK_USR_RTC_PRIO, (OS_STK *)&AppTaskUsrRtcStk[0], (INT32U ) APP_CFG_TASK_USR_RTC_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个网络任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_network, (void *) 0, (OS_STK *)&AppTaskUsrNetworkStk[APP_CFG_TASK_USR_NETWORK_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_NETWORK_PRIO, (INT16U ) APP_CFG_TASK_USR_NETWORK_PRIO, (OS_STK *)&AppTaskUsrNetworkStk[0], (INT32U ) APP_CFG_TASK_USR_NETWORK_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个心跳包任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_heart, (void *) 0, (OS_STK *)&AppTaskUsrHeartStk[APP_CFG_TASK_USR_HEART_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_HEART_PRIO, (INT16U ) APP_CFG_TASK_USR_HEART_PRIO, (OS_STK *)&AppTaskUsrHeartStk[0], (INT32U ) APP_CFG_TASK_USR_HEART_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个相机任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_camera, (void *) 0, (OS_STK *)&AppTaskUsrCameraStk[APP_CFG_TASK_USR_CAMERA_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_CAMERA_PRIO, (INT16U ) APP_CFG_TASK_USR_CAMERA_PRIO, (OS_STK *)&AppTaskUsrCameraStk[0], (INT32U ) APP_CFG_TASK_USR_CAMERA_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个内部参数获取任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_inside_para_sensor, (void *) 0, (OS_STK *)&AppTaskUsrInsideSensorStk[APP_CFG_TASK_USR_INSIDE_SENSOR_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_INSIDE_SENSOR_PRIO, (INT16U ) APP_CFG_TASK_USR_INSIDE_SENSOR_PRIO, (OS_STK *)&AppTaskUsrInsideSensorStk[0], (INT32U ) APP_CFG_TASK_USR_INSIDE_SENSOR_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个多参数获取任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_many_para_sensor, (void *) 0, (OS_STK *)&AppTaskUsrManyParaSensorStk[APP_CFG_TASK_USR_MANY_PARA_SENSOR_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_MANY_PARA_SENSOR_PRIO, (INT16U ) APP_CFG_TASK_USR_MANY_PARA_SENSOR_PRIO, (OS_STK *)&AppTaskUsrManyParaSensorStk[0], (INT32U ) APP_CFG_TASK_USR_MANY_PARA_SENSOR_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); /* 创建一个IMU任务 */ OSTaskCreateExt((void (*)(void *)) usr_task_imu, (void *) 0, (OS_STK *)&AppTaskUsrImuSensorStk[APP_CFG_TASK_USR_IMU_SENSOR_STK_SIZE - 1], (INT8U ) APP_CFG_TASK_USR_IMU_SENSOR_PRIO, (INT16U ) APP_CFG_TASK_USR_IMU_SENSOR_PRIO, (OS_STK *)&AppTaskUsrImuSensorStk[0], (INT32U ) APP_CFG_TASK_USR_IMU_SENSOR_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); }