天天看點

【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 中

繼續閱讀