mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-09-22 05:13:39 +08:00
+13
-5
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user