小熊派鸿蒙2.0设备开发
本文主要围绕小熊派开发板展开对鸿蒙系统开发的学习,具体内容可以到Gitee小熊派开源社区进行学习。
目录
- 1 编译构建介绍
- 1.1 Ninja编译工具
- 1.2 模块gn文件
- 1.3 业务gn文件
- 1.4 Json文件
- 1.6 代码调用过程
- 2 CMSIS接口简介
- 2.1 什么是CMSIS-RTOS2接口
- 2.2 鸿蒙与CMSIS-RTOS2接口联系
- 3 “Hello World!”
- 3.1 业务代码
- 3.2 编译业务脚本
- 3.3 编译模块脚本
- 4 LED例程
- 4.1业务代码
- 4.2 编译业务脚本
- 4.3 编译模块脚本
- 总结
1 编译构建介绍
1.1 Ninja编译工具
在Unix/Linux下通常使用Makefile来控制代码的编译,但是Makefile对于比较大的项目有时候会比较慢,Ninja是一套新的控制编译的工具,相对于Makefile这套工具更注重于编译速度。
1.2 模块gn文件
此处仅截图供下文的功能说明中使用。
图1.1 模块gn内容截图
1.3 业务gn文件
此处仅截图供下文的功能说明中使用。
图1.2 业务gn文件截图
1.4 Json文件
图1.3 编译相关Json文件截图
如上图,build文件夹下有个BearPi-HM_Nano.json文件;
以applications为例,可以看出applications的路径指向“app”。
而app又是模块gn文件里lite_component里的内容,可见指向的内容为模块gn里的app。
模块gn里有形如 “A1_kernal_thread:thread_example” 这样的字段内容,指向了需要编译的业务模块和编译目标。
通过这几个文件,我门最终就可以确定需要编译的文件的依赖和编译生成的文件名。
1.6 代码调用过程
编写业务代码后需要使得业务代码被调用,如何实现业务代码的调用,这一过程需要从代码调用过程分析。
图1.4 系统启动初始化函数
从图1.4可以看出系统启动后的一些初始化流程,其中的SYS_INIT(feature)即是关键,我们可以发现业务代码中对业务实现函数进行了注册,如图1.5所示。注册到了FEATRURE中。在执行SYS_INIT(service)通过INIT_APP_CALL(feature)函数、或者执行SYS_INIT(feature)时,会将Thread_example编译到代码段里,通过获取函数指针,找到对应的执行函数。
图1.5 业务代码部分截图
(整个流程个人感觉有点类似Linux添加静态编译的过程,如果理解有误请及时联系我进行修改)
2 CMSIS接口简介
2.1 什么是CMSIS-RTOS2接口
CMSIS是Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard)是ARM和一些编译器厂家以及半导体厂家共同遵循的一套标准,是由ARM专门针对Cortex-M系列提出的标准。在该标准的约定下,ARM和芯片厂商会提供一些通用的API接口来访问Cortex内核以及一些专用外设,以减少更换芯片以及开发工具等移植工作所带来的金钱以及时间上的消耗。
CMSIS-RTOS2(CMSIS-RTOS API Version 2)是Arm® Cortex®-M 处理器的通用的RTOS接口。为需要RTOS功能的软件组件提供了标准化的API。
2.2 鸿蒙与CMSIS-RTOS2接口联系
鸿蒙在CMSIS-RTOS2接口中封装了LiteOS-m的内核代码。实现了CMSIS-RTOS2函数接口和底层RTOS的适配。如图2.1所示。
图2.1 不同层关系示意图
3 “Hello World!”
根据前文的编译构建介绍,我们可以明确我们需要添加和修改的内容包括:
(1)业务代码:c文件
(2)编译业务脚本:BUILD.gn
(3)编译模块脚本:BUILD.gn
3.1 业务代码
C文件里需要创建业务入口函数,实现业务逻辑,所以需要有函数的主体存在。此外,
还需要使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。所以得到的C文件内容如下。
添加的示例代码:
#include "ohos_init.h"
#include "ohos_types.h"
#include <stdio.h>void HelloWorld(void)
{printf("Hello world!\n");
}
SYS_RUN(HelloWorld);
3.2 编译业务脚本
(2)与C文件在同级目录下的BUILD.gn的作用是将业务构建生成静态库。主要由三部分内容(目标、源文件、头文件路径)构成。
添加的示例代码:
static_library("myapp") {sources = ["hello_world.c"]include_dirs = ["//utils/native/liteos/include"]
}
3.3 编译模块脚本
从上面的代码中可以看出:
myapp指定编译结果的名称;
tatic_library中指定业务模块的编译结果,为静态库文件libmyapp.a;
hello_world.c为指定编译所依赖的c文件和路径,此处采用相对路径故没有路径描述;
//utils/native/liteos/include指定source所需要依赖的.h文件路径。
(3)编译模块脚本BUILD.gn
BUILD.gn作为一个编译脚本,使用的方法与Makefile类似,在不同层级的文件目录下会有相应的BUILD,gn。如同在Linux中有顶层Makefile和其他子文件中的Makefile文件。
所以我们需要在features字段中增加索引,使目标模块参与编译并屏蔽其他模块。
添加的示例代码:
#"D1_iot_wifi_scan:wifi_scan",#"D2_iot_wifi_connect:wifi_connect", #"D3_iot_udp_client:udp_client",#"D4_iot_tcp_server:tcp_server",#"D5_iot_mqtt:iot_mqtt", #"D6_iot_cloud_oc:oc_mqtt",#"D7_iot_cloud_onenet:onenet_mqtt","my_first_app:myapp"
my_first_app是相对路径,指向编译业务脚本;myapp是目标,指向编译业务脚本中的static_library(“myapp”) 。
4 LED例程
实现流程还是原来的三个步骤。主要是对三个文件进行添加和修改。
首先新建一个my_led文件夹用于存放业务源码文件。文件夹路径为:
./applications/BearPi/BearPi-HM_Nano/sample
而后新建led_example.c文件、BUILD.gn文件完成前期准备。
4.1业务代码
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
void Led_Sample(void)
{GpioInit(); //初始化GPIOIoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_GPIO);//设置GPIO_2的复用功能为普通GPIOGpioSetDir(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_GPIO_DIR_OUT);//设置GPIO_2为输出模式GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2,1);//设置GPIO_2输出高电平点亮LED灯
}
APP_FEATURE_INIT(Led_Sample);
关于GPIO初始化的参数的具体功能此处不多赘述,注释中均已给出。
4.2 编译业务脚本
static_library("myled") {sources = ["led_example.c"]include_dirs = ["//utils/native/lite/include","//base/iot_hardware/interfaces/kits/wifiiot_lite"]
}
static_library中指定业务模块的编译结果;
sources中指定静态库.a所依赖的.c文件及其路径,若不包含"//"则表示相对路径;
include_dirs中指定source所需要依赖的.h文件路径。
4.3 编译模块脚本
import("//build/lite/config/component/lite_component.gni")
lite_component("app") {features = ["my_led:myled",]
}
my_led是相对路径,myled是目标,具体作用参考本博客的第一章节和第三章节。
补充:本章节的LED只是实现了点亮功能,通过在LED程序中设置IO电平和使用usleep()函数设置延迟时间可以实现LED等的闪烁。
总结
后续将会持续更新本专栏内容,过程中有什么错误或者不足欢迎指出与补充。
小熊派鸿蒙2.0设备开发相关推荐
- 2021物联网开发学习——基于小熊派IoT开发板Bear-Pi-IOT、E53_IA1_智慧农业拓展板与小熊派-鸿蒙·季Bear-Pi-HM Nano并接入Hi-Link
2021物联网开发学习--基于小熊派IoT开发板Bear-Pi-IOT.E53_IA1_智慧农业拓展板与小熊派-鸿蒙·季Bear-Pi-HM Nano并接入Hi-Link 目录 作者介绍 目的 用到的 ...
- 开发版安装harmonyos,HarmonyOS | 小熊派鸿蒙开发板初体验
之前小熊派鸿蒙开发板还没开售的时候,小熊派官方给我送了一套,这是小熊派第三次给我送开发板了,开发板还是一如既往的精致: 因为时间安排不过来,所以一直没有拿出来玩.正好处于年底,又到新的一年立flag的 ...
- 华为鸿蒙小插件,鸿蒙OS2.0系统
鸿蒙OS2.0系统是华为全新上线的手机操作系统,相对于之前的系统来说这一版本的使用感有了很大的提升,大家可以根据自己的需要进行升级.在这里提供的很多功能都是新添加进去的,大家可以根据自己的需要进行选择 ...
- 【小熊派bearpi】HarmonyOS设备开发上手
本文主要是记录基于小熊派的openHarmony的组件包开发hi3861的过程,板子还没到,开发环境已经搭建好,先总结一部分,后面板子到了再补充测试部分.华为官网快速入门入口.小熊派的工作人员已经 ...
- 鸿蒙2.0设备开发教程】小熊派HarmonyOS 鸿蒙笔记
HarmonyoS网络应用开发连接华为loT平台 主要内容: 本节主要介绍: 如何使用华为loT平台·设备如何对接华为loT平台 步骤; 1.华为loT平台介绍2.华为loT平台产品创建3.设备对接华 ...
- 鸿蒙(二)基于小熊派实现LOT上云的智慧家居项目
手把手教你利用鸿蒙OS实现智慧家居·LOT上云项目 一.前言 今天使用鸿蒙OS,做一个LOT上云的智慧家居项目.我们想实现的场景是这样的:云端WEB有一个控制界面,能够操控家房间里的灯和风扇,同时将房 ...
- HarmonyOS + linkboy + 小熊派,能擦出怎样的火花?
关注「嵌入式大杂烩」,选择「星标公众号」一起进步! linkboy简介 linkboy是一门面向物联网.边缘计算.工业控制等领域的自研编程语言.linkboy官网地址: ❝ http://www.li ...
- 小熊派回顾:学习GPIO,学习ADC
目录 GPIO GPIO API介绍 wifiiot_gpio.h接口 wifiiot_gpio_ex.h接口 查看LED对应的GPIO引脚 操作GPIO点亮LED 编写业务代码 编译 烧录 读取GP ...
- OpenHarmony HDF LED驱动开发 基于小熊派Micro
文章目录 一.效果展示 二.led控制程序 2.1.led驱动程序 2.1.1.驱动程序 2.1.2.驱动配置 2.2.C应用程序 2.3.JS应用 2.3.1.JS代码 2.3.2.C++接口 一. ...
最新文章
- 如何在CPU上优化GEMM矩阵乘法
- 简单介绍python编程之文件读写
- 学习OGRE - 读取天龙八部scene文件
- C语言满分代码:L1-059 敲笨钟 (20分)
- 第 17 章 命令模式
- Django笔记 —— 模型高级进阶
- [情感]富裕的女人守不住爱情
- java 数字 无法表示_Java中基本数据类型、不能用浮点数表示金额
- [转帖]ASP.NET4中不要相信Request.Browser.Cookies,Form验证要用UseCookies
- 简单的Java代码实现斗地主
- 集成电路那些事儿:CMOS模拟集成电路版图基础
- linux64位wps下载授权码,ubuntu15.04安装wps-office的64位版
- java 通用事件回调类(观察者队列)
- 2019趋势科技面经
- springboot二手交易平台 毕业设计-附源码290915
- 三百英雄服务器维护2020,【梦服】2020年12月3日【版本更新说明】
- 华为linux系统能用Cad么,华为平板能装cad画图吗 华为平板可以用cad软件吗?
- Unity基础笔记(6)—— Unity导航系统
- SAP 银企直连 付款报文签名与长度限制处理
- layui时间选择器点击事件