/****************************************************************************** * @file bsp_task.h * @brief 任务组件框架 * @version V1 * @copyright ******************************************************************************/ #ifndef _BMS_TASK_H_ #define _BMS_TASK_H_ #ifdef __cplusplus extern "C" { #endif #include "kit_macro.h" /*任务结构*/ typedef struct _task_array_t { uint16_t task_id; uint16_t interval; uint16_t timeout; uint16_t wdog_tick; bool is_time_out; uint16_t stk_size; uint32_t *stk_array; NoArgFuncCall init_func; UintArgFunCall handler_func; struct _task_array_t *next_task; }task_array_t; /*任务变量定义*/ #define GLOBAL_TASK_VARS(_task_name, priority, interval, timeout,stk_size, init_func, handler_func, next_task) \ OS_STK stack_##_task_name[stk_size]; \ task_array_t _task_name = \ { \ (priority), \ (interval), \ (timeout), \ 0, \ false, \ stk_size, \ stack_##_task_name, \ init_func, \ handler_func, \ next_task, \ }\ /*任务变量定义*/ #define GLOBAL_TASK_VARS_CCM(_task_name, priority, interval, timeout,stk_size,init_func, handler_func,next_task) \ OS_STK stack_##_task_name[stk_size] __attribute__((section (".CCM_RAM"))); \ task_array_t _task_name = \ { \ (priority), \ (interval), \ (timeout), \ 0, \ false, \ stk_size, \ stack_##_task_name, \ init_func, \ handler_func, \ next_task, \ }\ void bsp_task_beat_wdog(void); void bsp_task_feed_wdog(uint32_t tick); uint32_t bsp_task_delay_ms(uint32_t dly); void bsp_task_set_timeout_call(UintArgFunCall call); /***************************************************************************** * @brief 任务模板创建 * @param[in] void: 无 * @return void *****************************************************************************/ kit_ret_e bsp_create_task(task_array_t* task, uint8_t * name); /***************************************************************************** * @brief 获取超时的任务 * @param[in] task_id: 任务id * @return void *****************************************************************************/ uint16_t bsp_task_get_wdog_timeout_tick(uint8_t task_id); #ifdef __cplusplus } #endif #endif