mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-09-24 06:13:37 +08:00
删除文件 System/sv_int_pend_flag.c
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user