【HUAWEI LiteOS】(三)在正点原子探索者开发板(STM32F407)移植HUAWEI LiteOS(系统不接管中断)
1.环境准备
硬件准备
- 开发板+下载器
这里我使用的是正点原子探索者开发板,主控是STM32F407ZGT6,下载器是JLINK,如图:
软件准备
- MDK:参考【STM32Cube】(二)获取并安装STM32CubeMX + STM32Cube MCU Packages
- STM32CubeMX:参考【Keil MDK】(一)Keil MDK 5.28 的下载、安装、破解
2. 使用STM32CubeMX构建一个裸机工程
选择芯片
配置时钟源
开启串口1
配置LED引脚
开发板板载两个LED,DS0和DS1,原理图上可查看其对应的引脚:
配置时钟树
工程配置
生成代码
注意:
在正点原子开发板上使用的是外部8Mhz晶振,所以需要在文件
stm32f4xx_hal_conf.h进行一下小小的修改,不然时钟不正常:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/22/cba8c8724552cbe37c33f1f4acacc7fb.png)
3. LiteOS源码
源码获取
LiteOS 开源仓库链接:
Huawei LiteOS 最新特性都存放在 develop 分支中,建议取该分支代码进行学习:
git clone -b develop git@github.com:LiteOS/LiteOS.git
这里需要注意:
如果是直接从 LiteOS 仓库 Checkout 出来的源码,是无法推送修改代码的。这时您需要维护一套自己的源代码,建议将 LiteOS 源码 Fork 到自己的本地仓库,然后进行维护。如果需要合入到 LiteOS 仓库,可以提交 Pull Request。LiteOS 仓库管理员审核后即会合入到主仓库。
源码移植目录和文件
这里只展现当前基于正点原子的探索者F4对应的目录树:
─ arch /* 与 cpu 相关 */ │ └─ arm │ ├─ arm-m /* M 核中断、调度、Tick 相关代码。 */ │ │ ├─ cortex-m4 │ │ │ ├─ gcc │ │ │ ├─ iar │ │ │ └─ keil │ │ ├─ include │ │ └─ src │ └─ common /* ARM 核共用的的 CMSIS 接口 */ ├─ components │ └─ cmsis /* LiteOS 提供的 CMSIS OS 接口实现 */ │ ├─ 1.0 │ └─ 2.0 │ └─ connectivity │ │ ├─ agent_tiny /* agent_tiny端云互通组件,包括公共头文件、示例代码、客户端实现代码、操作系统适配层代码 */ │ │ ├─ lwm2m /* lwm2m协议实现 */ │ │ ├─ nb_iot /* LiteOS NB-IoT API */ │ └─ fs /* 文件系统,含VFS、spiffs、ramfs、kifs、devfs */ │ └─ lib /* */ │ └─ net /* */ │ └─ ota /* */ │ └─ mqtt /* */ ├─ demos /* 供开发者测试 LiteOS 内核的 demo 示例。 */ ├─ kernel │ ├─ base │ │ ├─ core /* LiteOS 基础内核代码,包括队列、任务调度、软件定时器、时间片计算等功能 */ │ │ ├─ include /* LiteOS 内核内部使用的头文件 */ │ │ ├─ ipc /* LiteOS 中任务间通讯的相关接口,包括事件、信号量、消息队列、互斥锁等 */ │ │ ├─ mem /* LiteOS 中的内核内存管理的相关代码 */ │ │ ├─ misc /* 内存对齐功能以及毫秒级休眠 sleep 功能 */ │ │ └─ om /* 与错误处理相关的文件 */ │ ├─ extended │ │ ├─ include /* 低功耗框架代码头文件 */ │ │ └─ tickless /* 低功耗框架代码 */ │ └─ include /* LiteOS 内核头文件 */ └─ targets
4. OS移植
拷贝 LiteOS 内核源码及测试相关代码
拷贝如下文件:
拷贝后如下:
创建 LiteOS 分组并添加 .c 源文件
- Arch分组:
- Kernel分组: los_init.c
- base/core 下面全部 .c 文件
- base/ipc 下面全部 .c 文件
- base/mem/bestfit_little 下面全部 .c 文件
- base/mem/common 下面全部 .c 文件
- base/mem/membox 下面全部 .c 文件
- base/misc 下面全部 .c 文件
- base/om 下面全部 .c 文件
- extended/tickless 下面全部 .c 文件(如果没有使用 tickless,可以不必添加)
需要注意的是:
- LiteOS 提供了 3 套动态内存分配算法,位于 LiteOS\kernel\base\mem 目录下,分别是 bestfit、bestfit_little、tlsf 这三套动态内存算法只需要添加其中一套就行了,对于资源有限的芯片,建议选择 bestfit_little,上面的示例也是添加了这一套动态分配算法;
- 另外 LiteOS\kernel\base\mem\membox 目录下是 LiteOS 提供的静态内存算法,与动态内存算法不冲突,需要添加;
- LiteOS\kernel\base\mem\common 目录的内容需要全部添加。
配置 C/C++ 源码 .h 头文件路径
修正缺少文件编译错误
编译会发现如下错误,提示缺少
los_builddef.h文件:
这个文件没有包含在源码中,需要从其他示例工程中COPY过来:
加入到头文件路径中:
OS_CONFIG/target_config.h 文件有两处需要适配您的开发环境进行调整:
- 正确修改导入 ST 官方驱动文件,如果是 M4 系列芯片是 stm32f4xx.h 文件:
- 将内存设置为匹配当前芯片 SRAM 大小,查找数据手册可以了解芯片内存大小
修正重复定义编译错误
编译后发现上图中的两个错误,显示有两个函数重复定义。您可以直接注释掉这两个函数:
但为了保证 STM32Cube 生成工程不会再次覆盖修改后代码,建议按下图所示操作,在 STM32Cube 中屏蔽这两个函数生成:
特别注意:
PendSV_Handler 和 SysTick_Handler 这两个函数只有在 LiteOS Kernel 有对应实现才能够屏蔽,如果不进行 OS,不可屏蔽该函数,否则会导致芯片跑不起来。
移植成功
5. 验证实验设计
目前 Huawei LiteOS 内置了 内核测试代码,在
demos/kernel下,我们可以直接拿这套代码进行验证。
添加 demo 测试代码
添加头文件路径
修改 main.c 文件(启动内核)
/* USER CODE BEGIN Includes */ #include "los_base.h" #include "los_inspect_entry.h" /* USER CODE END Includes */ /* USER CODE BEGIN 2 */ if (LOS_OK != LOS_KernelInit()) { return LOS_NOK; } LOS_Inspect_Entry(); LOS_Start(); /* USER CODE END 2 */
特别注意:
请务按照上面示例的方式添加测试代码。因为只有在 USER CODE 注释包裹内添加,下一次再使用 STM32Cube 导出的代码才不会被覆盖。
添加日志输出宏定义
实验结果
编译下载之后打开串口助手,结果如下:
- 基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程(转)
- 手把手教你在STM32下移植UCGUI(基于正点原子的MINI开发板)
- PC仿真的emwin移植到STM32F103RCT6详尽步骤(正点原子库,正点原子mini开发板,亲测可用,学习心得,大佬勿喷)
- 在stm32f4(正点原子“探索者”的板子)上,如何移植ds1302芯片程序
- 正点原子STM32探索者学习笔记1
- jffs2文件系统在nand flash上的移植(实验平台为MPC8315ERDB开发板)
- 1.nrf51822移植蓝牙-正点原子小四轴
- 移植libjpeg-turbo库到mips32架构跑openwrt系统的开发板上
- 2440开发板linux系统移植3G拨号上网收发短信(三)
- 在STM32f103c8移植Huawei LiteOS笔记
- zybo开发板linux作业系统移植
- qt移植到OK6410开发板linux系统过程
- OK6410开发板Linux-3.3.5驱动移植之DM900网卡驱动移植+NFS文件系统挂载
- Hi3518C开发板系统移植总结
- 移植Linux系统到iMX6开发板之LVDS显示屏驱动程序的框架分析与移植
- jffs2文件系统在nand flash上的移植(实验平台为MPC8315ERDB开发板)
- x210v3开发板u-boot-2012.10移植之六---系统时钟初始化
- 用GCC开发STM32,正点原子开发板的一个库函数版本例程示例
- qt4.8.2在tq2440开发板上的移植(二)--构建根文件系统
- 正点原子精英版stm32f103zet6开发板,实惠开卖