您可以自由地:
分享
- 在任何媒介以任何形式复制、发行本文档
演绎
- 修改、转换或以本文档为基础进行创作。只要你遵守许可协议条款,许可人就无法收回你的这些权利。
惟须遵守下列条件:
署名
- 您必须提供适当的证书,提供一个链接到许可证,并指示是否作出更改。您可以以任何合理的方式这样做,但不是以任何方式表明,许可方赞同您或您的使用。
非商业性使用
- 您不得将本作品用于商业目的。
相同方式共享
- 如果您的修改、转换,或以本文档为基础进行创作,仅得依本素材的 授权条款来散布您的贡献作品。
没有附加限制
- 您不能增设法律条款或科技措施,来限制别人依授权条款本已许可的作为。
声明:
- 当您使用本素材中属于公众领域的元素,或当法律有例外或限制条款允许您的使用, 则您不需要遵守本授权条款。 未提供保证。本授权条款未必能完全提供您预期用途所需要的所有许可。例如:形象 权、隐私权、著作人格权等其他权利,可能限制您如何使用本素材。
注意
- 为了方便用户理解,这是协议的概述. 可以访问网址 https://creativecommons.org/licenses/by-sa/3.0/legalcode 了解完整协议内容.
本文档介绍基于Huawei LiteOS如何移植到第三方开发板,并成功运行基础示例。
本文档主要适用于Huawei LiteOS Kernel的开发者。 本文档主要适用于以下对象:
- 物联网端软件开发工程师
- 物联网架构设计师
在本文中可能出现下列标志,它们所代表的含义如下。
用于警示紧急的危险情形,若不避免,将会导致人员死亡或严重的人身伤害
用于警示潜在的危险情形,若不避免,可能会导致人员死亡或严重的人身伤害
用于警示潜在的危险情形,若不避免,可能会导致中度或轻微的人身伤害
用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果“注意”不涉及人身伤害
| 说明 | “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息 |
修改记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新 内容。
日期 | 修订版本 | 描述 |
2017年02月14日 | 1.0 | 完成初稿 |
2017年03月09日 | 1.1 | 根据新增代码及修改代码同步更新 |
目前在github上已开源的Huawei LiteOS内核源码已适配好STM32F412、STM32F429、STM32L476、GD32F450、GD32F190芯片,本手册将 以STM32F429ZI芯片为例,介绍基于Cortex M4核芯片的移植过程。
基于Huawei LiteOS Kernel开发前,我们首先需要准备好单板运行的环境,包括软件环 境和硬件环境。 硬件环境:
所需硬件 | 描述 |
STM32F4291-DISCO单板 | STM32开发板(芯片型号STM32F429ZIT6) |
PC机 | 用于编译、加载并调试镜像 |
电源(5v) | 开发板供电(使用Mini USB连接线) |
软件环境:
软件 | 描述 |
Window 7 操作系统 | 安装Keil和st-link的操作系统 |
Keil(5.21以上版本) | 用于编译、链接、调试程序代码 uVision V5.21.1.0 MDK-Lite uVersion:5.21a |
st-link_v2_usbdriver | 开发板与pc连接的驱动程序,用户加载及调试程序代码 |
说明
Keil工具需要开发者自行购买,ST-Link的驱动程序可以从st link的相关网站获取,采用J-Link还 是ST-Link需要根据具体使用的开发板来确定。这里以STM32F429为例,使用ST-Link。
首先我们需要通过网络下载获取Huawei LiteOS开发包。目前Huawei LiteOS的代码已经 开源,可以直接从网络上获取,步骤如下:
-
点击”clone or download”按钮,下载源代码
关于代码树中各个目录存放的源代码的相关内容简介如下:
一级目录 | 二级目录 | 说明 |
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以及led、uart、key驱动bsp适配代码 |
GD32F450i-EVAL | GD450开发板systick以及led、uart、key驱动bsp适配代码 | |
STM32F412ZG-NUCLEO | STM32F412开发板systick以及led、uart、key驱动bsp适配代码 | |
STM32F429I_DISCO | STM32F429开发板systick以及led、uart、key驱动bsp适配代码 | |
STM32L476RG_NUCLEO | STM32L476开发板systick以及led、uart、key驱动bsp适配代码 | |
LOS_EXPAND_XXX | 用于新扩展的开发板systick以及led、uart、key驱动bsp适配代码 | |
projects | STM32F412ZG-NUCLEO-KEIL | stm32f412开发板的keil工程目录 |
STM32F429I_DISCO_IAR | stm32f429开发板的iar工程目录 | |
STM32F429I_DISCO_KEIL | stm32f429开发板的keil工程目录 | |
STM32L476R-NUCLEO-KEIL | stm32l476开发板的keil工程目录 | |
GD32F190R-EVAL-KEIL | gd32f190开发板的keil工程目录 | |
GD32F450i-EVAL-KEIL | gd32f450开发板的keil工程目录 | |
user | 此目录存放用户测试代码,LiteOS的初始化和使用示例在main.c中 |
获取Huawei LiteOS源代码之后,我们可以将自己本地已有工程的代码适配到LiteOS内核工程中进行应用开发。
本章节描述的内容以stm32cubef4开发包中的UART_TwoBoards_ComPolling示例工程为基础,适配到LiteOS的STM32F429I_DISCO_KEIL工程中,演示串口输出、按键中断及LED点亮功能。
-
在添加代码之前,首先需要从ST的官网上面搜索F429IDISCOVERY,并下载STM32CubeF4软件包。比如可以通过http://www.st.com/content/st_com/zh.html这个网址进去搜索。
-
下载代码之后,首先解压缩开发包,然后找到STM32Cube_FW_F4_V1.14.0\Projects\STM32F429I-Discovery\Examples\UART\UART_TwoBoards_ComPolling\MDK-ARM这个下面的uart工程做STM32F429的原始代码作参考。
- 分析STM32F429的源代码工程,我们发现工程包含两个部分的内容Drivers以及应用适配程序两部分以及MDK-ARM/startup_stm32f429xx.s这个汇编文件。
- 我们将Drivers以及应用代码拷贝到LiteOS的工程中,比如在LiteOS顶级目录下创建STM32FXX目录,然后将Drivers目录拷贝到下面,然后创建STM32FXX\stm32f429目录,将inc和src拷贝到下面,并且将startup_stm32f429xx.s也拷贝到stm32f429目录中。
- 代码准备完毕之后,需要将STM32的uart示例工程的所有代码添加到LiteOS的工程中,原始的STM32示例代码结构如下
- 参考原始的STM32工程中,将对应的文件直接添加到LiteOS工程中,添加后的结果如下所示
注意
在LiteOS工程中,原始的startup文件需要使用startup_stm32f429xx.s替换掉,因为LiteOS的默认startup汇编文件中只实现了能够使LiteOS运行的最小功能。
-
代码添加完毕之后,需要修改los_bsp_adapter.c中的system tick时钟const unsigned int sys_clk_freq = 16000000;修改为const unsigned int sys_clk_freq = 180000000; 因为代码中是给出的默认system clock的值。
- 在main.c中添加平台初始化以及系统时钟配置的调用
- 将stm32f4xx_it.c中的SysTick_Handler、PendSV_Handler的实现删除或者if 0掉。
-
将stm32f4xx_hal_msp.c中的main.h替换成los_bsp_uart.h。
//#include "main.h" #include "los_bsp_uart.h"
- 参考STM32的原始工程,将其中的头文件搜索路径以及宏定义拷贝到LiteOS工程的设置中,并且定义宏LOS_STM32F429ZI
- 以上步骤完成之后,直接编译调试运行就可以看到效果了。串口我们使用uart1 PB6和PB7作为TX和RX脚。串口会每隔100毫秒打印一次。
###如何使用LiteOS 开发###
LiteOS中提供的功能包括如下内容: 任务创建与删除、任务同步(信号量、互斥锁)、动态中断注册机制等等内容,详细内容请参考《HuaweiLiteOSKernelDevGuide》。
###从零开始创建LiteOS工程###
目前在LiteOS的源代码的projects目录下已附带一些开发板的内核示例工程,用户可以直接使用,如果您所使用的开发板(芯片型号)与在示例工程中找不到,您可以从零开始创建LiteOS工程,创建流程请参考《LiteOS_Migration_Guide_Keil》。
###关于中断向量位置选择###
如果您需要使用LiteOS的中断注册机制,详细内容请参考《LiteOS_Migration_Guide_Keil》。
如果您需要测试LiteOS内核工程运行情况,详细内容请参考《LiteOS_Migration_Guide_Keil》。