目錄
前言
連結
參考
開啟排程
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 中