【STM32】STM32 移植鸿蒙操作系统

本文详细介绍了如何在STM32F429I-DISC1开发板上移植OpenHarmony LiteOS-M内核,包括获取源码、生成工程、修改Makefile、配置中断服务函数和添加测试任务等步骤,最后通过编译下载实现LED闪烁和串口输出验证移植成功。
摘要由CSDN通过智能技术生成

前言

随着 OpenHarmony3.1 的正式发布,其功能也在不断完善。OpenHarmony LiteOS-M 内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点,其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等,分为硬件相关层以及硬件无关层,硬件相关层提供统一的HAL(Hardware Abstraction Layer)接口,提升硬件易适配性,不同编译工具链和芯片架构的组合分类,满足AIoT类型丰富的硬件和编译工具链的拓展。本文主要介绍如何在STM32上移植 OpenHarmony LiteOS-M 内核,及其注意事项。


一、开发环境

硬件:
- STM32F429I-DISC1 开发板
在这里插入图片描述
软件:
- VSCode:用于编辑代码
- STM32CubeMX:用于生成工程
- make、arm-none-eabi-gcc:用于编译工程
- STM32Cubeprogrammer:用于下载工程
- Git:用于获取 OpenHarmony LiteOS-M 内核源码

二、移植内核

1. 操作流程

  1. 拉取仓库代码。
  2. 使用STM32CubeMX在 /target 目录下生成工程。
  3. 修改Makefile文件,工程加入 OpenHarmony LiteOS-M 内核所需的文件。
  4. 添加用户代码以支持printf。添加用户自定义任务。
  5. 编译下载程序

2. 获取源码

  • 进入https://gitee.com/openharmony/kernel_liteos_m,获取Git仓库地址。
https://gitee.com/openharmony/kernel_liteos_m.git

在这里插入图片描述

  • 使用Git Bush,拉取内核源码到本地。
    在这里插入图片描述
  • 创建 /third_party 目录,用于存放第三方依赖文件(STM32 所需的 CMSIS 等),拉取第三方依赖文件。
cd kernel_liteos_m 
mkdir ./third_party
cd third_party
git clone https://gitee.com/openharmony/third_party_bounds_checking_function.git ./bounds_checking_function
git clone https://gitee.com/openharmony/third_party_cmsis.git ./cmsis
git clone https://gitee.com/openharmony/third_party_musl.git ./musl

在这里插入图片描述
到这里 OpenHarmony LiteOS-M 内核源码就获取完毕了。

3. 生成工程

  1. 进入/targets 目录,使用 STM32CubeMX 生成工程 STM32F429ZI_Harmony_LiteOS_M
    在这里插入图片描述

  2. 与FreeRTOS类似,由于LiteOS会占用SysTick定时器,因此需要修改HAL库延时的基础时钟,改为其他非SysTick的定时器,避免HAL库延时的定时器和系统运行的定时器冲突。在这里插入图片描述

  3. 配置:下载调试端口SW、串口USART、LED_GPIO、时钟树。
    在这里插入图片描述

  4. 开发环境选择 Makefile
    在这里插入图片描述

  5. Code Generator 中一定要选择 Copy only necessary library files 如果选择所有库文件都添加的话,那么就会生成很多模板文件。由于我们需要在 Makefile 中添加文件,如果目录中有模板文件的话,我们就无法直接使用筛选功能将所有源文件快速添加到工程中了。
    在这里插入图片描述
    至此工程配置已结束,点击 Generate 即可生成工程。

4. 修改工程文件

  1. 使用 VS Code 打开targets下的工程目录,新建liteos_file_path.mk用于将内核源码文件添加到工程Makefile中,该文件相当于C语言中的头文件,主 Makefile 文件可以直接包含该文件。
    在这里插入图片描述
  2. 添加内核源文件目录到 liteos_file_path.mk 中。
# Topdir 顶层目录
LITEOSTOPDIR := ../../
LITEOSTOPDIR := $(realpath $(LITEOSTOPDIR))

# Common 内核源文件及头文件目录
C_SOURCES   +=  \
    $(wildcard $(LITEOSTOPDIR)/kernel/src/*.c) \
    $(wildcard $(LITEOSTOPDIR)/kernel/src/mm/*.c) \
    $(wildcard $(LITEOSTOPDIR)/components/cpup/*.c) \
    $(wildcard $(LITEOSTOPDIR)/components/power/*.c) \
    $(wildcard $(LITEOSTOPDIR)/components/backtrace/*.c) \
    $(wildcard $(LITEOSTOPDIR)/components/exchook/*.c) \
    $(wildcard $(LITEOSTOPDIR)/components/signal/*.c) \
    $(wildcard $(LITEOSTOPDIR)/utils/*.c)

C_INCLUDES  +=  \
    -I$(LITEOSTOPDIR)/utils \
    -I$(LITEOSTOPDIR)/kernel/include \
    -I$(LITEOSTOPDIR)/components/cpup \
    -I$(LITEOSTOPDIR)/components/power \
    -I$
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值