1.add an API of finding the first user task in xiuos task manage list; 2.add restart application after ota

This commit is contained in:
Wang_Weigen
2021-11-10 17:31:39 +08:00
parent f3d527cf70
commit eb14677832
11 changed files with 86 additions and 4 deletions
@@ -159,6 +159,7 @@ int32 KTaskCreate(const char *name,
void KTaskQuit(void);
#ifdef SEPARATE_COMPILE
int UTaskSearch(void);
int32 UTaskCreate(const char *name,
void (*entry)(void *parameter),
void *parameter,
@@ -33,6 +33,7 @@ enum KernelServiceEnum
KS_USER_TASK_CREATE ,
KS_USER_TASK_STARTUP ,
KS_USER_TASK_DELETE,
KS_USER_TASK_SEARCH,
KS_USER_TASK_EXECEXIT,
KS_USER_TASK_CORE_COMBINE,
KS_USER_TASK_CORE_UNCOMBINE,
@@ -120,6 +120,11 @@ uintptr_t KsTaskDelete(uint32_t knum,uintptr_t *param, uint8_t num)
return (uintptr_t)ret;
}
uintptr_t KsUserTaskSerach(uint32_t knum,uintptr_t *param, uint8_t num )
{
return (uintptr_t)UTaskSearch();
}
extern void KTaskQuit(void);
uintptr_t KsTaskQuit(uint32_t knum,uintptr_t *param, uint8_t num )
{
@@ -567,6 +572,7 @@ struct KernelService g_service_table[256] __attribute__ ((section (".g_service_
[KS_USER_TASK_CREATE] = { KsTaskCreate, 5 },
[KS_USER_TASK_STARTUP] = { KsStartupTask, 1 },
[KS_USER_TASK_DELETE] = { KsTaskDelete, 1 },
[KS_USER_TASK_SEARCH] = { KsUserTaskSerach, 0 },
[KS_USER_TASK_EXECEXIT] = { KsTaskQuit, 0 },
[KS_USER_TASK_CORE_COMBINE] = { KsTaskCoreCombine, 2 },
[KS_USER_TASK_CORE_UNCOMBINE] = { KsTaskCoreUnCombine, 1 },
+30
View File
@@ -1052,6 +1052,36 @@ x_err_t KTaskWakeup(int32 id)
#ifdef SEPARATE_COMPILE
/**
* find the first user task in manage list.
*
* @param
*
* @note in interrupt status,this function is not permitted to call.
*/
int UTaskSearch(void)
{
x_base lock = 0;
KTaskDescriptorType temp_task = NONE;
struct SysDoubleLinklistNode *node = NONE;
lock = CriticalAreaLock();
DOUBLE_LINKLIST_FOR_EACH(node,&xiaoshan_task_head)
{
temp_task = SYS_DOUBLE_LINKLIST_ENTRY(node, struct TaskDescriptor, link);
if (1 == temp_task->task_dync_sched_member.isolation_flag)
{
CriticalAreaUnLock(lock);
return temp_task->id.id;
}
}
CriticalAreaUnLock(lock);
return -1;
}
/**
*
* This function init a user task in dynamic way .