本帖最后由 JasonLee27 于 2020-11-27 10:25 编辑
硬件环境: AC781x 通用开发板,ATC-LINK软件环境:keil 5.23
最近看到有很多人提到huawei 的liteos,便花了点时间尝试移植了一下内核部分,简单运行了一下,大体能正常运行,便拿出来分享一下,也欢迎各位大大提出宝贵的意见
【step1】源码获取
选了很久,最终选择了github上的源码,这里我们选择了LiteOS-develop分支(因为master移植的时候发现很多文件结构变化,对整个代码架构还没理清 )
https://github.com/LiteOS/LiteOS
【step2】准备AC78xx工程
这里我使用了我自己之前写的gpio_demo工程
【step3】拷贝文件
从源码中拷贝arch,demos,kernel三个文件夹到项目工程的Middleware/LiteOS下,从targets/Mini_Project/cortex-m3_without_driver下拷贝 OS_CONFIG文件夹到项目工程User目录下
【step4】代码裁剪
删除不必要的代码,进入Middleware/LiteOS/arch目录,删除msp430文件夹
进入arch/arm/arm-m目录,保留自己对应内核的文件夹,这里我们使用cortex-m3内核,所以m0,m4,m7文件夹都可以删除 进入Middleware/LiteOS/demos文件夹,保留kernel文件夹,其余删除。
该文件夹下是功能测试代码,我们这里只测试kernel,其余文件夹可依据自身功能选择合适的测试代码。
【step5】添加工程文件 新建LiteOS/arch group,并添加如下4个文件
添加LiteOS/kernel group, - l 添加LiteOS/kernel/base/core下.c文件
- l 添加LiteOS/kernel/base/ipc下.c文件
- l 添加LiteOS/kernel/base/mem/bestfit_little下.c文件
- l 添加LiteOS/kernel/base/mem/common下.c文件
- l 添加LiteOS/kernel/base/mem/membox下.c文件
- l 添加LiteOS/kernel/base/misc下.c文件
- l 添加LiteOS/kernel/base/mem/om下.c文件
- l 添加LiteOS/kernel/los_init.c
添加LiteOS/demo group,添加如下文件:
【step6】添加头文件路径
【step7】修改代码 打开target_config.h,将#include "__hal_simulate.h"修改为#include"ac78xx.h"(如果是AC7801x芯片则#include "ac780x.h")。 在target_config.h中,将SystemCoreClock修改为SYSCLK_FREQ。这是因为AC781x中未定义SystemCoreClock变量,但在AC780x中有定义,可不用修改。
【step8】任务测试 首先,将之前的main函数修改为一个任务,重新编写一个main函数,新建两个任务可以从target文件夹下找到相应的模板,这里建立了两个任务,一个响应按键,翻转LED,一个定时500ms翻转LED,将程序编译烧录进AC78xx demo板并运行,可以看到LED会500ms闪烁,按KEY6,KEY7按键,LED会翻转。 【step9】kernel测试 liteos提供了内核各功能的测试例程,我们也来验证一下 还记得之前添加的demo文件夹,里面有用于测试kernel的代码。 - 在gpio_demo.c上添加#include"los_inspect_entry.h"头文件。
- 在main函数中调用LOS_Demo_Entry();函数。
- 在los_demo_debug.h中启用#define LOS_KERNEL_DEBUG_OUT宏。
- 在los_demo_entry.c中添加如下宏(因为未使能OS管理中断,所以这里不测试中断)
#define LOS_KERNEL_TEST_TASK #defineLOS_KERNEL_TEST_MEM_DYNAMIC #defineLOS_KERNEL_TEST_MEM_STATIC //#defineLOS_KERNEL_TEST_INTRRUPT #define LOS_KERNEL_TEST_QUEUE #define LOS_KERNEL_TEST_EVENT #define LOS_KERNEL_TEST_MUTEX #define LOS_KERNEL_TEST_SEMPHORE #define LOS_KERNEL_TEST_SYSTICK #define LOS_KERNEL_TEST_SWTIMER
#define LOS_KERNEL_TEST_LIST
注意:1,打印输出,要使用AC78xx自带的debugout模块,通过UART2进行打印。2,SRAM我使用了默认的配置,因为刚好地址一致,大小我也没有修改,为40KB,大家可根据需要修改。#define BOARD_SRAM_START_ADDR 0x20000000
#define BOARD_SRAM_SIZE_KB 40
#define BOARD_SRAM_END_ADDR (BOARD_SRAM_START_ADDR + 1024 * BOARD_SRAM_SIZE_KB)
最后,附上liteos源码以及移植的例程:
|