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:
chao an 2024-02-26 15:50:56 +08:00 committed by Xiang Xiao
parent 91f0a0f1a8
commit 9489953230
5 changed files with 11 additions and 5 deletions

View file

@ -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 */

View file

@ -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 */

View file

@ -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;

View file

@ -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 */

View file

@ -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 */