From b42f00cb8eb66af8ffe7d644e6be73d2cc4a44ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B6=E4=B8=AD=E6=96=AD=E5=BB=B6=E8=BF=9F=E7=9A=84RTOS?= Date: Tue, 15 Apr 2025 10:22:11 +0000 Subject: [PATCH] update System/sv_task.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 零中断延迟的RTOS --- System/sv_task.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/System/sv_task.c b/System/sv_task.c index 3aaed6c7..9840c214 100644 --- a/System/sv_task.c +++ b/System/sv_task.c @@ -4,8 +4,8 @@ * @brief 任务服务 * @details 仅在任务中调用并执行。 * @author 迟凯峰 - * @version V1.2.2 - * @date 2025.04.13 + * @version V1.2.3 + * @date 2025.04.15 ******************************************************************************/ #include "os_var.h" @@ -414,14 +414,19 @@ bool su_take_mutex(s_mutex_tsp hmut, s_delay_t tick) sv_insert_block_list(&hmut->htask); sv_task_remove_ready(s_task_current); s_task_current->status = OS_STATUS_BLOCKED; + s_task_current->blocktype = OS_BLOCKED_MUTEX; if(s_task_current->pri > hmut->otask->pri){ #if SYSCFG_SAMEPRISCHEDULE - sv_set_taskpri(hmut->otask, s_task_current->pri); + s_tasknode_tsp link = hmut->otask; + s_task_current->link = link; + do{ + sv_set_taskpri(link, s_task_current->pri); + link = link->link; + }while(link != OS_NULL); #else - sv_set_taskpri(hmut->otask, SYSCFG_TASKPRIORITY - 1); + sv_set_taskpri(hmut->otask, s_taskpri_ceiling++); #endif } - s_task_current->blocktype = OS_BLOCKED_MUTEX; s_task_current->timer = tick; s_task_current->handle = hmut; su_kernel_unlock0_psv(); @@ -457,6 +462,9 @@ void su_back_mutex(s_mutex_tsp hmut) if(!hmut->mutex){ if(s_task_current->pri > hmut->opri){ sv_set_taskpri(s_task_current, hmut->opri); + #if !SYSCFG_SAMEPRISCHEDULE + s_taskpri_ceiling--; + #endif } if(hmut->htask != OS_NULL){ sv_delete_block_list(&hmut->htask);