天天看点

【LiteOS】LiteOS任务篇-源码分析-系统启动函数

目录

前言

链接

参考

开启调度

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-&gt;usTaskStatus |= OS_TASK_STATUS_RUNNING;</code>

手动更新 PSP 值,恢复到栈顶

更新 LR 寄存器

开启中断

跳转到当前任务的 PC ,继续运行任务。

图-Priority config

【LiteOS】LiteOS任务篇-源码分析-系统启动函数

该函数部分变量源码代码(参考)

文件 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 中

继续阅读