support dynamic task create in cmsis

1. enable TOS_CFG_TASK_DYNAMIC_CREATE_EN
2. use osThreadDynamicDef to define a dynamic created cmsis task
3. use osThreadCreate/osThreadTerminate to create/destroy this cmsis task
4. see sample hello_world
This commit is contained in:
daishengdong
2020-02-11 11:10:48 +08:00
parent f9ebd98b82
commit e4bbdbf9ab
5 changed files with 72 additions and 38 deletions

View File

@@ -75,9 +75,20 @@ osThreadId osThreadCreate(const osThreadDef_t *thread_def, void *argument)
return NULL;
}
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
if (!thread_def->stackbase && !thread_def->task) {
k_task_t *task;
err = tos_task_create_dyn(&task, thread_def->name, (k_task_entry_t)thread_def->pthread,
argument, priority_cmsis2knl(thread_def->tpriority),
thread_def->stacksize, thread_def->timeslice);
return err == K_ERR_NONE ? task : NULL;
}
#endif
err = tos_task_create((k_task_t *)thread_def->task, thread_def->name, (k_task_entry_t)thread_def->pthread,
argument, priority_cmsis2knl(thread_def->tpriority), thread_def->stackbase,
thread_def->stacksize, thread_def->timeslice);
return err == K_ERR_NONE ? thread_def->task : NULL;
}