- 打卡等级:偶尔看看I
- 打卡总天数:11
- 最近打卡:2025-06-21 11:38:26
高级会员
- 积分
- 564
|
发表于 2025-5-12 17:14:30
|
显示全部楼层
Sysidle函数创建过程是不是这样?
//uCreateTask(任务名称, 任务优先级, 任务栈大小, 安全运行时, 保留)
uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
{
/**...**/
}
/***************************************************************************/
/**
\brief 静态创建一般任务
\param[in] task 任务名称
\param[in] pri 任务优先级
\param[in] tss 任务栈大小(单位为字节)
\param[in] srt 安全运行时(单位为时间片,0为无限长)
\param[in] res 保留
\param[in] add{...} 附加任务代码
\return 无
*/
#define uCreateTask(task, pri, tss, srt, res) \
sCSV_CreateTask(task, pri, tss, srt, res)
/***************************************************************************/
/**
\brief 任务节点(控制块)
\details CosyOS 的 任务节点 即 任务控制块,包含了任务所需的全部关键信息。
任务静态创建时,任务节点为静态;任务动态创建时,任务节点为动态。
*/
typedef struct s_tasknode_ts
{
mTaskNode_Head_ /*!< MSP:stacklen,PSP:psp,MSP+PSP:psp */
s_u8_t opri; /*!< 任务创建时的优先级 */
m_stacksize_t stacksize; /*!< 任务栈size */
struct s_tasknode_ts _OBJ_MEM_ * _STATIC_MEM_ *dualhandle; /*!< 任务二重句柄:指向任务句柄的指针 */
s_voidvoid_tfp entry; /*!< 任务函数入口指针 */
#if SYSCFG_DEBUGGING == __ENABLED__
const char _CONST_MEM_ *name; /*!< 任务名称(字符串)*/
#endif
#if SYSCFG_SAFERUNTIME == __ENABLED__
s_u16_t saferuntime; /*!< 安全运行时设定值 */
#endif
s_u8_t _OBJ_MEM_ *bsp; /*!< base stack pointer,任务栈的起始地址 */
s_u8_t create; /*!< 任务创建 [0:静态创建,1:动态创建未重分配,2:动态创建已重分配] */
s_u8_t pri; /*!< 任务当前优先级 */
s_u8_t status; /*!< 任务状态 */
s_u8_t blocktype; /*!< 阻塞类型 */
s_delay_t timer; /*!< 软件定时器(延时/超时计数)*/
void _STATIC_MEM_ *handle; /*!< 内核对象句柄,仅指向静态对象 */
#if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__
s_sharing_t tc_counter; /*!< 滴答周期计数器 */
#endif
#if SYSCFG_DEBUGGING == __ENABLED__
s_u32_t usedtime[2]; /*!< CPU 使用时间计数 */
m_stacksize_t stacklen_max; /*!< 任务栈的实际占用在历史上的最大值 */
#endif
#if SYSCFG_SAFERUNTIME == __ENABLED__
s_u32_t srt_counter; /*!< 安全运行时计数器 */
#endif
struct s_tasknode_ts _OBJ_MEM_ *last_b; /*!< 上一节点 of 阻塞链表 */
struct s_tasknode_ts _OBJ_MEM_ *next_b; /*!< 下一节点 of 阻塞链表 */
struct s_tasknode_ts _OBJ_MEM_ *next_t; /*!< 下一节点 of 定时器/超时链表 */
#if SYSCFG_SAMEPRISCHEDULE
struct s_tasknode_ts _OBJ_MEM_ *last; /*!< 上一节点 of 优先级组 */
struct s_tasknode_ts _OBJ_MEM_ *next; /*!< 下一节点 of 优先级组 */
#endif
mTaskNode_Tail_ /*!< MCS51/251:mUserReg_DEFc_,减栈:psp_top */
}s_tasknode_ts;
typedef s_tasknode_ts _OBJ_MEM_ *s_tasknode_tsp; /*!< 任务句柄 */
/*
* 创建任务
*/
/** 静态创建,启用 DEBUGGING,启用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, res ? res : #name, srt, u_taskstack_##name, 0}; \
void name(void)
//-----------------------------------------------------------------
// uCreateTask(任务名称, 任务优先级, 任务栈大小, 安全运行时, 保留)
// uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
// sCSV_CreateTask(任务名称, 任务优先级, 任务栈大小, 安全运行时, 保留)
// sCSV_CreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
{
/**...**/
}
//最终扩展为:
void Sysidle(void);
s_tasknode_ts u_taskhand_Sysidle;
s_tasknode_tsp u_taskhandle_Sysidle = &u_taskhand_Sysidle;
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_Sysidle[SYSCFG_STACKSIZE_SYSIDLE];
s_tasknode_ts u_taskhand_Sysidle = {0, 0, SYSCFG_STACKSIZE_SYSIDLE, &u_taskhandle_Sysidle, Sysidle, _taskname ? _taskname : Sysidle, 0, u_taskstack_Sysidle, 0};
void Sysidle(void)
{
/**...**/
}
|
|