0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

編寫一個簡單的Hello world程序

電子工程師 ? 來源:HarmonyOS社區(qū) ? 作者:HarmonyOS社區(qū) ? 2020-11-11 09:56 ? 次閱讀

一、編寫一個簡單的Hello world程序

編寫一個Hello world程序比較簡單,可以參考官網(wǎng):

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

本文在這里做下總結(jié)。

1.1、確定目錄結(jié)構(gòu)

開發(fā)者編寫業(yè)務(wù)時,務(wù)必先在./applications/sample/wifi-iot/app路徑下新建一個目錄(或一套目錄結(jié)構(gòu)),用于存放業(yè)務(wù)源碼文件,例如:在app下新增業(yè)務(wù)my_first_app,其中hello_world.c為業(yè)務(wù)代碼,BUILD.gn為編譯腳本,具體規(guī)劃目錄結(jié)構(gòu)如下:

1.2、編寫業(yè)務(wù)代碼

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

1.3、編寫用于將業(yè)務(wù)構(gòu)建成靜態(tài)庫的BUILD.gn文件

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

static_library中指定業(yè)務(wù)模塊的編譯結(jié)果,為靜態(tài)庫文件libmyapp.a,開發(fā)者根據(jù)實際情況完成填寫。sources中指定靜態(tài)庫.a所依賴的.c文件及其路徑,若路徑中包含"http://"則表示絕對路徑(此處為代碼根路徑),若不包含"http://"則表示相對路徑。include_dirs中指定source所需要依賴的.h文件路徑。

1.4、編寫模塊BUILD.gn文件,指定需參與構(gòu)建的特性模塊

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

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

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

二、Hi3861相關(guān)代碼結(jié)構(gòu)

目前hi3861用的是liteos-m內(nèi)核,但是目前hi3681的liteos-m被芯片rom化了,固化在芯片內(nèi)部了。所以在harmonyOS代碼是找不到hi3861的內(nèi)核部分。但是這樣不妨礙我們?nèi)ダ砬録i3861的其他代碼結(jié)構(gòu)。hi3861平臺配置文件

buildliteplatformhi3861v100_liteos_riscvplatform.json

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

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

子系統(tǒng):applications

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

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

子系統(tǒng):iot_hardware

路徑:base/iot_hardware/frameworks/wifiiot_lite

作用:存放了 hi3681 芯片相關(guān)的驅(qū)動、例如spi、gpio、uart等。

子系統(tǒng):vendor

路徑:vendor/hisi/hi3861/hi3861

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

vendorhisihi3861hi3861appwifiiot_appinitapp_io_init.c

vendorhisihi3861hi3861appwifiiot_appsrcapp_main.c

其中,app_io_init.c 是hi3681內(nèi)核啟動后的io口相關(guān)設(shè)置,用戶需根據(jù)應(yīng)用場景,合理選擇各外設(shè)的IO復(fù)用配置。

app_main.c 是內(nèi)核啟動進(jìn)入的應(yīng)用程序入口。

三、Hi3861啟動流程

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

代碼路徑:

app_main一開始打印了 SDK版本號,最后一行會調(diào)用HOS_SystemInit(); 函數(shù)進(jìn)行鴻蒙系統(tǒng)的初始化。我們進(jìn)去看下初始化做了哪些動作。

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

我們可以看到主要是初始化了 一些相關(guān)模塊、系統(tǒng),包括有bsp、device(設(shè)備)。其中最終的是MODULE_INIT(run),它負(fù)責(zé)調(diào)用了所有run段的代碼,那么run段的代碼是哪些呢?事實上就是我們前面application中使用SYS_RUN() 宏設(shè)置的函數(shù)名。

還記得我們前面寫的hello world應(yīng)用程序嗎?

也就是說所有用SYS_RUN() 宏設(shè)置的函數(shù)都會在使用MODULE_INIT(run);的時候被調(diào)用,為了驗證這一點,我們可以加一些打印信息,如下:

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

可以看到在35行之后,就打印 Hello world的信息。符合預(yù)期。

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 程序
    +關(guān)注

    關(guān)注

    115

    文章

    3749

    瀏覽量

    80678
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4262

    瀏覽量

    62243
  • 模塊接口
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    5473

原文標(biāo)題:只要三步!連老師帶你初探Hi3861代碼結(jié)構(gòu)

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙OpenHarmony【輕量系統(tǒng) 編寫Hello World程序】 (基于Hi3861開發(fā)板)

    下方將通過修改源碼的方式展示如何編寫簡單程序,輸出“Hello world”。請在下載的源碼目錄中進(jìn)行下述操作。
    的頭像 發(fā)表于 05-16 18:15 ?898次閱讀
    鴻蒙OpenHarmony【輕量系統(tǒng) <b class='flag-5'>編寫</b>“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”<b class='flag-5'>程序</b>】 (基于Hi3861開發(fā)板)

    鴻蒙OpenHarmony【小型系統(tǒng) 編寫Hello World程序】 (基于Hi3516開發(fā)板)

    展示如何在單板上運行第一個應(yīng)用程序,其中包括新建應(yīng)用程序、編譯、燒寫、運行等步驟,最終輸出“Hello World!”。
    的頭像 發(fā)表于 05-10 16:26 ?628次閱讀
    鴻蒙OpenHarmony【小型系統(tǒng) <b class='flag-5'>編寫</b>“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”<b class='flag-5'>程序</b>】 (基于Hi3516開發(fā)板)

    鴻蒙OpenHarmony【標(biāo)準(zhǔn)系統(tǒng) 編寫Hello World程序】(基于RK3568開發(fā)板)

    下方將展示如何在單板上運行第一個應(yīng)用程序,其中包括新建應(yīng)用程序、編譯、燒寫、運行等步驟,最終輸出“Hello World!”。
    的頭像 發(fā)表于 05-09 17:58 ?785次閱讀
    鴻蒙OpenHarmony【標(biāo)準(zhǔn)系統(tǒng) <b class='flag-5'>編寫</b>“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”<b class='flag-5'>程序</b>】(基于RK3568開發(fā)板)

    鴻蒙OpenHarmony【標(biāo)準(zhǔn)系統(tǒng)編寫Hello World程序】 (基于RK3568開發(fā)板)

    編寫Hello World程序 下方將展示如何在單板上運行第一個應(yīng)用程序,其中包括新建應(yīng)用
    的頭像 發(fā)表于 04-24 17:32 ?651次閱讀
    鴻蒙OpenHarmony【標(biāo)準(zhǔn)系統(tǒng)<b class='flag-5'>編寫</b>“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”<b class='flag-5'>程序</b>】 (基于RK3568開發(fā)板)

    鴻蒙OpenHarmony【小型系統(tǒng)編寫Hello World程序】 (基于Hi3516開發(fā)板)

    下方將展示如何在單板上運行第一個應(yīng)用程序,其中包括新建應(yīng)用程序、編譯、燒寫、運行等步驟,最終輸出“Hello World!”。
    的頭像 發(fā)表于 04-22 21:55 ?301次閱讀
    鴻蒙OpenHarmony【小型系統(tǒng)<b class='flag-5'>編寫</b>“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”<b class='flag-5'>程序</b>】 (基于Hi3516開發(fā)板)

    鴻蒙OpenHarmony【輕量系統(tǒng)編寫Hello World程序】 (基于Hi3861開發(fā)板)

    下方將通過修改源碼的方式展示如何編寫簡單程序,輸出“Hello world”。請在下載的源碼目錄中進(jìn)行下述操作。
    的頭像 發(fā)表于 04-21 21:44 ?252次閱讀
    鴻蒙OpenHarmony【輕量系統(tǒng)<b class='flag-5'>編寫</b>“<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>”<b class='flag-5'>程序</b>】 (基于Hi3861開發(fā)板)

    用于EK-RA8D1 MIPI LCD顯示器的GUIX Hello World

    電子發(fā)燒友網(wǎng)站提供《用于EK-RA8D1 MIPI LCD顯示器的GUIX Hello World.pdf》資料免費下載
    發(fā)表于 02-20 09:48 ?0次下載
    用于EK-RA8D1 MIPI LCD顯示器的GUIX <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>

    如何將HC-SR04連接到Arduino并編寫簡單程序來測量距離

    種流行的Arduino超聲波傳感器是HC-SR04。它廣泛用于非接觸式距離測量,通常用于機(jī)器人和自動化項目。本指南將向您展示如何將HC-SR04連接到Arduino并編寫
    的頭像 發(fā)表于 02-11 10:17 ?2025次閱讀
    如何將HC-SR04連接到Arduino并<b class='flag-5'>編寫</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的<b class='flag-5'>程序</b>來測量距離

    修改蜂鳥E203 v2內(nèi)核源碼后,hello world報錯是哪里出了問題?

    修改蜂鳥E203 v2內(nèi)核源碼后,測試“hello world程序,vivado仿真可以順利通過,再輸出界面打印出“hello world
    發(fā)表于 01-10 06:12

    AWTK 串口屏開發(fā)(1) - Hello World

    本文以簡單的溫度設(shè)置程序為例,介紹AWTK串口屏的開發(fā)流程和MVVM數(shù)據(jù)綁定的基本方法。功能這個例子很簡單,制作
    的頭像 發(fā)表于 12-08 15:52 ?450次閱讀
    AWTK 串口屏開發(fā)(1) - <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>

    vim編寫程序后怎么運行

    當(dāng)你用 Vim 編寫程序后,你需要執(zhí)行系列步驟來運行程序。下面是詳盡的說明: 保存文件:
    的頭像 發(fā)表于 11-28 15:27 ?3039次閱讀

    codeblocks怎么編寫程序

    ::Blocks編寫程序的過程,以使您對其操作有更深入的了解。 首先,我們需要下載并安裝Code::Blocks。您可以在官方網(wǎng)站https://www.codeblocks.org/上找到適用于您的操作系統(tǒng)的安裝程序。安裝過程相對簡單
    的頭像 發(fā)表于 11-26 10:28 ?1287次閱讀

    怎樣在codeblocks上編寫程序

    在CodeBlocks上編寫程序項相對簡單而又重要的任務(wù)。CodeBlocks是廣泛使用的集成開發(fā)環(huán)境(IDE),它能夠幫助
    的頭像 發(fā)表于 11-26 09:26 ?1366次閱讀

    c語言hello world程序編寫

    語言"Hello world"程序編寫過程,并提供些實用技巧和注意事項。 首先,我們需要
    的頭像 發(fā)表于 11-26 09:23 ?2126次閱讀

    我的第一個UVM代碼——Hello world

    `uvm_component_utils有關(guān) 仿真命令: irun -sv -uvmhome \\\\ /.../ies/tools/methodology/UVM/CDNS-1.2/sv \\\\ hello_world.sv 仿真結(jié)果如下: 最后,再用張圖來描述
    發(fā)表于 11-03 10:18