華為Liteos和物聯網設備側sdk移植到stm32F03ZE霸道板子上
推薦官方教程:https://liteos.github.io/
啥是LIteos
“開源免費”的實時操作系統,集成了 LwM2M、CoAP、mbed TLS、LwIP 全套 IoT 互聯協議棧,且在 LwM2M 的基礎上,提供了 AgentTiny 模塊,用戶只需關注自身的應用,而不必關注 LwM2M 實現細節,直接使用 AgentTiny 封裝的接口即可簡單快速實現與雲平台安全可靠的連接。屬於國產的實時操作系統(RTOS)
基於標准庫移植
下載源碼,https://github.com/LiteOS/LiteOS\
往裸機工程添加 LiteOS 源碼
打開 LiteOS 源碼文件,可以看見里面有 8 個文件夾,下面先來了解一下主要的文件夾及其子文件夾的作用,然后將 LiteOS 源碼的核心文件提取出來,添加到工程根目錄下的文件夾中,因為工程只需要有用的源碼文件,而不是整個 LiteOS 源碼,
添加LiteOS 系統的一些配置文件,含原廠芯片驅動
將 OS_CONFIG 文件夾下面的一些配置文件拷貝到剛剛提取的 LiteOS 核心文件夾下面,等下在移植工程的時候大家是需要對這個文件夾下的某些文件進行修改,以適配不同的工程配置,並且可以通過修改這個文件夾下的內核配置頭文件來裁剪 LiteOS 的功能。
添加 CMSIS的庫,可以打開工程在mdk里面添加,也可以新建\Libraries\CMSIS\include,include文件夾從 keil 安裝目錄下C:\Keil_v5\ARM\Pack\ARM\CMSIS\5.3.0\CMSIS\Include,將其包含進來可以避免其它電腦
在移植過程中沒有相關頭文件而引起的編譯錯誤
打開工程,添加 LiteOS 核心源碼到工程組文件夾
需 要 在 開 發 環 境 里 面 新 建 LiteOS/cmsis 、 LiteOS/kernel 、 LiteOS/arch 和LiteOS/config 四個文件分組,其中 LiteOS/cmsis 用於存放 LiteOS 文件夾下 cmsis 文件夾的內容,LiteOS/kernel 用於存放 LiteOS 文件夾下 kernel 文件夾的內容,LiteOS/arch 用於存放LiteOS 文件夾下 arch 文件夾的內容。而 LiteOS/config 用於存放 LiteOS 文件夾下的OS_CONFIG 文件夾的內容。
指定 LiteOS 頭文件的路徑
修改liteos/config文件下的target_config.h,修改自己板子對應的頭文件
修改LOSCFG_PLATFORM_HWI,如果是YES代表接管中斷,否則不被接管
非接管中斷版本的 target_config.h 文件就需要在 LiteOS 提供的 demo 中移植過來 , 比 如 : LiteOS\targets\STM32F103RB_NUCLEO\OS_CONFIG,啟動文件不變,保留stm32f10_it.c但需要注釋 void PendSV_Handler(void)與 SysTick_Handler(void)這兩個函數
接管中斷版本的target_config.h文件就需要從 LiteOS 官方寫的工程文件夾下面拷貝過來的,路徑為\LiteOS\targets\ STM32F429IGTx_FIRE\OS_CONFIG
啟動文件內容修改(接管中斷,非接管不用管)
因為 LiteOS 接管中斷版本的中斷向量表是由系統管理的,所以裸機的啟動文件是要不得的,必須替換掉,
分散加載文件修改(接管中斷方式,非接管不用管)
在 LiteOS 中,中斷向量表被放在運行內存里,避免影響分配內存,那么就需要將代碼分散加載到不同的區域中,華為官方提供的分散加載文件就在每個具體的工程文件目錄下,如 : LiteOS \targets\ STM32F429IGTx_FIRE\MDK-ARM 文 件 夾 下 的 STM32F429IGTx-LiteOS.sct 文件。首先將它拷貝到我們自己的工程中去,並且將其名字修改為“Fire-F103-LiteOS.sct”,放在工程的 user 文件夾中,然后在工程中把 “Fire-F103-LiteOS.sct”文件到工程配置中
修改中斷相關文件(非接管中斷,接管中斷不用管)
由於 LiteOS 已經處理好 PendSV 與 SysTick 中斷了,就不需要用戶自己處理,所以要在中斷相關的源文件(stm32fxxx_it.c)中注釋(刪除)掉 void PendSV_Handler(void)與 SysTick_Handler(void)這兩個函數。
更新core_m3.h版本到4.3,復制粘住就可以了
打開keil安裝目錄,把版本新的cmsis的include替換工程下的cmsis的include,防止你的工程的cmsis的include版本低於4,同時
修改工程配置
在 LiteOS 中,需要 C99 標准的支持,並且忽略相關的警告,選擇“target”→ “C/C++”,在“Misc Controls”選項中輸入--diag_suppress=1,47,177,186,223,1295,意思是忽略這些編號的警號,
經初步完成工程的移植了,LiteOS 的接管中斷比非接管中斷方式要麻煩很多,所以推薦在 cortex-m 系列處理器中采用非接管中斷方式移植工程,
在main文件添加led任務
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "stm32f10x.h"
#include "los_sys.h"
#include "los_task.ph"
UINT32 LED_Task_Handle;
static UINT32 AppTaskCreate(void);
static UINT32 Creat_LED_Task(void);
static void LED_Task(void)
int main(void)
{
UINT32 uwRet = LOS_OK;
delay_init();
LED_Init();
/* LiteOS Äں˳õʼ»¯ */
uwRet = LOS_KernelInit();
if (uwRet != LOS_OK)
{
printf("LiteOS ºËÐijõʼ»¯Ê§°Ü£¡Ê§°Ü´úÂë0x%X\n",uwRet);
return LOS_NOK;
}
uwRet = AppTaskCreate();
if (uwRet != LOS_OK)
{
printf("AppTaskCreate´´½¨ÈÎÎñʧ°Ü£¡Ê§°Ü´úÂë0x%X\n",uwRet);
return LOS_NOK;
}
LOS_Start();
while(1);
}
//其余見下載附件
運行測試Liteos是否移植成功
工程見網盤:
非接管中斷:
鏈接:https://pan.baidu.com/s/1UQ2L6nZfoqFaa3DL2l20TA
提取碼:ikrv
復制這段內容后打開百度網盤手機App,操作更方便哦
接管中斷:
鏈接:https://pan.baidu.com/s/1UbFJy7wRztPnQWQhLrjavg
提取碼:95pf
復制這段內容后打開百度網盤手機App,操作更方便哦