推薦官方教程:https://liteos.github.io/git
「開源免費」的實時操做系統,集成了 LwM2M、CoAP、mbed TLS、LwIP 全套 IoT 互聯協議棧,且在 LwM2M 的基礎上,提供了 AgentTiny 模塊,用戶只需關注自身的應用,而沒必要關注 LwM2M 實現細節,直接使用 AgentTiny 封裝的接口便可簡單快速實現與雲平臺安全可靠的鏈接。屬於國產的實時操做系統(RTOS)github
下載源碼,https://github.com/LiteOS/LiteOS\安全
打開 LiteOS 源碼文件,能夠看見裏面有 8 個文件夾,下面先來了解一下主要的文件夾及其子文件夾的做用,而後將 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/cmsis 、 LiteOS/kernel 、 LiteOS/arch 和LiteOS/config 四個文件分組,其中 LiteOS/cmsis 用於存放 LiteOS 文件夾下 cmsis 文件夾的內容,LiteOS/kernel 用於存放 LiteOS 文件夾下 kernel 文件夾的內容,LiteOS/arch 用於存放LiteOS 文件夾下 arch 文件夾的內容。而 LiteOS/config 用於存放 LiteOS 文件夾下的OS_CONFIG 文件夾的內容。操作系統
修改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)這兩個函數。
打開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 系列處理器中採用非接管中斷方式移植工程,
#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); } //其他見下載附件
工程見網盤:
非接管中斷: 連接:https://pan.baidu.com/s/1UQ2L6nZfoqFaa3DL2l20TA 提取碼:ikrv 複製這段內容後打開百度網盤手機App,操做更方便哦 接管中斷: 連接:https://pan.baidu.com/s/1UbFJy7wRztPnQWQhLrjavg 提取碼:95pf 複製這段內容後打開百度網盤手機App,操做更方便哦
<style> img{ width: 60%;height: 60%; } </style>