企业移动网站制作,东莞seo排名公司,炫佑网站建设,制作彩票网站需要多少钱目录 内核#xff1a;多任务#xff08;ucos_ii.h文件的函数#xff09;Task创建Task创建#xff08;扩展#xff09;Task删除/请求删除Task改变Task优先级Task挂起和恢复Task信息获取Task调度器上锁和开锁 内核#xff1a;调度#xff08;oc_core.c文件的函数#xff… 目录 内核多任务ucos_ii.h文件的函数Task创建Task创建扩展Task删除/请求删除Task改变Task优先级Task挂起和恢复Task信息获取Task调度器上锁和开锁 内核调度oc_core.c文件的函数OS_TCB任务控制块初始化任务控制块列表(ucos_ii.h文件的函数)系统调用主动让渡CPU发生中断强制当前任务让渡CPU就绪表(ucos_ii.h文件的函数)设置任务进入就绪态设置任务脱离就绪态在就绪表中找到优先级最高(数最小)的任务 内核多任务ucos_ii.h文件的函数
Task创建
#if OS_TASK_CREATE_EN 0u
INT8U OSTaskCreate (void (*task) (void *p_arg),void *p_arg,OS_STK *ptos,INT8U prio);
#endifTask创建扩展
#if OS_TASK_CREATE_EXT_EN 0u
INT8U OSTaskCreateExt (void (*task) (void *p_arg),void *p_arg, OS_STK *ptos, INT8U prio, INT16U id, OS_STK *pbos, INT32U stk_size, void *pext,INT16U opt);
#endifTask删除/请求删除Task
#if OS_TASK_DEL_EN 0u
INT8U OSTaskDel (INT8U prio);
INT8U OSTaskDelReq (INT8U prio);
#endif改变Task优先级
#if OS_TASK_CHANGE_PRIO_EN 0u
INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio);
#endifTask挂起和恢复
#if OS_TASK_SUSPEND_EN 0u
INT8U OSTaskResume (INT8U prio);
INT8U OSTaskSuspend (INT8U prio);
#endifTask信息获取
#if OS_TASK_QUERY_EN 0u
INT8U OSTaskQuery (INT8U prio,OS_TCB *p_task_data);
#endifTask调度器上锁和开锁
#if OS_SCHED_LOCK_EN 0u
void OSSchedLock (void);
void OSSchedUnlock (void);
#endif内核调度oc_core.c文件的函数
OS_TCB任务控制块初始化
INT8U OS_TCBInit (INT8U prio,OS_STK *ptos,OS_STK *pbos,INT16U id,INT32U stk_size,void *pext,INT16U opt);任务控制块列表(ucos_ii.h文件的函数)
OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS OS_N_SYS_TASKS];系统调用主动让渡CPU
void OS_Sched (void)
{#if OS_CRITICAL_METHOD 3u /* Allocate storage for CPU status register */OS_CPU_SR cpu_sr 0u;#endifOS_ENTER_CRITICAL();if (OSIntNesting 0u) /* Schedule only if all ISRs done and ... */{if (OSLockNesting 0u) /* ... scheduler is not locked */{OS_SchedNew();OSTCBHighRdy OSTCBPrioTbl[OSPrioHighRdy];if (OSPrioHighRdy ! OSPrioCur) /* No Ctx Sw if current task is highest rdy */{#if OS_TASK_PROFILE_EN 0uOSTCBHighRdy-OSTCBCtxSwCtr; /* Inc. # of context switches to this task */#endifOSCtxSwCtr; /* Increment context switch counter */OS_TASK_SW(); /* Perform a context switch */}}}OS_EXIT_CRITICAL();
}发生中断强制当前任务让渡CPU
void OSIntExit (void)
{#if OS_CRITICAL_METHOD 3u /* Allocate storage for CPU status register */OS_CPU_SR cpu_sr 0u;#endifif (OSRunning OS_TRUE){OS_ENTER_CRITICAL();if (OSIntNesting 0u) /* Prevent OSIntNesting from wrapping */{OSIntNesting--;}if (OSIntNesting 0u) /* Reschedule only if all ISRs complete ... */{if (OSLockNesting 0u) /* ... and not locked. */{OS_SchedNew();OSTCBHighRdy OSTCBPrioTbl[OSPrioHighRdy];if (OSPrioHighRdy ! OSPrioCur) /* No Ctx Sw if current task is highest rdy */{#if OS_TASK_PROFILE_EN 0uOSTCBHighRdy-OSTCBCtxSwCtr; /* Inc. # of context switches to this task */#endifOSCtxSwCtr; /* Keep track of the number of ctx switches */OSIntCtxSw(); /* Perform interrupt level ctx switch */}}}OS_EXIT_CRITICAL();}
}就绪表(ucos_ii.h文件的函数)
OS_EXT OS_PRIO OSRdyTbl[OS_RDY_TBL_SIZE]; /* Table of tasks which are ready to run */设置任务进入就绪态
设置任务脱离就绪态
在就绪表中找到优先级最高(数最小)的任务