0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

编写一个简单的Hello world程序

电子工程师 来源:HarmonyOS社区 作者:HarmonyOS社区 2020-11-11 09:56 次阅读

一、编写一个简单的Hello world程序

编写一个Hello world程序比较简单,可以参考官网:

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

本文在这里做下总结。

1.1、确定目录结构

开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件,例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:

1.2、编写业务代码

在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用 HarmonyOS启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)

1.3、编写用于将业务构建成静态库的BUILD.gn文件

如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。以my_first_app为例,需要建./applications/sample/wifi-iot/app/my_first_app/BUILD.gn,并完如下配置。

static_library中指定业务模块的编译结果,为静态库文件libmyapp.a,开发者根据实际情况完成填写。sources中指定静态库.a所依赖的.c文件及其路径,若路径中包含"//"则表示绝对路径(此处为代码根路径),若不包含"//"则表示相对路径。include_dirs中指定source所需要依赖的.h文件路径。

1.4、编写模块BUILD.gn文件,指定需参与构建的特性模块

配置./applications/sample/wifi-iot/app/BUILD.gn文件,在features字段中增加索引,使目标模块参与编译。features字段指定业务模块的路径和目标,以my_first_app举例,features字段配置如下。

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")。

二、Hi3861相关代码结构

目前hi3861用的是liteos-m内核,但是目前hi3681的liteos-m被芯片rom化了,固化在芯片内部了。所以在harmonyOS代码是找不到hi3861的内核部分。但是这样不妨碍我们去理清hi3861的其他代码结构。hi3861平台配置文件

buildliteplatformhi3861v100_liteos_riscvplatform.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之类的文件。其中最重要的是

vendorhisihi3861hi3861appwifiiot_appinitapp_io_init.c

vendorhisihi3861hi3861appwifiiot_appsrcapp_main.c

其中,app_io_init.c 是hi3681内核启动后的io口相关设置,用户需根据应用场景,合理选择各外设的IO复用配置。

app_main.c 是内核启动进入的应用程序入口。

三、Hi3861启动流程

由于hi3681的liteos-m被芯片rom化了,固化在芯片内部了。所以我们主要看内核启动后的第一个入口函数。

代码路径:

app_main一开始打印了 SDK版本号,最后一行会调用HOS_SystemInit(); 函数进行鸿蒙系统的初始化。我们进去看下初始化做了哪些动作。

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

我们可以看到主要是初始化了 一些相关模块、系统,包括有bsp、device(设备)。其中最终的是MODULE_INIT(run),它负责调用了所有run段的代码,那么run段的代码是哪些呢?事实上就是我们前面application中使用SYS_RUN() 宏设置的函数名。

还记得我们前面写的hello world应用程序吗?

也就是说所有用SYS_RUN() 宏设置的函数都会在使用MODULE_INIT(run);的时候被调用,为了验证这一点,我们可以加一些打印信息,如下:

我们重新编译后烧录。打开串口查看打印信息,如下:

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

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    114

    文章

    3630

    浏览量

    79497
  • 函数
    +关注

    关注

    3

    文章

    3859

    浏览量

    61297
  • 模块接口
    +关注

    关注

    0

    文章

    2

    浏览量

    5455

原文标题:只要三步!连老师带你初探Hi3861代码结构

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    修改蜂鸟E203 v2内核源码后,hello world报错是哪里出了问题?

    修改蜂鸟E203 v2内核源码后,测试“hello world程序,vivado仿真可以顺利通过,再输出界面打印出“hello world
    发表于 01-10 06:12

    DshanMCU-R128s2 Hello World!

    本文将介绍使用 R128 开发板从串口输出 Hello World 的方式介绍 SDK 软件开发流程。 载入方案 我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所以
    的头像 发表于 12-22 17:24 276次阅读
    DshanMCU-R128s2 <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>!

    AWTK 串口屏开发(1) - Hello World

    本文以一个简单的温度设置程序为例,介绍AWTK串口屏的开发流程和MVVM数据绑定的基本方法。功能这个例子很简单,制作一个调节温度的界面。在这里例子中,模型(也就是数据)里只有一个温度变量:变量名
    的头像 发表于 12-08 15:52 202次阅读
    AWTK 串口屏开发(1) - <b class='flag-5'>Hello</b> <b class='flag-5'>World</b>

    c语言hello world程序编写

    C语言"Hello world"程序编写过程,并提供一些实用技巧和注意事项。 首先,我们需要一个C语言开发环境来编写和运行代码。在这里,我
    的头像 发表于 11-26 09:23 1296次阅读

    我的第一个UVM代码——Hello world

    `uvm_component_utils有关 仿真命令: irun -sv -uvmhome \\\\ /.../ies/tools/methodology/UVM/CDNS-1.2/sv \\\\ hello_world.sv 仿真结果如下: 最后,再用张图来描述
    发表于 11-03 10:18

    RA-RTT体验RT-Thead超级简单hello world!

    在这篇帖子上,我们增加自己的代码,实现串口输出hello world等功能
    的头像 发表于 10-12 14:36 265次阅读
    RA-RTT体验RT-Thead超级<b class='flag-5'>简单</b>的<b class='flag-5'>hello</b> <b class='flag-5'>world</b>!

    使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建Hello World应用程序

    电子发烧友网站提供《使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建Hello World应用程序.pdf》资料免费下载
    发表于 09-20 14:52 1次下载
    使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>应用<b class='flag-5'>程序</b>

    使用MPLAB Harmony配置器(MHC)在SAM单片机上创建Hello World应用程序

    电子发烧友网站提供《使用MPLAB Harmony配置器(MHC)在SAM单片机上创建Hello World应用程序.pdf》资料免费下载
    发表于 09-20 10:58 1次下载
    使用MPLAB Harmony配置器(MHC)在SAM单片机上创建<b class='flag-5'>Hello</b> <b class='flag-5'>World</b>应用<b class='flag-5'>程序</b>

    创建简单Hello World Linux应用程序的过程

    本教程将向您介绍创建简单Hello World Linux应用程序的过程,然后将该应用
    发表于 08-28 06:32

    如何使用DS-5 1.0版调试Linux应用程序

    本教程将带领您完成创建简单Hello World Linux应用程序的过程,使用C Lin
    发表于 08-12 06:01

    如何使用ARM编译器构建Hello World

    在本教程中,我们将展示如何使用Arm构建名为hello_world.C的简单C程序DS-5中的编译器工具链。 您可以找到Arm编译器工具
    发表于 08-08 07:55

    如何使用Arm Compiler 6构建Hello World

    Virtual上调试站台 本Arm®DS-5 Development Studio教程介绍了基本的Hello World C程序。它将
    发表于 08-08 07:41

    【Milk-V Duo 开发板免费体验】duo第一程序hello world

    duo第一程序hello world 首先在VMware写hello world好代码 #include <stdio.h>
    发表于 07-20 10:08

    我的第一个UVM代码—Hello world

    你刚开始是怎么学UVM的?白皮书还是红皮书?而我是从hello world实验开始的。
    的头像 发表于 06-15 10:49 535次阅读
    我的第一个UVM代码—<b class='flag-5'>Hello</b> <b class='flag-5'>world</b>

    ello World控制台输入 - hello_world.c:50上的GETCHAR() 未收到输入值是怎么回事?

    我们开始使用LPC55S06-EVK,但遇到了SDK 的hello world 问题。设置:MCUXpresso v11.7.0SDK v2.13.0LPC55S06-EVK在职的:闪烁演示
    发表于 04-21 08:10