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体系特征。
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 的截图:
HalFileXxx() 再下去就到了Lite产品设计OS_M内核供给的文件操作接口hi_xxx()了见 #B的截图。
3. uti线程ls_list.h 界说和结束了一个双向链表结构,这个结构十分重要。
刚好我这两天看到《v01.10鸿蒙内核源码剖析(双向链表篇)》,也推荐去看原文。
共用根底库的目录结构如上图,细节就不持续翻开了,请自行阅览了解。
- #B:进入//kernel/liteos_m/目录,线程池面试题先看readme。
下面这张“LiteOS-M核内核架架构图构图”,结合 #A上面的截图(或许无缺的鸿蒙体系架构appearance图),要深化了解一下:
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/ 目录,结构上存在一些差异,但基本上架构图模板不影响了解,我是两者同时对比着看的,鸿蒙系源码集市统无缺代码的目录结构(如下)明显更加合理:
详见 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开发板。
源代码目录结构不行详细,看我再来个略微无缺的表格,再理一下他们之间的调用联络:
这儿 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安装下载常适宜新手入门学习鸿蒙体系的设备开发的,从简略的东西下手,能够逐渐源码集市渐进,把体系架构图中的:上底层次联络、模块组件联络等各种流程都理一遍,不至于一步踏进无缺鸿蒙体系线程池的七个参数的汪洋大海中,举足难进。
下一步的学习,仍是先以这个工程为主,结合无缺鸿蒙的代码,其他还没有进入的模块/组件都去了解一下,把板子玩熟,把设备开发的全体通路打通,形成自己的了解体系,多做总结进行共享,为鸿蒙生态奉献菲薄之架构师认证力。
以上,也算是我对前一阶段自己学习的所得的一点总结吧。
写apple到approve这儿,我想喊一句标语,相似“迈出榜首小步,愿望是星斗大海”之类的,遽然想起hb set的产品类别称号:wifiiot_hispark_pegasus,说的不便是这个意思吗,从spark到pegasus,从星星之火到星斗大海。
作者:liangkz
想了解更多内容,请拜访5产品设计1CTO和华为合作共建的鸿蒙社区:harmonyos.51cto.com