sched/tcb: add free tcb flag to support static tcb
Add support for static tcb, applications in some special case can initialize system resources in advance through static tcb. | static struct task_tcb_s g_tcb; | | memset(&g_tcb, 0, sizeof(struct task_tcb_s)); | g_tcb.cmn.flags = TCB_FLAG_TTYPE_KERNEL; | nxtask_init(&g_tcb, "PTCB", 101, NULL, 1024, ptcb_task, NULL, NULL, NULL); | | ... | nxtask_activate(&g_tcb.cmn); Signed-off-by: chao an <anchao@lixiang.com>
This commit is contained in:
parent
91f0a0f1a8
commit
9489953230
5 changed files with 11 additions and 5 deletions
|
@ -303,9 +303,11 @@ int exec_module(FAR struct binary_s *binp,
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Note that tcb->flags are not modified. 0=normal task */
|
||||
/* Note that tcb->cmn.flags are not modified. 0=normal task */
|
||||
|
||||
/* tcb->flags |= TCB_FLAG_TTYPE_TASK; */
|
||||
/* tcb->cmn.flags |= TCB_FLAG_TTYPE_TASK; */
|
||||
|
||||
tcb->cmn.flags |= TCB_FLAG_FREE_TCB;
|
||||
|
||||
/* Initialize the task */
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@
|
|||
#define TCB_FLAG_HEAP_DUMP (1 << 11) /* Bit 11: Heap dump */
|
||||
#define TCB_FLAG_DETACHED (1 << 12) /* Bit 12: Pthread detached */
|
||||
#define TCB_FLAG_FORCED_CANCEL (1 << 13) /* Bit 13: Pthread cancel is forced */
|
||||
#define TCB_FLAG_FREE_TCB (1 << 14) /* Bit 14: Free tcb after exit */
|
||||
|
||||
/* Values for struct task_group tg_flags */
|
||||
|
||||
|
|
|
@ -163,7 +163,10 @@ int nxsched_release_tcb(FAR struct tcb_s *tcb, uint8_t ttype)
|
|||
|
||||
/* And, finally, release the TCB itself */
|
||||
|
||||
kmm_free(tcb);
|
||||
if (tcb->flags & TCB_FLAG_FREE_TCB)
|
||||
{
|
||||
kmm_free(tcb);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -91,7 +91,7 @@ int nxthread_create(FAR const char *name, uint8_t ttype, int priority,
|
|||
|
||||
/* Setup the task type */
|
||||
|
||||
tcb->cmn.flags = ttype;
|
||||
tcb->cmn.flags = ttype | TCB_FLAG_FREE_TCB;
|
||||
|
||||
/* Initialize the task */
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ static int nxtask_spawn_create(FAR const char *name, int priority,
|
|||
|
||||
/* Setup the task type */
|
||||
|
||||
tcb->cmn.flags = TCB_FLAG_TTYPE_TASK;
|
||||
tcb->cmn.flags = TCB_FLAG_TTYPE_TASK | TCB_FLAG_FREE_TCB;
|
||||
|
||||
/* Initialize the task */
|
||||
|
||||
|
|
Loading…
Reference in a new issue