成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hi3861_WiFi IoT工程:理解IoT外設控制模塊

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[396608]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

Hi3861_WiFi IoT工程的一點理解

目錄

  • 1.關于工程本身
  • 2.ohos_bundles
  • 3.工程的目錄結構
  • 4.理解IoT外設控制模塊
  • 4.1 BUILD.gn 的展開
  • 4.2 led_example.c 的展開
  • 4.3 IoT外設控制模塊的整體理解

說明:本文是 "Hi3861_WiFi IoT工程的一點理解" 的新增章節,版本升級到v1.5.

4.理解IoT外設控制模塊

Hi3861開發板,最主要的功能,就是利用IoT外設控制模塊提供對外圍設備的操作能力,對外圍設備操作接口包括了GPIO, I2C, I2S等等,詳情見README。

這一節我們就從上到下看一下是怎么實現這些控制的。

我們先看一下官方提供的應用示例程序:

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

4.1 BUILD.gn 的展開

.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:進到 //utils/native/lite目錄,先看readme。
  1. 公共基礎庫存放OpenHarmony通用的基礎組件。這些基礎組件可被OpenHarmony各業務子系統及上層應用所使用。 
  2.  
  3. 公共基礎庫在不同平臺上提供的能力: 
  4.  
  5. LiteOS-M內核(Hi3861平臺):KV存儲、文件操作、IoT外設控制、Dump系統屬性。 
  6.  
  7. LiteOS-A內核(Hi3516、Hi3518平臺):KV存儲、定時器、數據和文件存儲的JS API、Dump系統屬性。 

include目錄包含了很重要的頭文件,應用開發或者鴻蒙系統內部其他模塊,要調用這個公用基礎庫提供的功能時,都需要包含這個路徑的頭文件,其中:

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

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

2. utils_file.h 定義了經過Utils封裝的文件操作接口,UtilsFileXxx() 的實現,就在上一級的file/ 目錄下,

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

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

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

3. utils_list.h 定義和實現了一個雙向鏈表結構,這個結構非常重要。

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

公用基礎庫的目錄結構如上圖,細節就不繼續展開了,請自行閱讀理解。

  • #B:進入//kernel/liteos_m/目錄,先看readme。

下面這張“LiteOS-M核內核架構圖”,結合 #A上面的截圖(或者完整的鴻蒙系統架構圖),要深入理解一下:

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

KAL可以按照cmsis標準或者posix標準來實現Framework和kernel的對接,目前代碼看到的是按cmsis-rtos v2 標準來實現的。

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

詳見 README。

但在本工程Hi3861_Wifiiot里,還是按照工程的實際目錄來分析?!?/p>

進入components目錄:

kal 子目錄,看上去實現了一組KalXxx()接口,主要是timer相關的,都是調用了內核的 LOS_Xxx()來實現的。

cmsis子目錄,這就是按照cmsis-rtos v2標準來實現的一組接口,進去看一下,主要是獲取內核信息、線程管理、timer管理的。我們在led_example.c中調用的創建線程的接口osThreadNew()就是在這里實現的。

關于cmsis-rtos v2標準及相關接口,建議看官網的Reference:

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

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

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

我在《鴻蒙系統的啟動流程v3.0》一文中提到,我驗證確認了Hi3861_Wifiiot\kernel\liteos_m\目錄下的kernel 雖然沒有編譯,但是components是有編譯的,可以在里面加log,跑起來可以打印log。

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

源代碼目錄結構不夠詳細,看我再來個稍微完整的表格,再理一下他們之間的調用關系:

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

4.2 led_example.c 的展開

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

開始:

#include 公用基礎庫頭文件

#include KAL層提供的cmsis線程管理相關頭文件

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

1. 通過公用基礎庫提供的宏SYS_RUN(LedExampleEntry)引導進入LedExampleEntry;

2. LedExampleEntry不能做堵塞類事情,因為會影響其他應用的啟動,調用cmsis接口創建一個線程LedTask,專門處理控制Led燈開關的事情。

3. LedTask調用框架層IoT控制相關接口(上圖中最右列的調用B這一步),然后逐層向下調用,最終實現LED燈的開關控制。

結束。

4.3 IoT外設控制模塊的整體理解

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

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

要調試某個板子的硬件,需要先去 //vendor/hisi/hi3861/hi3861/build/config/usr_config.mk 打開對應的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 

這些宏會在系統啟動app_main()的peripheral_init()外圍設備初始化階段,對相關控制接口和數據接口做初始化,之后就可以進行調試了,調試套路和相關控制流程,與上面LED燈的控制大同小異。

整套開發板的的詳細資料,可以去潤和官網去下載:

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

資料中包含了硬件的數據手冊、原理圖、demo code以及更多的擴展說明,看起來可玩性還是蠻高的。

總結:

總的來說,Hi3861_WiFiIot開發板+工程項目,還是非常適合新手入門學習鴻蒙系統的設備開發的,從簡單的東西入手,可以逐步漸進,把系統架構圖中的:上下層次關系、模塊組件關系等各種流程都理一遍,不至于一步踏進完整鴻蒙系統的汪洋大海中,舉足難進。

下一步的學習,還是先以這個工程為主,結合完整鴻蒙的代碼,其他還沒有涉足的模塊/組件都去了解一下,把板子玩熟,把設備開發的整體通路打通,形成自己的理解體系,多做總結進行分享,為鴻蒙生態貢獻微薄之力。

以上,也算是我對前一階段自己學習的所得的一點總結吧。

寫到這里,我想喊一句口號,類似“邁出第一小步,夢想是星辰大海”之類的,突然想起hb set的產品類別名稱:wifiiot_hispark_pegasus,說的不就是這個意思嗎,從spark到pegasus,從星星之火到星辰大海。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-04-26 15:19:02

鴻蒙HarmonyOS應用

2021-04-30 09:43:27

鴻蒙HarmonyOS應用

2020-10-16 09:50:37

Hi3861WiFi熱點

2021-12-31 15:07:00

鴻蒙HarmonyOS應用

2020-11-23 13:09:42

HI3861

2020-11-03 11:39:22

wifi小車

2023-07-24 11:48:59

物聯網

2021-10-11 10:07:09

鴻蒙HarmonyOS應用

2021-02-02 15:52:17

鴻蒙HarmonyOS應用開發

2015-07-10 15:31:42

ITIoT物聯網

2019-08-07 17:25:47

物聯網企業初創公司

2021-04-25 10:06:57

鴻蒙HarmonyOS應用

2020-10-30 09:41:44

鴻蒙Hi3861WiFi小車

2021-12-15 15:28:18

鴻蒙HarmonyOS應用

2020-03-02 14:05:11

IOT物聯網大數據

2018-02-24 10:29:59

2016-04-08 10:05:46

2023-05-26 16:07:14

Hi3861Wifi模塊

2017-08-02 17:23:22

AzureIoTAWS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 高清国产午夜精品久久久久久 | 亚洲第一av | av在线一区二区三区 | 国产精品自拍视频网站 | 亚洲精品福利视频 | 99久久精品国产毛片 | 久久99精品久久久久久国产越南 | 精品久久亚洲 | 一级做a | 精品国产一区二区三区久久久四川 | 97色在线视频 | 国产91亚洲精品 | 国产高清精品一区二区三区 | hsck成人网 | 97伦理最新伦理 | 欧洲一级黄| 久久精品黄色 | 日本三级在线网站 | 久久手机视频 | 亚洲一区二区网站 | 99国内精品 | 国产91成人 | 最新中文字幕在线 | 91久久国产综合久久91精品网站 | 久久夜视频 | 亚洲欧洲在线视频 | 亚洲欧美一区二区三区国产精品 | 日本成人在线播放 | 日韩成人免费视频 | 欧美日韩国产中文 | 免费观看的黄色网址 | av三级 | 久久99视频 | 日本精品一区二区三区在线观看视频 | 日韩成人精品一区 | 欧美性受| 久久亚洲国产精品 | www.一区二区三区 | www日本高清视频 | jizz视频| 久久久99国产精品免费 |