sdwys
发表于 2024-11-7 17:12:20
能否介绍一下
/* PendSV struct */注释之下的各结构体用途。
CosyOS
发表于 2024-11-8 10:01:07
sdwys 发表于 2024-11-7 17:12
能否介绍一下
/* PendSV struct */注释之下的各结构体用途。
中断挂起服务_FIFO
在中断中调用的服务,不在本地执行,而是把服务的内容写入局部的结构体中,
再把结构体指针入 PendSV_FIFO,再触发 PendSV,而后在 PendSV 中执行。
此处的 PendSV struct 以后将调整为 中断挂起服务_FIFO 结构体类型定义。
当用户在中断中调用 中断挂起服务_FIFO 时,根据不同的服务功能,将采用
这些 结构体类型 来定义 局部的结构体变量,来装载 服务的内容。
如第一个结构体类型定义:
typedef struct
{
const s_u8_t svid; /*!< 服务ID */
s_tasknode_tsp node; /*!< 任务句柄 */
}sp_task_ts;
typedef sp_task_ts _STATIC_MEM_ *sp_task_tsp;
当在中断中调用以下4项 中断挂起服务_FIFO 时,
会在局部定义此类型的结构体变量,来装载 服务的内容。
iResumeTask(task)、
iSuspendTask(task)、
iDeleteTask(task)、
iClearBlock(task)。
下面以 恢复任务 为例:
#define iResumeTask(task) sPSV_ResumeTask(u_taskhandle_##task)
/** 恢复任务 */
#define sPSV_ResumeTask(load) \
do{ \
static sp_task_ts u_psv = {OS_SVID_RESUMETASK, OS_NULL}; /*!< 装载服务内容,其中服务ID为常量:OS_SVID_RESUMETASK */ \
u_psv.node = load; /*!< 装载服务内容,任务句柄为变量,需动态装载 */ \
mPendSV_FIFOLoad; /*!< 服务的结构体指针 &u_psv 入 PendSV_FIFO,再触发 PendSV */ \
}while(false)
s_u8_t sPendSV_Handler(void) MCUCFG_C51USING
{
/* 中断挂起服务_FIFO 执行服务 */
#if MCUCFG_PENDSVFIFO_DEPTH > 0
mPendSV_FIFOHandle;
#endif
mPendSV_FIFOHandle,按 先入先出,依此取出 服务的结构体指针,
再获取 SVID,而后调用 函数指针 执行服务。
中断挂起服务_FIFO 相关的技术细节还有很多,先介绍个大概吧。
cylnpy
发表于 2024-11-8 16:19:17
本帖最后由 cylnpy 于 2024-11-8 17:17 编辑
CosyOS 发表于 2023-9-20 17:25
通知
CosyOS最新版下载是在首页吗,首页 CosyOS-II-STC32G-TEST-V3.0.1-20240707-1工程模板编译报中断号0~31错误是哪里设置不对吗。
胡嘉鑫
发表于 2024-11-8 17:11:11
51跑os太猛了
DIY365
发表于 2024-11-8 18:29:28
胡嘉鑫 发表于 2024-11-8 17:11
51跑os太猛了
嘎嘎一嘎子
CosyOS
发表于 2024-11-8 21:32:37
本帖最后由 CosyOS 于 2024-11-8 22:53 编辑
cylnpy 发表于 2024-11-8 16:19
CosyOS最新版下载是在首页吗,首页 CosyOS-II-STC32G-TEST-V3.0.1-20240707-1工程模板编译报中断号0~31错 ...下载就在首页顶楼!
看这里:
https://www.stcaimcu.com/forum.p ... 4100&extra=page%3D5
hande5
发表于 2024-11-9 08:31:15
学习了
胡嘉鑫
发表于 2024-11-10 14:16:56
学习
胡嘉鑫
发表于 2024-11-10 14:16:58
学习
耀子
发表于 2024-11-13 15:36:05
这个得认真学习一下