Skip to content

Commit b01ea1d

Browse files
committed
实现OS_TCB结构体中.FlagsPend.FlagsRdy.FlagsOpt成员变量
1 parent bf4881c commit b01ea1d

File tree

3 files changed

+20
-14
lines changed

3 files changed

+20
-14
lines changed

changelog.md

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@
350350
- 增加`flag_example.c`例程
351351
- 实现`OS_CFG_FLAG_MODE_CLR_EN`功能
352352
- `OSQPost`和`OSFlagPost`函数改为对`OS_OPT_POST_NO_SCHED`选项忽略
353+
- 实现`OS_TCB`结构体中`.FlagsPend`、`.FlagsRdy`、`.FlagsOpt`成员变量
353354

354355

355356

@@ -554,7 +555,7 @@
554555
555556
## v0.11.0
556557
557-
对齐并整理注释
558+
对齐并整理注释
558559
559560
**[del]** 删除无用的钩子函数(已被RT-Thread钩子函数接管)
560561
@@ -608,20 +609,15 @@
608609
609610
**[adjust]** `OSQPost`和`OSFlagPost`函数改为对`OS_OPT_POST_NO_SCHED`选项忽略
610611
612+
**[add]** 实现`OS_TCB`结构体中`.FlagsPend`、`.FlagsRdy`、`.FlagsOpt`成员变量
613+
611614
612615
613616
# TODO
614617
615618
## v1.1.0
616619
617-
1. OS_TCB
618-
619-
```c
620-
OS_FLAGS FlagsPend; /* Event flag(s) to wait on */
621-
OS_FLAGS FlagsRdy; /* Event flags that made task ready to run */
622-
OS_OPT FlagsOpt; /* Options (See OS_OPT_FLAG_xxx) */
623-
```
620+
1. 实现广播消息队列
624621
625-
2. 实现广播消息队列
626-
5. 尽力实现`os_pend_multi.c`
622+
2. 尽力实现`os_pend_multi.c`
627623

uCOS-III/os.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,11 +185,11 @@ extern "C" {
185185
#define OS_TASK_PEND_ON_FLAG (OS_STATE)( 1u) /* Pending on event flag group */
186186
#define OS_TASK_PEND_ON_TASK_Q (OS_STATE)( 2u) /* Pending on message to be sent to task */
187187
//#define OS_TASK_PEND_ON_MULTI (OS_STATE)( 3u) /* Pending on multiple semaphores and/or queues */
188-
//#define OS_TASK_PEND_ON_COND (OS_STATE)( 3u) /* Pending on condition variable 3.08 */
189188
#define OS_TASK_PEND_ON_MUTEX (OS_STATE)( 4u) /* Pending on mutual exclusion semaphore */
190189
#define OS_TASK_PEND_ON_Q (OS_STATE)( 5u) /* Pending on queue */
191190
#define OS_TASK_PEND_ON_SEM (OS_STATE)( 6u) /* Pending on semaphore */
192191
#define OS_TASK_PEND_ON_TASK_SEM (OS_STATE)( 7u) /* Pending on signal to be sent to task */
192+
//#define OS_TASK_PEND_ON_COND (OS_STATE)( 8u) /* Pending on condition variable 3.08 */
193193

194194
/*
195195
------------------------------------------------------------------------------------------------------------------------

uCOS-III/os_flag.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,9 +531,14 @@ OS_FLAGS OSFlagPend (OS_FLAG_GRP *p_grp,
531531
p_tcb->PendStatus = OS_STATUS_PEND_OK; /* Clear pend status */
532532
p_tcb->TaskState |= OS_TASK_STATE_PEND;
533533
p_tcb->PendOn = OS_TASK_PEND_ON_FLAG;
534-
#if OS_CFG_DBG_EN > 0u && !defined PKG_USING_UCOSIII_WRAPPER_TINY
534+
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY
535+
#if OS_CFG_DBG_EN > 0u
535536
p_tcb->DbgNamePtr = p_grp->NamePtr;
536537
p_grp->DbgNamePtr = p_tcb->Task.name;
538+
#endif
539+
p_tcb->FlagsPend = flags; /* Save the flags that we need to wait for */
540+
p_tcb->FlagsOpt = opt; /* Save the type of wait we are doing */
541+
p_tcb->FlagsRdy = 0u;
537542
#endif
538543
CPU_CRITICAL_EXIT();
539544

@@ -551,7 +556,10 @@ OS_FLAGS OSFlagPend (OS_FLAG_GRP *p_grp,
551556
CPU_CRITICAL_ENTER();
552557
p_tcb->TaskState &= ~OS_TASK_STATE_PEND; /* 更新任务状态 */
553558
p_tcb->PendOn = OS_TASK_PEND_ON_NOTHING; /* 清除当前任务等待状态 */
554-
#if OS_CFG_DBG_EN > 0u && !defined PKG_USING_UCOSIII_WRAPPER_TINY
559+
560+
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY
561+
p_tcb->FlagsRdy = p_grp->FlagGrp.set; /* Save flags that were ready */
562+
#if OS_CFG_DBG_EN > 0u
555563
p_tcb->DbgNamePtr = (CPU_CHAR *)((void *)" ");
556564
if(!rt_list_isempty(&(p_grp->FlagGrp.parent.suspend_thread)))
557565
{
@@ -563,7 +571,9 @@ OS_FLAGS OSFlagPend (OS_FLAG_GRP *p_grp,
563571
{
564572
p_grp->DbgNamePtr =(CPU_CHAR *)((void *)" "); /* 若为空,则清空当前.DbgNamePtr */
565573
}
566-
#endif
574+
#endif
575+
#endif
576+
567577
if(p_tcb->PendStatus == OS_STATUS_PEND_ABORT) /* Indicate that we aborted */
568578
{
569579
CPU_CRITICAL_EXIT();

0 commit comments

Comments
 (0)