diff --git a/System/sv_int_pend_flag.c b/System/sv_int_pend_flag.c deleted file mode 100644 index 061cdff2..00000000 --- a/System/sv_int_pend_flag.c +++ /dev/null @@ -1,175 +0,0 @@ -/**************************************************************************//** - * @item CosyOS-II Kernel - * @file sv_int_pend_flag.c - * @brief 中断挂起服务_FLAG - * @details 仅在 pendsv_hook 中调用并执行。 - * @author 迟凯峰 - * @version V3.4.0 - * @date 2025.01.06 - ******************************************************************************/ - -#include "os_link.h" -#if SYSCFG_PENDSVHOOK == __ENABLED__ - -/** - @addtogroup CosyOS_内核服务 - @{ - *//** - \defgroup 中断挂起服务_FLAG - \brief 当需要在中断中完成特定的服务功能时,可先设置一个标志位,再触发 PendSV; - 而后在 pendsv_hook 中查询该标志位,为真就清除标志位,而后调用服务。 - @{ - */ - -/** - \brief 清除就绪延时 - \param 无 - \return 无 - */ -void sp_clear_delay(void) MCUCFG_C51USING -{ - if(s_sign_ready_delay){ - s_sign_ready_delay = false; - s_task_current->timer = 0; - } -} - -/** - \brief 切换任务 - \param[in] htask 任务句柄 - \return 无 - */ -void sp_switch_task(s_tasknode_tsp htask) MCUCFG_C51USING -{ - if(htask == OS_NULL) return; - if(htask->status < OS_STATUS_STOPPED){ - s_switch_taskpri(htask); - } -} - -/** - \brief 恢复任务 - \param[in] htask 任务句柄 - \return 无 - */ -void sp_resume_task(s_tasknode_tsp htask) MCUCFG_C51USING -{ - if(htask == OS_NULL) return; - if(htask->status & OS_STATUS_SUSPENDED){ - htask->status &= (~OS_STATUS_SUSPENDED & 0xFF); - #if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ - htask->tc_counter = 0; - #endif - s_switch_ready(htask); - } -} - -/** - \brief 挂起任务 - \param[in] htask 任务句柄 - \return 无 - */ -void sp_suspend_task(s_tasknode_tsp htask) MCUCFG_C51USING -{ - if(htask == OS_NULL) return; - if(htask->status < OS_STATUS_SUSPENDED){ - htask->status |= OS_STATUS_SUSPENDED; - if(htask == s_task_current){ - s_sign_schedule = true; - } - } -} - -/** - \brief 删除任务 - \param[in] htask 任务句柄 - \return 无 - */ -void sp_delete_task(s_tasknode_tsp htask) MCUCFG_C51USING -{ - if(htask == OS_NULL) return; - if(htask->status < OS_STATUS_DELETED){ - htask->status = OS_STATUS_DELETED; - if(htask == s_task_current){ - s_sign_schedule = true; - } - } -} - -/** - \brief 设置任务优先级 - \param[in] htask 任务句柄 - \param[in] npri 新优先级 - \return 无 - */ -void sp_set_taskpri(s_tasknode_tsp htask, s_u8_t npri) MCUCFG_C51USING -{ - if(htask == OS_NULL) return; - if(htask->status < OS_STATUS_STOPPED){ - if(htask->pri != npri){ - s_set_taskpri(htask, npri); - s_sign_schedule = true; - } - } -} - -/** - \brief 设置阻塞(时间) - \param[in] htask 任务句柄 - \param[in] tick 阻塞时间 [单位:滴答周期,0:等效于清除阻塞,~0:无限阻塞] - \return 无 - */ -void sp_set_block(s_tasknode_tsp htask, s_delay_t tick) MCUCFG_C51USING -{ - if(htask == OS_NULL) return; - if(htask->status == OS_STATUS_BLOCKED){ - if(!tick){ - htask->status = OS_STATUS_READY; - htask->timer = 0; - #if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ - htask->tc_counter = 0; - #endif - s_switch_taskpri(htask); - } - else{ - htask->timer = tick; - } - } -} - -/** - \brief 清除阻塞(状态) - \param[in] htask 任务句柄 - \return 无 - */ -void sp_clear_block(s_tasknode_tsp htask) MCUCFG_C51USING -{ - if(htask == OS_NULL) return; - if(htask->status == OS_STATUS_BLOCKED){ - htask->status = OS_STATUS_READY; - htask->timer = 0; - #if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ - htask->tc_counter = 0; - #endif - s_switch_taskpri(htask); - } -} - -#if SYSCFG_BINARY == __ENABLED__ -/** - \brief 上锁or给予二值信号量 - \param[in] hbin 二值信号量句柄 - \param[in] val 0:上锁,1:给予 - \return 无 - */ -void sp_write_binary(s_binary_tsp hbin, bool val) MCUCFG_C51USING -{ - hbin->binary = val; - if(!val) return; - s_switch_notnull(hbin->htask); -} -#endif - -/** @} */ -/** @} */ -#endif