目录
前言
链接
参考
开启调度
LOS_Start 函数源码
osTickStart 函数源码
LOS_StartToRun 函数源码
20201009
移植好内核后,开始实战内核。
源码分析一般都在代码注释中。
本文LiteOS采用非接管中断方式。
本文源码基于 LiteOS 2018 源码,最新官方源码中都有注释,可参考。
本文源码与最新官方源码区别
原理一样,源码稍有不同,且最新官方源码中带有注释。
LiteOS源码链接
常见问题
华为开发者社区
华为LiteOS官方教程
我的源码
包含 裸机源码
LiteOS 工程模板
其它关于 LiteOS 的 demo 及 note
上面链接
具体的源码分析可看源码篇
主要内容
配置RTOS的节拍定时器
启动调度
宏说明
<code>OS_SYS_CLOCK</code> : 系统时钟频率,单位:Hz (硬系统时钟频率,即是CPU频率)
<code>LOSCFG_BASE_CORE_TICK_PER_SECOND</code> : 每秒心跳次数 (软系统时钟频率,即是RTOS频率)
主要内容为:
检查参数
配置RTOS系统时钟滴答定时器
分析再源码注释中
简略步骤
将 SysTick 和 PendSVd 优先级设置为最低
将 g_bTaskScheduled 至为 1
设置控制寄存器为 CONTROL
更新当前运行任务 <code>Set g_stLosTask.pstRunTask = g_stLosTask.pstNewTask;</code>
更新当前运行任务的任务状态 <code>Set g_stLosTask.pstRunTask->usTaskStatus |= OS_TASK_STATUS_RUNNING;</code>
手动更新 PSP 值,恢复到栈顶
更新 LR 寄存器
开启中断
跳转到当前任务的 PC ,继续运行任务。
图-Priority config

该函数部分变量源码代码(参考)
文件 los_dispatch_keil.S 中
<code>OS_NVIC_SYSPRI2 EQU 0xE000ED20</code>
<code>OS_NVIC_PENDSV_PRI EQU 0xF0F00000</code>
文件 los_task.c 中
<code>LITE_OS_SEC_BSS BOOL g_bTaskScheduled;</code>
<code>LITE_OS_SEC_BSS ST_LOS_TASK g_stLosTask;</code>
文件 los_task.ph 中