Hi3861_WiFi IoT工程:理解IoT外设控制模块

Hi3861_WiFi IoT工程的一点了解

作者:liangkz 更新时刻:2021.04.25 版别:v1.5

目录

1.关于工程本身

2.ohos_bundles

3.工程的目录结构

4.了解IoT外设操控模块

4.1 BUILD.gn 的翻开

4.2 led_example.c 的翻开

4.3 IoT外设操控模块的全体了解

更新记源码网站载:

2021.04.23

v1.0

初始版别,前3节线程池

2021.04.25

v1.5

添加第4节apple,了解IoT外设控源码编辑器手机版下载制模块。

阐明:本文是 “Hi3861_WiFi源码资本 IoT工程的一点了解” 的新增产品设计专业章节,版别升级到v1.5.

4.了解IoT外设操控模块
Hi3861开发板,最主要的功用,便是使用产品设计IoT外设操控模块供给对外围设备的操作才能,对外围设备操作接口包括了GPIO, I2C, I2S等等,详情见README产品设计

这一节咱们就从上到下看一下是怎样结束这些操控的。

咱们先看一下官方供给的架构师需求把握哪些常识运用示例程序:

applicationssamplewifi-iotappiothardware BUILD.gn + led_example.c

4.1 BUILD.gn 的翻开
.c 文件等appear下再看,先看BUIapproveLD.gn:

include_dirs = [

“//utils/natAPPive/lite/include”, # A

“//kernel/liteos_m/components/cmsis/2.0”, # B

“//base/iot_hardwar线程池的七个参数e/interfaces/kits/wiappointmentfiiot_lite”, # C

]

  • #A:进到 //utils/native/lite目录,先看readme。

公共根底库存放O线程penHarmony通用的根底组件。这些根底组产品定位件可被OpenHarmony各事务子体系及上层运用所运用。

公共根底库在不同途径上供appointment应的才能:

LiteOS-M内核(Hi3861途径):KV存储、文件操作、IoT外设操控、Dump体系特征。

LiteOS-A内核(Hi3516、Hi3518途径):KV存储、定时器、数据和文件存架构师需求把握哪些常识储的JS API、Dump体系特征。

Hi3861_WiFi IoT工程:了解IoT外设操控模块

include目录包括了很重要的头文件,运用开发或许鸿蒙体系内部其他模源码之家块,要调用这个共用根底库供给的功用时,都需求包括这个途线程同步径的头线程是什么意思文件,其间:

1. hos_init.h/ohos_ini源码t.h 就界说了 SYS_RUN线程同步() 这一组宏,也便是下面led_example.c中运用到的SYS_RUN(LedExampleEntry); 按这儿的界说一路翻开,毕竟会在线程安全经过.zinitcall产品质量法.run2.in架构图模板it 段中的 __zinitcall_run_app_entry 去履行源码编辑器 LedE源码之家xampleEntry()。

唐佐林教师的《SYS_RUN()和MODUL架构图模板E_架构图INIT()之间的那些事》有十分详细的剖析,请源码集市去看原文。

2. utils_file.h 界说了经过Utils封装的文件操作接口,UtilsFileXxx() 的结束,就在上一级的file/ 目录下,

UtilsFileXxx()
{
return HalFileXxx();
}1.2.3.4.

而这个HalFappleileXxx() 硬件笼统层的接口,便是下图的 KAL 这个方位,也见 #B 的截图:

Hi3861_WiFi IoT工程:了解IoT外设操控模块

HalFileXxx() 再下去就到了Lite产品设计OS_M内核供给的文件操作接口hi_xxx()了见 #B的截图。

3. uti线程ls_list.h 界说和结束了一个双向链表结构,这个结构十分重要。

刚好我这两天看到《v01.10鸿蒙内核源码剖析(双向链表篇)》,也推荐去看原文。

共用根底库的目录结构如上图,细节就不持续翻开了,请自行阅览了解。

  • #B:进入//kernel/liteos_m/目录,线程池面试题先看readme。

下面这张“LiteOS-M核内核架架构图构图”,结合 #A上面的截图(或许无缺的鸿蒙体系架构appearance图),要深化了解一下:Hi3861_WiFi IoT工程:了解IoT外设操控模块

KAL(Kernel Abstract Layer,内核笼统层),是鸿蒙体系结构层(app安装下载Framework)与内核(LiteOS_M、LiteOS_A、Linux内核) 之间的接口,鸿蒙体系结构层与内核层是通appear过KAL接口进行隔绝源码码头宽和耦的。

KAL能够按照cmsis规范或许posix标APP准来结束Framework和kerne产品质量法l的源码之家对接,现在代码看到的是按cm架构师认证sis-rtos v2 规范来结束的。

【这儿要注意,鸿蒙体系无缺代码下的kernel/liteos_m/ 与本项目的kernel/liteos_m/ 目录,结构上存在一些差异,但基本上架构图模板不影响了解,我是两者同时对比着看的,鸿蒙系源码集市统无缺代码的目录结构(如下)明显更加合理:Hi3861_WiFi IoT工程:了解IoT外设操控模块

详见 README。

但在本工程Hi3861线程_Wifiiot里,仍是按照工程的实际目录来剖析。】approach

进入components目录:

kal 子目录,看上去结束了一组KalXxx()接口,主要是timer相关的,都是调用了内核的 LOS_Xxx()来APP结束的。

cmsis子目录,这便是按照cmsis-rtos v2规范来结束的一组接口,进去看一下,主要是获取内核信息、线程处理、timer处理的。咱们在led_example.c中调用的创立线程的接口osThreadNew()便是在这儿结束的。

关于cmsis-rtos v2规范及相关接口,建议看官网的Reference:

www.keil.comappearance/pack线程池/doc/cm…线程池的七个参数

CSDN上XinLiBK将其翻译成中文了:

blog.csdn.net/u012325601/…

我在《鸿蒙体系的发起流程v3.0》一文中说到,我架构师和程序员的区别验证确认了Hi3861_Wifiiotkernel架构师认证liteos_m目录下的kernel 尽appointment管没有编译,但是components源码码头有编译的,能够在产品定位里面加log,线程跑起来能够打印log。

  • #C:进入//base/iot_hardware线程和进程的区别是什么/目录,先看readme。

IoT外设操控模块供给对外围设备的操作才能。

本模块供给如下外围设备操作接口:ADC, AT, FLASH, GPIO, I2C, I2S, PARTITION, PWM, SDIO, UART, WATCHDOG等。源码之家

IoT架构师外设控产品批号是生产日期吗制模块运用C言语编写,现架构师需求把握哪些常识在仅产品介绍支撑Hi3861开发板。

源代码目录结构不行详细,看我再来个略微无缺的表格,再理一下他们之间的调用联络:Hi3861_WiFi IoT工程:了解IoT外设操控模块

这儿 include 的 //base/iot_hardware/inteappointmentrfaces/kits/wifiiot_lite 便是上表中“B的声明”,上底层线程安全之间的调用联络见最右边一列。

4.2 led_example.线程的几种状态c 的翻开
如同把上面 4.1 小结了解透了,led_exam源码网站ple.c 也就天然了解了,线程池这儿就一笔带过。

开端:

#include 共用根底库头文件

#include KAL层供给的cmsis线程处理相关头文件

#incl产品质量法ude 结构层封装的IoT操控模块头文件

1. 经过共用根底库供给的宏SYS_RUN(LedExampleEntry)引导进入LedExampleEntry;

2. LedExampleEntry不能做阻塞产品设计类作业,因为会影响其他运用的发起,调用cmsis接口创立线程安全一个线程LedTask,专门处理操控Led灯开关的作业。

3. LedTask调用结构层IoT操控架构师需求把握哪些常识相关接口(上图中最右列的调用B这一步),然后逐产品战略层向下调用,毕竟结束LED灯的开关操控。

完毕。

4.3 IoT外设操控模块的全体了解
官方供给的上述示例程序,只是展现了怎么经过GAPPPIO去操控Hi3861 WLAN主板上的一颗LED灯。

整套开发板还有其他的扩展板,包括通用底板、显示屏板、NFC板、智能三色灯板等等(官方材料appear包中还供给了更多的扩展硬件功用的辅导阐明),板子上不同的硬件别离能够经过不同的接口去进行操控。

要调试某个板子的硬件,需求先去 //vendor/hisi/hi3861/hi3861/build/config/usr_config.mk 翻开线程撕裂者对应的SUPPORT宏:

# BSP Settings
#
# CONFIG_I2C_SUPPORT is no产品设计t set
# CONFIG_IAPP2S_SUPPORT is not set
# CONFIG_SPI_SUPPORT is not set
# CONFIG_DMA_SUPPORT线程同步 is not set
# CONFIG_SDIO_SUPPORT is not set
# CONFIG_SPI_DMA_SUPPORT is not set
# CONFIG_架构师认证UART_DMA_SUPPORT is not set
# CONFIG_PWM_SUPPORT is not set
# CONFIG_PWM产品运营_HOLD_AFTER_REBOOT is not set
CONFIG_AT_SUPPORT=y
CONF架构师IG_FILE_SYSTEMapplication_SUPPORT=y
CONFIG_UART0_SUPP线程撕裂者ORT=y
CONFIG_UART1_SUPPORT=y
# CONFIG_UART2_SUPPORT is not set
# end of BSP Settings

这些宏会架构图制造在体系发起app_main()的peripheral_init()外围设备初始化阶段,对相关操控接口和数据接口做初始化,之后就能够进行调试了,调试套路和相关操控流程,与上面LED灯的操控迥然不同。

整套开发板的的详细材料,appointment能够去润和官网去下载:

www.hihope.org/download/do…

材猜中包架构图制造含了硬件的数据手appointment册、原理图、demo code以及更多的扩展阐明,源码共享网看起来可玩性仍是蛮高的。

总结:

总的来架构师说,Hi3861_WiFiIot开发板+工程项目产品批号是生产日期吗,仍是非app安装下载常适宜新手入门学习鸿蒙体系的设备开发的,从简略的东西下手,能够逐渐源码集市渐进,把体系架构图中的:上底层次联络、模块组件联络等各种流程都理一遍,不至于一步踏进无缺鸿蒙体系线程池的七个参数的汪洋大海中,举足难进。

下一步的学习,仍是先以这个工程为主,结合无缺鸿蒙的代码,其他还没有进入的模块/组件都去了解一下,把板子玩熟,把设备开发的全体通路打通,形成自己的了解体系,多做总结进行共享,为鸿蒙生态奉献菲薄之架构师认证力。

以上,也算是我对前一阶段自己学习的所得的一点总结吧。

appleapprove这儿,我想喊一句标语,相似“迈出榜首小步,愿望是星斗大海”之类的,遽然想起hb set的产品类别称号:wifiiot_hispark_pegasus,说的不便是这个意思吗,从spark到pegasus,从星星之火到星斗大海。

作者:liangkz

想了解更多内容,请拜访5产品设计1CTO和华为合作共建的鸿蒙社区:harmonyos.51cto.com