0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于GD32开发平台现已支持Huawei LiteOS操作系统的介绍和分享

GD32MCU 来源:djl 2019-10-22 10:56 次阅读

Huawei LiteOS 是华为面向IoT领域,构建的"统一物联网操作系统和中间件软件平台",以轻量级(内核小于10k)、低功耗(1节5号电池最多可以工作5年),快速启动,互联互通,安全等关键能力,为开发者提供 "一站式" 完整软件平台,有效降低开发门槛、缩短开发周期。

Huawei LiteOS 目前主要应用于智能家居、穿戴式、车联网、智能抄表、工业互联网等 IoT 领域的智能硬件上。,还可以和LiteOS生态圈内的硬件互联互通,提高用户体验。

目前已开源的Huawei LiteOS内核源码已适配好GD32F450、GD32F190芯片,本文将以GD32F450IKH6芯片为例,介绍基于Cortex-M4核芯片的移植过程。

环境准备

基于Huawei LiteOS Kernel开发前,我们首先需要准备好单板运行的环境,包括软件环境和硬件环境。

硬件环境:

所需硬件 描述
GD32F450i-EVAL V1.1单板 GD32F450开发板(芯片型号GD32F450IKH6)
PC机 用于编译、加载并调试镜像
电源(5v) 开发板供电(使用Mini USB连接线)

软件环境:

软件 描述
Window 7 操作系统 安装Keil
Keil(5.18以上版本) 用于编译、链接、调试程序代码 uVision V5.18.0.0 MDK-Lite
DNW串口调试工具 串口调试工具,根据个人喜好可使用其他的串口工具

说明

Keil工具需要开发者自行购买,GD32F190R-EVAL开发板的调试器是GD-Link,GD-Link免驱动安装。

获取Huawei LiteOS 源码

首先我们从github上下载Huawei LiteOS内核源代码,步骤如下:

仓库地址是https://github.com/LITEOS/LiteOS_Kernel.git

关于GD32开发平台现已支持Huawei LiteOS操作系统的介绍和分享

点击”clone or download”按钮,下载源代码

Huawei LiteOS的源代码目录的各子目录包含的内容如下:

关于GD32开发平台现已支持Huawei LiteOS操作系统的介绍和分享

关于代码树中各个目录存放的源代码的相关内容简介如下:

一级目录 二级目录 说明
doc 此目录存放的是LiteOS的使用文档和API说明文档
example api 此目录存放的是内核功能测试用的相关用例的代码
include aip功能头文件存放目录
kernel base 此目录存放的是与平台无关的内核代码,包含核心提供给外部调用的接口的头文件以及内核中进程调度、进程通信、内存管理等等功能的核心代码。用户一般不需要修改此目录下的相关内容。
cmsis LiteOS提供的cmsis接口
config 此目录下是内核资源配置相关的代码,在头文件中配置了LiteOS所提供的各种资源所占用的内存池的总大小以及各种资源的数量,例如task的最大个数、信号量的最大个数等等
cpu 此目录以及以下目录存放的是与体系架构紧密相关的适配LiteOS的代码。比如目前我们适配了arm/cortex-m4及arm/cortex-m3系列对应的初始化内容。
include 内核的相关头文件存放目录
link IDE相关宏定义
platform GD32F190R-EVAL GD190开发板systick及驱动相关代码
GD32F450i-EVAL GD450开发板systick及驱动相关代码
projects GD32F190R-EVAL-KEIL gd32f190开发板的keil工程目录
GD32F450i-EVAL-KEIL gd32f450开发板的keil工程目录
user 此目录存放用户代码,LiteOS启动代码在mian()函数中

获取Huawei LiteOS源代码之后,我们可以将自己本地已有工程的代码适配到LiteOS内核工程中进行应用开发。

如何适配LiteOS内核工程开发

本章节描述的内容以GD32F450i-EVAL开发板的04_USART_Printf示例工程为基础,适配到LiteOS的GD32F450i-EVAL-KEIL工程中,演示串口输出、按键中断及LED点亮功能。

GD32的开发资料获取

从http://www.GD32MCU.com 下载相关的开发包

从购买的开发板的光盘中获取相关资料

注意:光盘上的内容可能比网络上的更全面一些,建议使用光盘上面的内容。

GD32的开发包安装

安装GigaDevice.GD32F4xx_DFP.1.0.1.pack或者更高版本的pack文件到keil安装目录

安装GD32F4xx_Addon.1.0.1.exe到keil安装目录

添加代码到LiteOS工程

在LiteOS内核代码目录中新建GD32f450i_Library文件夹,将GD示例工程中使用到的代码拷贝到其中。

关于GD32开发平台现已支持Huawei LiteOS操作系统的介绍和分享

拷贝GD示例工程Library文件夹下的子文件夹到GD32f450i_Library文件夹中。

拷贝GD示例工程04_USART_Printf文件夹下列文件到GD32f450i_Library文件夹中。

GD示例工程代码目录结构

关于GD32开发平台现已支持Huawei LiteOS操作系统的介绍和分享

在LiteOS工程添加library目录,将GD示例工程中的源代码文件(main.c、startup_gd32f4xx.s文件除外)添加到library文件夹下。

GD示例工程启动文件startup_gd32f4xx.s

添加GD示例工程中startup_gd32f4xx.s文件到LiteOS工程startup文件夹下。

关于GD32开发平台现已支持Huawei LiteOS操作系统的介绍和分享

添加头文件搜索路径及编译宏选项

LiteOS可直接使用GD示例工程中的启动文件,这样工程中要使用的中断及中断服务函数就注册好了,不需再使用LiteOS接口进行动态注册。在完成了代码添加及工程配置后,开始修改代码,步骤如下:

注释gd32f4xx_it.c中的PendSV_Handler()及SysTick_Handler()函数,以免重复定义。

GD工程中SYStemSystemInit函数会调用system_clock_config()函数配置系统时钟,我们需要修改los_bsp_adapter.c文件中的sys_clk_freq变量值与实际配置的系统时钟一致。const unsigned int sys_clk_freq = 200000000;

经过以上步骤的修改,完成了代码的初步移植,然后可以编译代码,连接串口线(事先安装相关驱动)并在串口调试工具中打开相应串口,调试运行时可看到串口打印输出,按demo板上的Tamper键,可以调试按键中断及LED。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 智能家居
    +关注

    关注

    1928

    文章

    9562

    浏览量

    185106
  • 车联网
    +关注

    关注

    76

    文章

    2579

    浏览量

    91578
收藏 人收藏

    评论

    相关推荐

    GD32 MCU入门教程】GD32 MCU GPIO 结构与使用注意事项

    本文是专门为基于GD32 MCU开发的工程设计人员提供,主要介绍了GPIO的功能配置、内部结构以及在不同场景使用时的注意事项,旨在帮助GD32 MCU
    的头像 发表于 09-07 10:34 738次阅读
    【<b class='flag-5'>GD32</b> MCU入门教程】<b class='flag-5'>GD32</b> MCU GPIO 结构与使用注意事项

    GD32 MCU 入门教程】GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的头像 发表于 08-25 09:24 599次阅读
    【<b class='flag-5'>GD32</b> MCU 入门教程】<b class='flag-5'>GD32</b> MCU FPU 使用方法

    GD32如何替换STM32

    GD32替换Stm32注意事项
    发表于 08-23 11:31 4次下载

    GD32 MCU 入门教程】GD32 MCU 常见外设介绍(14)RTC 模块介绍

    GD32 MCU内部提供了一个RTC(实时时钟)模块,通过RTC可以实现日历时钟、闹钟等功能。RTC也可以用于深度睡眠或待机模式的低功耗唤醒。不同系列的GD32 MCU在RTC设计和功能上有所区别,总体可以分为三大系列:
    的头像 发表于 08-23 09:18 472次阅读
    【<b class='flag-5'>GD32</b> MCU 入门教程】<b class='flag-5'>GD32</b> MCU 常见外设<b class='flag-5'>介绍</b>(14)RTC 模块<b class='flag-5'>介绍</b>

    GD32 MCU 入门教程】GD32 MCU 常见外设介绍(12)FMC 模块介绍

    闪存控制器(FMC),提供了片上闪存需要的所有功能。FMC 也提供了页擦除,整片擦除,以及32 位整字或 16 位半字编程闪存等操作GD32 MCU 支持不同类型编程的具体说明如下表 GD
    的头像 发表于 08-21 09:56 1126次阅读
    <b class='flag-5'>GD32</b> MCU 入门教程】<b class='flag-5'>GD32</b> MCU 常见外设<b class='flag-5'>介绍</b>(12)FMC 模块<b class='flag-5'>介绍</b>

    GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(3)使用 Embedded Builder 开发 GD32

    GD32系列为通用型MCU,所以开发环境也可以使用通用型的IDE,目前使用较多的是KEIL、IAR、 GCC和Embedded Builder,客户可以根据个人喜好来选择相应的开发环境。
    的头像 发表于 08-08 16:03 974次阅读
    【<b class='flag-5'>GD32</b> MCU 入门教程】一、<b class='flag-5'>GD32</b> MCU <b class='flag-5'>开发</b>环境搭建(3)使用 Embedded Builder <b class='flag-5'>开发</b> <b class='flag-5'>GD32</b>

    GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(2)使用 IAR 开发 GD32

    GD32系列为通用型MCU,所以开发环境也可以使用通用型的IDE,目前使用较多的是KEIL、IAR、 GCC和Embedded Builder,客户可以根据个人喜好来选择相应的开发环境。
    的头像 发表于 08-08 15:40 699次阅读
    【<b class='flag-5'>GD32</b> MCU 入门教程】一、<b class='flag-5'>GD32</b> MCU <b class='flag-5'>开发</b>环境搭建(2)使用 IAR <b class='flag-5'>开发</b> <b class='flag-5'>GD32</b>

    GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(1)使用Keil开发GD32

    GD32系列为通用型MCU,所以开发环境也可以使用通用型的IDE,目前使用较多的是KEIL、IAR、 GCC和Embedded Builder,客户可以根据个人喜好来选择相应的开发环境。
    的头像 发表于 08-08 15:01 1196次阅读
    【<b class='flag-5'>GD32</b> MCU 入门教程】一、<b class='flag-5'>GD32</b> MCU <b class='flag-5'>开发</b>环境搭建(1)使用Keil<b class='flag-5'>开发</b><b class='flag-5'>GD32</b>

    GD32 MCU ISP失败的原因

    玩过GD32的小伙伴们都知道,GD32 MCU支持ISP,即在系统编程,前面的常见问题也给大家讲过什么是ISP,什么是IAP?那有没有小伙伴遇到过ISP失败的情况,失败的原因是什么呢?
    的头像 发表于 02-28 09:23 1487次阅读
    <b class='flag-5'>GD32</b> MCU ISP失败的原因

    GD32 MCU电源复位和系统复位有什么区别

    GD32 MCU的复位分为电源复位和系统复位,电源复位又称为冷复位,相较于系统复位,上电复位更彻底,下面为大家详细介绍上电复位和系统复位的实
    的头像 发表于 02-02 09:37 1510次阅读
    <b class='flag-5'>GD32</b> MCU电源复位和<b class='flag-5'>系统</b>复位有什么区别

    不同型号的GD32 MCU如何区分?

    大家是否碰到过以下应用场景:同一套软件代码希望跑在不同型号的GD32 MCU中,但有些地方需要根据MCU型号进行调整?或者上位机或其他MCU与GD32 MCU通信时需要知道对应的MCU型号是哪个?
    的头像 发表于 01-27 09:32 1003次阅读
    不同型号的<b class='flag-5'>GD32</b> MCU如何区分?

    GD32 串口接受异常的几个原因

    前面我们介绍GD32 485发送时出现异常的最常见原因,有小伙伴反馈想要知道GD32 串口接受异常的可能原因,今天我们就来安排。
    的头像 发表于 01-18 09:57 4258次阅读
    <b class='flag-5'>GD32</b> 串口接受异常的几个原因

    GD32 MCU的选项字节是什么?

    GD32 MCU的选项字节是什么,有什么功能呢?选项字节被误篡改如何回复?
    的头像 发表于 01-17 09:42 1384次阅读
    <b class='flag-5'>GD32</b> MCU的选项字节是什么?

    GD32如何设计晶振电路

    关于晶振电路真的简单吗?如何可靠的设计好GD32晶振电路,我们需要知道这些:
    的头像 发表于 01-16 09:37 1974次阅读
    <b class='flag-5'>GD32</b>如何设计晶振电路

    你了解GD32 MCU的命名规则吗

    下面为大家介绍GD32 MCU的通用命名规则,以GD32F303ZGT6为例,其中,GD32代表GD32 MCU,F代表通用系列产品类型,3
    的头像 发表于 01-13 09:38 3647次阅读
    你了解<b class='flag-5'>GD32</b> MCU的命名规则吗