精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

分析鴻蒙系統helloworld程序是如何被調用,SYS_RUN做什么事情

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

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

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

https://harmonyos.51cto.com

分析 helloworld程序是如何被調用,SYS_RUN做什么事情

相信大家都已經在鴻蒙系統上實現了自己的第一個helloworld程序了。 

 

代碼很簡單,編譯燒錄后,我們就可以看到串口有打印 [DEMO] Hello world.

但是 HelloWorld 函數是在何時被調用的呢?SYS_RUN 又是干嘛的呢?

我們來看下。

1. 啟動流程

首先,我們需要分析一下Hi3861的啟動流程。目前Hi3861 使用的是liteOS-M內核,相關源碼廠家沒有提供,不過也不妨礙我們。經過我一番查找,可以知道hi3861啟動內后,第一個入口函數是 app_main函數。

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

大家可以打開,看到app_main函數的內容,如下,當然我這里只是簡版的,我刪除了很多初始化的函數,只保留最終要的。 

  1. hi_void app_main(hi_void) 
  2.  //打印sdk版本 
  3.  const hi_char* sdk_ver = hi_get_sdk_version(); 
  4.     printf("sdk ver:%s\r\n", sdk_ver); 
  5.  
  6.  //串口、IO初始化等 
  7.  peripheral_init(); 
  8.  
  9.  //wifi初始化 
  10.  ret = hi_wifi_init(APP_INIT_VAP_NUM, APP_INIT_USR_NUM); 
  11.  
  12.  
  13.  //鴻蒙系統初始化 
  14.  HOS_SystemInit(); 

我們可以看到其實app_main啟動后做了很多工作,包括io初始化、wifi初始,最后調用了HOS_SystemInit(); 進行鴻蒙系統最后的初始化。

那我們看下 HOS_SystemInit(); 做了什么動作吧。

打開源碼 base\startup\services\bootstrap_lite\source\system_init.c

可以看到函數內容如下: 

  1. void HOS_SystemInit(void) 
  2.     MODULE_INIT(bsp); 
  3.     MODULE_INIT(device); 
  4.     MODULE_INIT(core); 
  5.     SYS_INIT(service); 
  6.     SYS_INIT(feature); 
  7.     MODULE_INIT(run); 
  8.     SAMGR_Bootstrap(); 

看起來好像在調用某些模塊,仔細看,其中有一個是 MODULE_INIT(run); 。顧名思義,好像在初始化或者調用 一個 run 模塊。那run模塊又是什么呢?我們看下標題的 SYS_RUN(HelloWorld)。 是不是可以猜測其實MODULE_INIT(run); 就是調用了 HelloWorld 呢?

哈哈哈~其實還真是。大家如果加打印信息,可以看到如下打印。 

  1. ../../base/startup/services/bootstrap_lite/source/system_init.c 38  
  2.  
  3. ../../applications/sample/wifi-iot/app/my_first_app/hello_world.c 9  
  4.  
  5. [DEMO] Hello world. 
  6.  
  7. ../../base/startup/services/bootstrap_lite/source/system_init.c 40  

仔細看我加的打印語句,確實是在 38 行執行 MODULE_INIT(run); 后才打印 [DEMO] Hello world.

所以跟我們猜測的一樣。當然沒完,我們得分析為啥 是這樣。 

 

 

2. 鏈接

我們看下 MODULE_INIT(run); 做了什么。事實上,它只是一個宏。 

  1. #define MODULE_INIT(name) \ 
  2.  
  3. do { \ 
  4.  
  5. MODULE_CALL(name, 0); \ 
  6.  
  7. } while (0) 

而 MODULE_CALL(name, 0); 又可以展開:當然里面的if 語句的打印是我后面加的。 

 

我們可以看到 它其實是定義了一個 InitCall 指針,然后指針是這個: 

  1. (MODULE_BEGIN(name, step)) 

而 MODULE_BEGIN 宏其實展開后如下: 

  1. #define MODULE_NAME(name, step) ".zinitcall." #name #step ".init" 

我這里再幫大家展開,其實".zinitcall." #name #step ".init" 最后 就是 .zinitcall.run2.init

它其實是一種寫法,就是說我們代碼編譯的時候,代碼里面有一段地址比較特殊,它的名字是 .zinitcall.run2.init ,也就是說 InitCall 指針 指向的是 .zinitcall.run2.init 代碼段的地址。

畫個圖:

綠色的是.zinitcall.run2.init 代碼段,里面存放著函數指針。 

 

好了,到這里大家應該都明白了吧,繼續看這個圖,其實 這里只不過是把這個代碼段里面的所有函數指針都取出來,然后執行一下函數指針指向的函數。  

 

聰明的你應該就猜到了,.zinitcall.run2.init 代碼段里面的函數指針,指向的就是 HelloWorld 函數了~~~ 

 

到了這里就剩下最后一個問題了: 怎么讓它指向 HelloWorld 函數。

這里其實就是 SYS_RUN的功勞了。

我們也來看SYS_RUN做了什么,其它也是一個宏,展開過程如下:

我們可以看到,其實SYS_RUN(HelloWorld) 其實最終結果就是: 

  1. static const InitCall USED_ATTR __zinitcall_##layer##_##func \ 
  2.  
  3.         __attribute__((section(".zinitcall." clayer #priority ".init"))) = HelloWorld 

看起來很復雜,我們不乏拆解一下:

 

我們先不看紅色字體部分,那么結果就是:

static const InitCall = HelloWorld

是不是很簡單,其實就是定義了一個全局變量(函數指針),它指向 HelloWorld 。

那紅色字體是做什么用呢?它其實就是告訴編譯,我這個變量(static const InitCall 變量),很特殊,編譯的時候給我編譯在 .zinitcall.run2.init 段。

到了,一切都明了了,最后來一張啟動流程圖總結一下:  

 

3. 忠告

這里有兩個忠告:

1、請不要直接在SYS_RUN()定義的入口函數直接寫 while(1)

——這個很簡單理解了,因為系統啟動后,app_main會調用到 我們定義的SYS_RUN()定義的入口函數,比如HelloWorld。 如果我們在 HelloWorld 函數中寫了while(1) 就會導致 app_main 后續的代碼得不到執行,肯定有問題。

2、SYS_RUN()定義的入口函數創建的線程,請一定要有sleep動作。

為了解決第一個問題,我們很自然地想到,可以在 SYS_RUN()定義的入口函數 創建線程,這樣就可以while(1)了。哈哈,其實也是有問題,因為 app_main 本身也是一個任務,如果我們自己創建地任務優先級特別高,就會導致 app_main 任務不會被執行,還是有問題。所以要有sleep,確保 app_main 后續地代碼能順利執行下去。

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

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

https://harmonyos.51cto.com

 

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

2020-06-08 15:15:26

程序員擺地攤技術

2020-07-09 11:57:50

機器學習函數學習

2024-03-28 10:40:43

javanew關鍵字

2020-12-15 09:33:40

鴻蒙Hi3861開發板

2022-05-24 07:57:06

前端監控系統

2012-11-26 10:58:33

2020-11-04 16:00:22

文件系統

2013-07-15 17:17:20

2022-01-07 17:28:07

操作系統IO 內存

2019-04-29 15:27:57

網絡故障工具

2021-04-30 20:20:36

HugePages大內存頁系統

2010-08-20 09:52:36

丁磊管理

2022-02-09 10:56:09

ReactJS組件前端

2024-04-01 08:23:20

代碼Javajavascript

2023-03-03 09:11:55

軟件開發NASA

2017-05-17 14:51:31

DNS架構負載均衡

2018-05-23 12:29:36

2022-09-24 13:29:42

Spring操作SQL

2024-02-19 12:24:58

點贊
收藏

51CTO技術棧公眾號

人禽交欧美网站| 国产美女撒尿一区二区| 亚洲日本va在线观看| 99久久自偷自偷国产精品不卡| 国产一级黄色av| 亚洲都市激情| 欧美肥胖老妇做爰| 老太脱裤让老头玩ⅹxxxx| 牛牛影视精品影视| 国产伦精品一区二区三区免费迷| 欧美激情一区二区三区在线视频观看| 亚洲熟妇一区二区三区| 国产精品成人**免费视频| 精品国产户外野外| 最新视频 - x88av| 亚洲欧美日韩综合在线| 激情偷乱视频一区二区三区| 91国在线精品国内播放 | 国产午夜精品久久| 91亚洲精品一区二区| 在线天堂中文字幕| 亚洲精品99| 亚洲男人天堂古典| 在线播放av网址| 欧美亚洲福利| 日韩欧美在线视频| 日韩国产成人无码av毛片| 超碰国产在线| 91免费版在线| 国产麻豆乱码精品一区二区三区| caoporn国产| 国产精品videosex极品| 最近2019年中文视频免费在线观看| 污片免费在线观看| 麻豆久久一区| 欧美放荡的少妇| 日韩av片网站| 日韩欧美另类一区二区| 午夜欧美视频在线观看 | 亚洲av无码一区二区三区观看| 懂色av色香蕉一区二区蜜桃| 欧美在线短视频| 欧美牲交a欧美牲交| 欧美78videosex性欧美| 综合婷婷亚洲小说| 一区二区精品在线| 不卡在线视频| 欧美国产禁国产网站cc| 欧美裸体网站| 亚洲av电影一区| 成人激情小说乱人伦| 99热在线播放| 亚洲精选一区二区三区| 国产原创一区二区| 91深夜福利视频| 国产精品一品二区三区的使用体验| 美女视频免费一区| 国产精品看片资源| 这里只有久久精品视频| 免费成人av资源网| 91精品国产综合久久香蕉最新版 | 亚洲综合网在线| 婷婷综合网站| 久久大大胆人体| 午夜免费激情视频| 亚洲午夜一区| 97视频在线看| 极品国产91在线网站| 日韩主播视频在线| 国产精品一区二区电影| 国产精品国产av| 国产精品一二三在| 国产精品日韩欧美一区二区三区| 性色av蜜臀av| 99国产欧美久久久精品| 日产精品久久久一区二区| 成年午夜在线| 综合久久久久久久| 久久久久久人妻一区二区三区| 日韩深夜视频| 欧美丝袜丝交足nylons图片| 亚洲久久中文字幕| 日韩成人18| 日韩成人在线视频观看| 日韩毛片无码永久免费看| 99精品综合| 久99九色视频在线观看| 天天操天天摸天天干| 秋霞电影网一区二区| 亚洲一区精品电影| 亚洲 欧美 激情 小说 另类| 国产精品网站导航| av在线com| 亚洲va中文在线播放免费| 欧美丰满嫩嫩电影| 大又大又粗又硬又爽少妇毛片 | 天天操中文字幕| 日韩av电影天堂| 成人动漫在线视频| 久久米奇亚洲| 夜夜揉揉日日人人青青一国产精品| 精品久久一二三| 青青久久精品| 国产视频在线一区二区| 天天做夜夜爱爱爱| 亚洲免费一区二区| 亚洲aⅴ男人的天堂在线观看| 台湾av在线二三区观看| 1024视频在线| 国产一区二区精品久久| 久久精品人人做人人爽电影| 黄色在线免费看| 色伊人久久综合中文字幕| 爱情岛论坛亚洲自拍| 你懂的一区二区三区| 久久久久久com| 亚洲中文字幕在线观看| 久久免费午夜影院| 欧美大黑帍在线播放| 日韩午夜电影免费看| 精品一区二区三区三区| 久久久久香蕉视频| 久久99久久99精品免视看婷婷| 久久狠狠久久综合桃花| 性欧美video高清bbw| 欧美日韩在线观看一区二区| 免费a级黄色片| 亚洲免费播放| 99re资源| 在线观看三级视频| 欧美美女bb生活片| 色www亚洲国产阿娇yao| 国产精品久久久久9999高清| 99国内精品久久久久久久软件| 日韩三级影院| 在线观看成人小视频| 91精品国产自产| 亚洲激情社区| 国产日韩精品推荐| heyzo高清国产精品| 欧美电影精品一区二区| 久久精品黄色片| 国产一区二区三区美女| 亚洲一区二区三区精品视频| 国产一区二区三区朝在线观看| 精品小视频在线| www日韩精品| www.在线成人| 91免费黄视频| 老牛精品亚洲成av人片| 91精品国产高清自在线| 亚洲日本香蕉视频| 欧美日韩国产精品专区 | 中文字幕久久久久| 亚洲国产精品传媒在线观看| 91人人澡人人爽人人精品| 成人情趣视频| 国产一区二区色| а天堂8中文最新版在线官网| 欧美在线啊v一区| 91香蕉视频污在线观看| 国产一区二区调教| 国产美女主播在线| 欧美人与动xxxxz0oz| 3344国产精品免费看| 日韩a在线观看| 91电影在线观看| 亚洲区一区二区三| 国产精品18久久久久久久久 | 日韩精品三区四区| 亚洲最大免费| 亚洲综合网狠久久| 欧美在线视频观看| 92国产在线视频| 日韩一区二区在线观看视频| 国产一级在线观看视频| 久久久久久免费| 日韩不卡一二三| 欧美日韩国产欧| 精品在线观看一区二区| jvid一区二区三区| 欧美俄罗斯性视频| 四虎影视在线观看2413| 欧美吞精做爰啪啪高潮| 顶臀精品视频www| av一区二区三区黑人| 九色91popny| 欧美精品日本| 欧美日韩日本网| 豆花视频一区| 欧洲成人免费视频| jizz性欧美| 亚洲片在线观看| 国产日韩在线观看一区| 欧美日韩美女视频| 午夜剧场免费在线观看| 久久综合色8888| 亚洲一级片免费观看| 另类亚洲自拍| www.日本三级| av资源久久| 国产在线精品一区二区三区》| 成人在线中文| 国产91精品不卡视频| 国产不卡在线| 亚洲精品综合精品自拍| 国产夫绿帽单男3p精品视频| 在线观看av一区二区| 国产无遮挡又黄又爽| 国产精品白丝在线| 午夜理伦三级做爰电影| 国产91精品精华液一区二区三区| 在线视频日韩一区| 夜夜嗨网站十八久久| 玖玖精品在线视频| 欧美一级本道电影免费专区| 国产一区免费在线| 欧美成人精品一级| 91精品久久久久久久久久入口| 美女的胸无遮挡在线观看| 免费91在线视频| av在线1区2区| 亚洲视频第一页| 亚州精品国产精品乱码不99按摩| 欧美一级二级三级蜜桃| 中文字幕资源网| 在线观看区一区二| 天天干,天天干| 午夜av电影一区| 香蕉视频一区二区| 一区二区三区资源| 国产精品久久久久久久精| 中文字幕日韩精品一区 | 自拍亚洲一区| 九九九久久久| 欧美wwwsss9999| 国产精品污www一区二区三区| 国产麻豆一区二区三区| 国产在线视频91| 婷婷精品久久久久久久久久不卡| 国产精品久久二区| 欧美成人精品一区二区男人小说| 欧美在线不卡区| 蜜臀久久精品| 欧美专区在线播放| 欧美1级2级| 国产精品都在这里| 四虎成人在线| 国产精品国产亚洲伊人久久| 性高爱久久久久久久久| 欧美综合第一页| 全亚洲第一av番号网站| 国产成人精品免高潮在线观看 | 色网站国产精品| 黄色片视频免费| 欧美性生交片4| 中文字幕在线播放不卡| 欧美肥胖老妇做爰| 国产高清在线免费| 亚洲成人性视频| 青青草在线免费视频| 亚洲区一区二区| 日本www在线观看| 久久久精品视频成人| 污片在线免费观看| 性色av一区二区咪爱| 中文字幕乱码中文乱码51精品| 国产成人av网| 日韩一级视频| 国产不卡一区二区三区在线观看| 国产一区在线电影| 日韩欧美视频一区二区| 婷婷综合在线| 国产精品无码人妻一区二区在线| 国产精品一卡| 色片在线免费观看| 国产大陆a不卡| 一本色道综合久久欧美日韩精品| 国产欧美日韩麻豆91| 性色av无码久久一区二区三区| 亚洲高清在线视频| 超碰在线97观看| 日韩视频一区在线观看| 日本a一级在线免费播放| 色一区av在线| 国语对白在线刺激| 国产精品中文字幕在线观看| 日韩精品一区国产| 久久久久一区二区三区| 99国内精品久久久久久久| 国产日韩亚洲欧美在线| 免费精品视频在线| 日韩女优在线视频| 国产精品三级电影| 日韩精品国产一区二区| 欧美日韩综合在线免费观看| 日韩一卡二卡在线| 色多多国产成人永久免费网站| www.8ⅹ8ⅹ羞羞漫画在线看| 91精品久久久久久久久青青| 青青操综合网| 水蜜桃在线免费观看| 视频一区欧美精品| 好吊操视频这里只有精品| 国产情人综合久久777777| 激情五月婷婷在线| 欧美日韩精品电影| 日色在线视频| 久久久噜久噜久久综合| 九七电影院97理论片久久tvb| 好吊色欧美一区二区三区视频| 亚洲精品网址| 奇米影音第四色| 26uuu久久天堂性欧美| 欧美成人国产精品高潮| 欧美日韩1区2区| 可以免费看污视频的网站在线| 欧美极品美女电影一区| 成人豆花视频| 香蕉久久夜色| 老牛国产精品一区的观看方式| av漫画在线观看| 一区二区视频免费在线观看| 国产精品久久久久久久久毛片 | 欧美精品丝袜久久久中文字幕| 日韩毛片在线一区二区毛片| 久久久久久国产精品| 日本精品视频| aaa免费在线观看| 麻豆国产精品一区二区三区| 久久av无码精品人妻系列试探| 精品magnet| 无码精品人妻一区二区三区影院| 欧美日本中文字幕| 日韩中文字幕一区二区高清99| 椎名由奈jux491在线播放| 奇米四色…亚洲| av手机在线播放| 欧美在线一区二区三区| 国产粉嫩一区二区三区在线观看| 91av免费观看91av精品在线| 国产精品videossex| 国产人妻777人伦精品hd| 成人性生交大片免费| 欧美成人一二三区| 精品伦理精品一区| 俄罗斯一级**毛片在线播放| 不卡视频一区二区| 精品999成人| 日本道中文字幕| 五月婷婷色综合| 日本成人一区| 国产精品久久久一区| 欧美成免费一区二区视频| 亚洲第一天堂久久| 亚洲精品老司机| 国产综合在线播放| 久久久久久午夜| 人体久久天天| 一区二区在线播放视频| 亚洲国产激情av| 国产福利第一视频| 久久久亚洲天堂| 亚洲成aⅴ人片久久青草影院| 国产又大又硬又粗| 日本一区二区三级电影在线观看| 一级黄色片在线播放| 美日韩在线视频| 国产精品美女在线观看直播| heyzo国产| 国产精品嫩草影院com| wwwav在线播放| **欧美日韩vr在线| 成人直播大秀| 亚洲少妇一区二区| 日韩欧亚中文在线| 欧美极品另类| 国产精品国产亚洲精品看不卡15| 乱人伦精品视频在线观看| 亚洲ⅴ国产v天堂a无码二区| 日韩一区二区在线观看视频 | seseavlu视频在线| 亚洲mm色国产网站| 亚洲精品乱码| 欧美乱大交做爰xxxⅹ小说| 欧美一级日韩免费不卡| 夜鲁夜鲁夜鲁视频在线播放| 午夜免费电影一区在线观看| 国产成人综合网站| 香蕉污视频在线观看| 欧美成人免费小视频| 女人丝袜激情亚洲| 国产美女视频免费看| 欧美视频中文在线看| 黄色网在线免费看| 久久久久久久久久久一区| 韩日欧美一区二区三区| 国产一级18片视频| 久久久精品在线观看| 国产精品一区2区3区|