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

第3章鴻蒙 hi3681 開發板入門 代碼路徑、啟動流程分析

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

[[350820]]

想了解更多內容,請訪問:
51CTO和華為官方合作共建的鴻蒙技術社區
https://harmonyos.51cto.com/#zz

第3章 Hi3681開發

目錄:

3.1 編寫一個簡單的hello world程序

3.2 Hi3861相關代碼結構

3.2 Hi3861啟動流程

3.1 編寫一個簡單的hello world程序

編寫一個hello world程序比較簡單,可以參考官網:

https://device.harmonyos.com/cn/docs/start/introduce/oem_wifi_start-0000001050168544

本文在這里做下總結:

(1)確定目錄結構。

開發者編寫業務時,務必先在./applications/sample/wifi-iot/app路徑下新建一個目錄(或一套目錄結構),用于存放業務源碼文件。

例如:在app下新增業務my_first_app,其中hello_world.c為業務代碼,BUILD.gn為編譯腳本,具體規劃目錄結構如下:

  1.  
  2. └── applications 
  3.  
  4.     └── sample 
  5.  
  6.         └── wifi-iot 
  7.  
  8.             └── app 
  9.  
  10.                 │── my_first_app 
  11.  
  12.                 │  │── hello_world.c 
  13.  
  14.                 │  └── BUILD.gn 
  15.  
  16.                 └── BUILD.gn 

 (2)編寫業務代碼。

在hello_world.c中新建業務入口函數HelloWorld,并實現業務邏輯。并在代碼最下方,使用 HarmonyOS啟動恢復模塊接口SYS_RUN()啟動業務。(SYS_RUN定義在ohos_init.h文件中)

  1. #include "ohos_init.h" 
  2.  
  3. #include "ohos_types.h" 
  4.  
  5.  
  6.  
  7.  
  8. void HelloWorld(void) 
  9.  
  10.  
  11.     printf("[DEMO] Hello world.\n"); 
  12.  
  13.  
  14. SYS_RUN(HelloWorld); 

 (3)編寫用于將業務構建成靜態庫的BUILD.gn文件。

如步驟1所述,BUILD.gn文件由三部分內容(目標、源文件、頭文件路徑)構成,需由開發者完成填寫。以my_first_app為例,需要創建./applications/sample/wifi-iot/app/my_first_app/BUILD.gn,并完如下配置。 

  1. static_library("myapp") { 
  2.  
  3.     sources = [ 
  4.  
  5.         "hello_world.c" 
  6.  
  7.     ] 
  8.  
  9.     include_dirs = [ 
  10.  
  11.         "//utils/native/liteos/include" 
  12.  
  13.     ] 
  14.  

static_library中指定業務模塊的編譯結果,為靜態庫文件libmyapp.a,開發者根據實際情況完成填寫。

sources中指定靜態庫.a所依賴的.c文件及其路徑,若路徑中包含"//"則表示絕對路徑(此處為代碼根路徑),若不包含"//"則表示相對路徑。

include_dirs中指定source所需要依賴的.h文件路徑。

(4)編寫模塊BUILD.gn文件,指定需參與構建的特性模塊。

配置./applications/sample/wifi-iot/app/BUILD.gn文件,在features字段中增加索引,使目標模塊參與編譯。features字段指定業務模塊的路徑和目標,以my_first_app舉例,features字段配置如下。

  1. import("//build/lite/config/component/lite_component.gni"
  2.  
  3.  
  4.  
  5.  
  6. lite_component("app") { 
  7.  
  8.     features = [ 
  9.  
  10.         "my_first_app:myapp"
  11.  
  12.     ] 
  13.  

my_first_app是相對路徑,指向./applications/sample/wifi-iot/app/my_first_app/BUILD.gn。

myapp是目標,指向./applications/sample/wifi-iot/app/my_first_app/BUILD.gn中的static_library("myapp")。

3.2 Hi3861相關代碼結構

目前hi3861用的是liteos-m內核,但是目前hi3681的liteos-m被芯片rom化了,固化在芯片內部了。所以在harmonyOS代碼是找不到hi3861的內核部分。

但是這樣不妨礙我們去理清hi3861的其他代碼結構。

hi3861平臺配置文件

build\lite\platform\hi3861v100_liteos_riscv\platform.json

該文件描述了hi3681平臺相關的代碼路徑,例如application、startup等。

 這里我列舉出來幾個比較重要的:

子系統:applications :

路徑:applications/sample/wifi-iot/app

作用:這個路徑下存放了hi3681編寫的應用程序代碼,例如我們剛剛寫得hello world 代碼就放在這個路徑下。

子系統:iot_hardware :

路徑:base/iot_hardware/frameworks/wifiiot_lite

作用:存放了 hi3681 芯片相關的驅動、例如spi、gpio、uart等。

子系統:vendor

路徑:vendor/hisi/hi3861/hi3861

作用:存放了 hi3681 相關的廠商SDK之類的文件。其中最重要的是

vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c

vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c

其中,app_io_init.c 是hi3681內核啟動后的io口相關設置,用戶需根據應用場景,合理選擇各外設的IO復用配置。

app_main.c 是內核啟動進入的應用程序入口。

3.2 Hi3861啟動流程

由于hi3681的liteos-m被芯片rom化了,固化在芯片內部了。所以我們主要看內核啟動后的第一個入口函數。

代碼路徑:

vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c

  1. hi_void app_main(hi_void) 
  2.  
  3.  
  4. #ifdef CONFIG_FACTORY_TEST_MODE 
  5.  
  6.         printf("factory test mode!\r\n"); 
  7.  
  8. #endif 
  9.  
  10.  
  11.  
  12.  
  13.     const hi_char* sdk_ver = hi_get_sdk_version(); 
  14.  
  15.     printf("sdk ver:%s\r\n", sdk_ver); 
  16.  
  17.     hi_flash_partition_table *ptable = HI_NULL; 
  18.  
  19.  
  20.  
  21.  
  22.     peripheral_init(); 
  23.  
  24.  
  25.  
  26.  
  27.       …..中間省略代碼 
  28.  
  29.  
  30.  
  31.  
  32.       HOS_SystemInit(); 
  33.  

app_main一開始打印了 SDK版本號,最后一行會調用HOS_SystemInit(); 函數進行鴻蒙系統的初始化。我們進去看下初始化做了哪些動作。

路徑:base/startup/services/bootstrap_lite/source/system_init.c 

  1. void HOS_SystemInit(void) 
  2.  
  3.  
  4.     MODULE_INIT(bsp); 
  5.  
  6.     MODULE_INIT(device); 
  7.  
  8.     MODULE_INIT(core); 
  9.  
  10.     SYS_INIT(service); 
  11.  
  12.     SYS_INIT(feature); 
  13.  
  14.     MODULE_INIT(run); 
  15.  
  16.     SAMGR_Bootstrap(); 
  17.  

我們可以看到主要是初始化了 一些相關模塊、系統,包括有bsp、device(設備)。其中最終的是MODULE_INIT(run);

它負責調用了,所有run段的代碼,那么run段的代碼是哪些呢?

事實上就是我們前面application中使用SYS_RUN() 宏設置的函數名。

還記得我們前面寫的hello world應用程序嗎?

  1. #include "ohos_init.h" 
  2.  
  3. #include "ohos_types.h" 
  4.  
  5.  
  6.  
  7.  
  8. void HelloWorld(void) 
  9.  
  10.  
  11.     printf("[DEMO] Hello world.\n"); 
  12.  
  13.  
  14. SYS_RUN(HelloWorld); 

也就是說所有用SYS_RUN() 宏設置的函數都會在使用MODULE_INIT(run); 的時候被調用。

為了驗證這一點,我們可以加一些打印信息,如下:

 我們重新編譯后燒錄。打開串口查看打印信息,如下:

可以看到在35行之后,就打印 hello world的信息。符合預期。

想了解更多內容,請訪問:
51CTO和華為官方合作共建的鴻蒙技術社區
https://harmonyos.51cto.com/#zz

 

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

2022-08-19 10:54:47

操作系統鴻蒙

2021-05-25 14:47:43

鴻蒙HarmonyOS應用

2020-12-08 12:36:41

Hi3861 ADC驅動開發

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-12-15 11:57:49

Hi3861 HarmonyOS開發板

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2021-06-25 09:28:46

鴻蒙HarmonyOS應用

2020-10-27 10:08:19

Hi3861ADC驅動

2020-11-18 11:56:06

鴻蒙Hi3861

2021-06-25 15:32:13

鴻蒙HarmonyOS應用

2021-12-20 21:01:52

鴻蒙HarmonyOS應用

2021-12-15 15:28:18

鴻蒙HarmonyOS應用

2020-11-06 10:15:16

HiBurn

2020-12-16 10:05:48

鴻蒙開發板Onenet平臺

2020-10-30 17:42:36

鴻蒙 OS Hi386

2021-07-21 15:33:03

鴻蒙HarmonyOS應用

2021-09-16 10:03:39

鴻蒙HarmonyOS應用

2020-11-11 10:06:15

鴻蒙

2013-07-23 13:56:57

開源硬件開發板

2020-12-17 10:02:16

鴻蒙Hi3861開發板
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久免费香蕉视频 | 国产三区精品 | 成人在线视频免费播放 | 91久久精品视频 | 福利在线观看 | 二区欧美| 91福利在线观看视频 | 91精品国产一区二区三区 | 国产福利资源在线 | 亚洲精品欧美一区二区三区 | 成人在线视频网 | 日韩在线三级 | 欧洲一区视频 | 久久久91精品国产一区二区三区 | 国产精品爱久久久久久久 | 中文字幕日韩在线 | 日韩在线精品强乱中文字幕 | 国产视频在线一区二区 | 国产乱码精品一区二三赶尸艳谈 | 国产精品久久久久久久久久免费看 | 成人亚洲视频 | 国产精品久久久久久久久久免费看 | 水蜜桃久久夜色精品一区 | 欧美色性 | 久久一区二区精品 | www.青青草| 精品在线一区 | 日韩国产在线 | 成人亚洲性情网站www在线观看 | 亚洲人成人一区二区在线观看 | 精品视频在线一区 | 美女逼网站 | 男女性毛片 | 97人人超碰| 欧美精品网站 | 日韩精品一区二区三区中文在线 | 久久久久久久一区 | 范冰冰一级做a爰片久久毛片 | 久久青| 午夜免费电影院 | 视频三区 |