forked from gary/BCU
2
0
Fork 0
BCU/library/bsp/bsp_task.h

92 lines
2.4 KiB
C

/******************************************************************************
* @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