os_core.c :OS的核心函数(例如:OSInit()初始化uC , OSSched()任务级别调度 , OSIntExit() 中断级别调度,pend,post,PendList,RdyList管理等)。
void OSInit (OS_ERR *p_err):
调用初始化钩子函数 (设置中断使用的堆栈地址)
初始化系统全局变量
初始化Prio、ReadList
void OSIntExit (void):
在
OS_CPU_SysTickHandler()中用到了,当中断处理完成之后,并且没有中断嵌套,查看是否有新的高优先级任务,如果有启动任务调度。
void OSSched (void):
在任务中调用,切换到更高优先级的任务。
void OSSchedLock (OS_ERR *p_err):
当任务调度发生时,阻止任务调度,直到调用了
OSSchedUnlock()。 主要是
OSSchedLockNestingCtr++;
void OSSchedUnlock (OS_ERR *p_err):
主要是OSSchedLockNestingCtr--; 当OSSchedLockNestingCtr > 0时表示调度器还锁着,
*p_err = OS_ERR_SCHED_LOCKED; ==0调用OSSched()。
当启动了相同任务优先级时间片轮询(OS_CFG_SCHED_ROUND_ROBIN_EN==1 )
void OSSchedRoundRobinCfg (CPU_BOOLEAN en,
OS_TICK dflt_time_quanta,
OS_ERR *p_err):
决定是否开启时间片轮询,设置任务的默认时间片时间(多少个SysTick),默认为
OSCfg_TickRate_Hz / 10
void OSSchedRoundRobinYield (OS_ERR *p_err):
当一个任务在给定的时间片之前完成了任务,可以调用此函数放弃CPU让给相同优先级的等待运行的任务。
个人感觉这个方法与uC不太相符,因为uC要求每个任务都要等待一个事件的发生,应该不会用到此函数。
void OSStart (OS_ERR *p_err):