删除文件 System/sv_int_pend_flag.c

This commit is contained in:
零中断延迟的RTOS
2025-02-08 08:22:53 +00:00
committed by Gitee
parent 2d695347f1
commit 8f0baf9155
-175
View File
@@ -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