自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hi3861_WiFi IoT工程:理解IoT外設(shè)控制模塊

系統(tǒng)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請(qǐng)前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com

[[396608]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

Hi3861_WiFi IoT工程的一點(diǎn)理解

目錄

  • 1.關(guān)于工程本身
  • 2.ohos_bundles
  • 3.工程的目錄結(jié)構(gòu)
  • 4.理解IoT外設(shè)控制模塊
  • 4.1 BUILD.gn 的展開(kāi)
  • 4.2 led_example.c 的展開(kāi)
  • 4.3 IoT外設(shè)控制模塊的整體理解

說(shuō)明:本文是 "Hi3861_WiFi IoT工程的一點(diǎn)理解" 的新增章節(jié),版本升級(jí)到v1.5.

4.理解IoT外設(shè)控制模塊

Hi3861開(kāi)發(fā)板,最主要的功能,就是利用IoT外設(shè)控制模塊提供對(duì)外圍設(shè)備的操作能力,對(duì)外圍設(shè)備操作接口包括了GPIO, I2C, I2S等等,詳情見(jiàn)README。

這一節(jié)我們就從上到下看一下是怎么實(shí)現(xiàn)這些控制的。

我們先看一下官方提供的應(yīng)用示例程序:

  1. applications\sample\wifi-iot\app\iothardware\ BUILD.gn + led_example.c 

4.1 BUILD.gn 的展開(kāi)

.c 文件等下再看,先看BUILD.gn:

  1. include_dirs = [ 
  2.  
  3.      "//utils/native/lite/include",                                    # A 
  4.  
  5.      "//kernel/liteos_m/components/cmsis/2.0",           # B 
  6.  
  7.      "//base/iot_hardware/interfaces/kits/wifiiot_lite",  # C 
  8.  
  9.  ] 
  • #A:進(jìn)到 //utils/native/lite目錄,先看readme。
  1. 公共基礎(chǔ)庫(kù)存放OpenHarmony通用的基礎(chǔ)組件。這些基礎(chǔ)組件可被OpenHarmony各業(yè)務(wù)子系統(tǒng)及上層應(yīng)用所使用。 
  2.  
  3. 公共基礎(chǔ)庫(kù)在不同平臺(tái)上提供的能力: 
  4.  
  5. LiteOS-M內(nèi)核(Hi3861平臺(tái)):KV存儲(chǔ)、文件操作、IoT外設(shè)控制、Dump系統(tǒng)屬性。 
  6.  
  7. LiteOS-A內(nèi)核(Hi3516、Hi3518平臺(tái)):KV存儲(chǔ)、定時(shí)器、數(shù)據(jù)和文件存儲(chǔ)的JS API、Dump系統(tǒng)屬性。 

include目錄包含了很重要的頭文件,應(yīng)用開(kāi)發(fā)或者鴻蒙系統(tǒng)內(nèi)部其他模塊,要調(diào)用這個(gè)公用基礎(chǔ)庫(kù)提供的功能時(shí),都需要包含這個(gè)路徑的頭文件,其中:

1. hos_init.h/ohos_init.h 就定義了 SYS_RUN() 這一組宏,也就是下面led_example.c中使用到的SYS_RUN(LedExampleEntry); 按這里的定義一路展開(kāi),最終會(huì)在通過(guò).zinitcall.run2.init 段中的 __zinitcall_run_app_entry 去執(zhí)行 LedExampleEntry()。

唐佐林老師的《SYS_RUN()和MODULE_INIT()之間的那些事》有非常詳細(xì)的分析,請(qǐng)去看原文。

2. utils_file.h 定義了經(jīng)過(guò)Utils封裝的文件操作接口,UtilsFileXxx() 的實(shí)現(xiàn),就在上一級(jí)的file/ 目錄下,

  1. UtilsFileXxx() 
  2.     return HalFileXxx();   

而這個(gè)HalFileXxx() 硬件抽象層的接口,就是下圖的 KAL 這個(gè)位置,也見(jiàn) #B 的截圖:

HalFileXxx() 再下去就到了LiteOS_M內(nèi)核提供的文件操作接口hi_xxx()了見(jiàn) #B的截圖。

3. utils_list.h 定義和實(shí)現(xiàn)了一個(gè)雙向鏈表結(jié)構(gòu),這個(gè)結(jié)構(gòu)非常重要。

剛好我這兩天看到《v01.10鴻蒙內(nèi)核源碼分析(雙向鏈表篇)》,也推薦去看原文。

公用基礎(chǔ)庫(kù)的目錄結(jié)構(gòu)如上圖,細(xì)節(jié)就不繼續(xù)展開(kāi)了,請(qǐng)自行閱讀理解。

  • #B:進(jìn)入//kernel/liteos_m/目錄,先看readme。

下面這張“LiteOS-M核內(nèi)核架構(gòu)圖”,結(jié)合 #A上面的截圖(或者完整的鴻蒙系統(tǒng)架構(gòu)圖),要深入理解一下:

KAL(Kernel Abstract Layer,內(nèi)核抽象層),是鴻蒙系統(tǒng)框架層(Framework)與內(nèi)核(LiteOS_M、LiteOS_A、Linux內(nèi)核) 之間的接口,鴻蒙系統(tǒng)框架層與內(nèi)核層是通過(guò)KAL接口進(jìn)行隔離和解耦的。

KAL可以按照cmsis標(biāo)準(zhǔn)或者posix標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)Framework和kernel的對(duì)接,目前代碼看到的是按cmsis-rtos v2 標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)的。

【這里要注意,鴻蒙系統(tǒng)完整代碼下的kernel/liteos_m/ 與本項(xiàng)目的kernel/liteos_m/ 目錄,結(jié)構(gòu)上存在一些差異,但基本上不影響理解,我是兩者同時(shí)對(duì)比著看的,鴻蒙系統(tǒng)完整代碼的目錄結(jié)構(gòu)(如下)明顯更加合理:

詳見(jiàn) README。

但在本工程Hi3861_Wifiiot里,還是按照工程的實(shí)際目錄來(lái)分析?!?/p>

進(jìn)入components目錄:

kal 子目錄,看上去實(shí)現(xiàn)了一組KalXxx()接口,主要是timer相關(guān)的,都是調(diào)用了內(nèi)核的 LOS_Xxx()來(lái)實(shí)現(xiàn)的。

cmsis子目錄,這就是按照cmsis-rtos v2標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)的一組接口,進(jìn)去看一下,主要是獲取內(nèi)核信息、線程管理、timer管理的。我們?cè)趌ed_example.c中調(diào)用的創(chuàng)建線程的接口osThreadNew()就是在這里實(shí)現(xiàn)的。

關(guān)于cmsis-rtos v2標(biāo)準(zhǔn)及相關(guān)接口,建議看官網(wǎng)的Reference:

https://www.keil.com/pack/doc/cmsis/rtos2/html/group__CMSIS__RTOS.html

CSDN上XinLiBK將其翻譯成中文了:

https://blog.csdn.net/u012325601/category_9274156.html

我在《鴻蒙系統(tǒng)的啟動(dòng)流程v3.0》一文中提到,我驗(yàn)證確認(rèn)了Hi3861_Wifiiot\kernel\liteos_m\目錄下的kernel 雖然沒(méi)有編譯,但是components是有編譯的,可以在里面加log,跑起來(lái)可以打印log。

  • #C:進(jìn)入//base/iot_hardware/目錄,先看readme。
  1. IoT外設(shè)控制模塊提供對(duì)外圍設(shè)備的操作能力。 
  2.  
  3. 本模塊提供如下外圍設(shè)備操作接口:ADC, AT, FLASH, GPIO, I2C, I2S, PARTITION, PWM, SDIO, UART, WATCHDOG等。 
  4.  
  5. IoT外設(shè)控制模塊使用C語(yǔ)言編寫(xiě),目前僅支持Hi3861開(kāi)發(fā)板。 

源代碼目錄結(jié)構(gòu)不夠詳細(xì),看我再來(lái)個(gè)稍微完整的表格,再理一下他們之間的調(diào)用關(guān)系:

這里 include 的 //base/iot_hardware/interfaces/kits/wifiiot_lite 就是上表中“B的聲明”,上下層之間的調(diào)用關(guān)系見(jiàn)最右邊一列。

4.2 led_example.c 的展開(kāi)

好像把上面 4.1 小結(jié)理解透了,led_example.c 也就自然理解了,這里就一筆帶過(guò)。

開(kāi)始:

#include 公用基礎(chǔ)庫(kù)頭文件

#include KAL層提供的cmsis線程管理相關(guān)頭文件

#include 框架層封裝的IoT控制模塊頭文件

1. 通過(guò)公用基礎(chǔ)庫(kù)提供的宏SYS_RUN(LedExampleEntry)引導(dǎo)進(jìn)入LedExampleEntry;

2. LedExampleEntry不能做堵塞類事情,因?yàn)闀?huì)影響其他應(yīng)用的啟動(dòng),調(diào)用cmsis接口創(chuàng)建一個(gè)線程LedTask,專門處理控制Led燈開(kāi)關(guān)的事情。

3. LedTask調(diào)用框架層IoT控制相關(guān)接口(上圖中最右列的調(diào)用B這一步),然后逐層向下調(diào)用,最終實(shí)現(xiàn)LED燈的開(kāi)關(guān)控制。

結(jié)束。

4.3 IoT外設(shè)控制模塊的整體理解

官方提供的上述示例程序,僅僅展示了如何通過(guò)GPIO去控制Hi3861 WLAN主板上的一顆LED燈。

整套開(kāi)發(fā)板還有其他的擴(kuò)展板,包括通用底板、顯示屏板、NFC板、智能三色燈板等等(官方資料包中還提供了更多的擴(kuò)展硬件功能的指導(dǎo)說(shuō)明),板子上不同的硬件分別可以通過(guò)不同的接口去進(jìn)行控制。

要調(diào)試某個(gè)板子的硬件,需要先去 //vendor/hisi/hi3861/hi3861/build/config/usr_config.mk 打開(kāi)對(duì)應(yīng)的SUPPORT宏:

  1. # BSP Settings 
  2. # CONFIG_I2C_SUPPORT is not set 
  3. # CONFIG_I2S_SUPPORT is not set 
  4. # CONFIG_SPI_SUPPORT is not set 
  5. # CONFIG_DMA_SUPPORT is not set 
  6. # CONFIG_SDIO_SUPPORT is not set 
  7. # CONFIG_SPI_DMA_SUPPORT is not set 
  8. # CONFIG_UART_DMA_SUPPORT is not set 
  9. # CONFIG_PWM_SUPPORT is not set 
  10. # CONFIG_PWM_HOLD_AFTER_REBOOT is not set 
  11. CONFIG_AT_SUPPORT=y 
  12. CONFIG_FILE_SYSTEM_SUPPORT=y 
  13. CONFIG_UART0_SUPPORT=y 
  14. CONFIG_UART1_SUPPORT=y 
  15. # CONFIG_UART2_SUPPORT is not set 
  16. end of BSP Settings 

這些宏會(huì)在系統(tǒng)啟動(dòng)app_main()的peripheral_init()外圍設(shè)備初始化階段,對(duì)相關(guān)控制接口和數(shù)據(jù)接口做初始化,之后就可以進(jìn)行調(diào)試了,調(diào)試套路和相關(guān)控制流程,與上面LED燈的控制大同小異。

整套開(kāi)發(fā)板的的詳細(xì)資料,可以去潤(rùn)和官網(wǎng)去下載:

http://www.hihope.org/download/download.aspx?mtt=8

資料中包含了硬件的數(shù)據(jù)手冊(cè)、原理圖、demo code以及更多的擴(kuò)展說(shuō)明,看起來(lái)可玩性還是蠻高的。

總結(jié):

總的來(lái)說(shuō),Hi3861_WiFiIot開(kāi)發(fā)板+工程項(xiàng)目,還是非常適合新手入門學(xué)習(xí)鴻蒙系統(tǒng)的設(shè)備開(kāi)發(fā)的,從簡(jiǎn)單的東西入手,可以逐步漸進(jìn),把系統(tǒng)架構(gòu)圖中的:上下層次關(guān)系、模塊組件關(guān)系等各種流程都理一遍,不至于一步踏進(jìn)完整鴻蒙系統(tǒng)的汪洋大海中,舉足難進(jìn)。

下一步的學(xué)習(xí),還是先以這個(gè)工程為主,結(jié)合完整鴻蒙的代碼,其他還沒(méi)有涉足的模塊/組件都去了解一下,把板子玩熟,把設(shè)備開(kāi)發(fā)的整體通路打通,形成自己的理解體系,多做總結(jié)進(jìn)行分享,為鴻蒙生態(tài)貢獻(xiàn)微薄之力。

以上,也算是我對(duì)前一階段自己學(xué)習(xí)的所得的一點(diǎn)總結(jié)吧。

寫(xiě)到這里,我想喊一句口號(hào),類似“邁出第一小步,夢(mèng)想是星辰大海”之類的,突然想起hb set的產(chǎn)品類別名稱:wifiiot_hispark_pegasus,說(shuō)的不就是這個(gè)意思嗎,從spark到pegasus,從星星之火到星辰大海。

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2021-04-30 09:43:27

鴻蒙HarmonyOS應(yīng)用

2021-04-26 15:19:02

鴻蒙HarmonyOS應(yīng)用

2020-11-23 13:09:42

HI3861

2021-12-31 15:07:00

鴻蒙HarmonyOS應(yīng)用

2020-10-16 09:50:37

Hi3861WiFi熱點(diǎn)

2023-07-24 11:48:59

物聯(lián)網(wǎng)

2021-10-11 10:07:09

鴻蒙HarmonyOS應(yīng)用

2020-10-30 09:41:44

鴻蒙Hi3861WiFi小車

2019-08-07 17:25:47

物聯(lián)網(wǎng)企業(yè)初創(chuàng)公司

2015-07-10 15:31:42

ITIoT物聯(lián)網(wǎng)

2020-11-03 11:39:22

wifi小車

2020-03-02 14:05:11

IOT物聯(lián)網(wǎng)大數(shù)據(jù)

2016-04-08 10:05:46

2018-02-24 10:29:59

2021-04-25 10:06:57

鴻蒙HarmonyOS應(yīng)用

2021-12-15 15:28:18

鴻蒙HarmonyOS應(yīng)用

2017-08-02 17:23:22

AzureIoTAWS

2018-07-09 15:40:04

IOT機(jī)器學(xué)習(xí)應(yīng)用

2018-02-19 21:45:23

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)