華爲Liteos移植到stm32F03ZE

華爲Liteos和物聯網設備側sdk移植到stm32F03ZE霸道板子上

推薦官方教程:https://liteos.github.io/git

啥是LIteos

「開源免費」的實時操做系統,集成了 LwM2M、CoAP、mbed TLS、LwIP 全套 IoT 互聯協議棧,且在 LwM2M 的基礎上,提供了 AgentTiny 模塊,用戶只需關注自身的應用,而沒必要關注 LwM2M 實現細節,直接使用 AgentTiny 封裝的接口便可簡單快速實現與雲平臺安全可靠的鏈接。屬於國產的實時操做系統(RTOS)github

基於標準庫移植

下載源碼,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,將其包含進來能夠避免其它電腦 在移植過程當中沒有相關頭文件而引發的編譯錯誤spa

打開工程,添加 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表明接管中斷,不然不被接管3d

非接管中斷版本的 target_config.h 文件就須要在 LiteOS 提供的 demo 中移植過來 , 比 如 : LiteOS\targets\STM32F103RB_NUCLEO\OS_CONFIG,啓動文件不變,保留stm32f10_it.c但須要註釋 void PendSV_Handler(void)與 SysTick_Handler(void)這兩個函數code

接管中斷版本的target_config.h文件就須要從 LiteOS 官方寫的工程文件夾下面拷貝過來的,路徑爲\LiteOS\targets\ STM32F429IGTx_FIRE\OS_CONFIGblog

啓動文件內容修改(接管中斷,非接管不用管)

由於 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,操做更方便哦

<style> img{ width: 60%;height: 60%; } </style>

相關文章
相關標籤/搜索