侵权投诉

编写一个简单的Hello world程序

2020-11-11 09:56 次阅读

一、编写一个简单的Helloworld程序

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

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编写的应用程序代码,例如我们刚刚写的helloworld代码就放在这个路径下。

子系统: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()宏设置的函数名。

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

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

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

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

责任编辑:lq

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

文章出处:【微信号:HarmonyOS_Community,微信公众号:HarmonyOS社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

C语言程序设计实用教程

在各章的讲解穿插典型实例进行说明。本书的写作以基本功能介绍(穿插实例)为主,每章最后以一个比较典型的....
发表于 02-26 16:17 19次 阅读
C语言程序设计实用教程

Linux内核进程调度schedule深入理解的详细资料说明

本文以 linux-2.4.10为例主要分析 Linux进程调度模块中的 schedule函数及其相....
发表于 02-26 16:17 13次 阅读
Linux内核进程调度schedule深入理解的详细资料说明

点阵式LED显示0到9的数字显示程序和仿真免费下载

本文档的主要内容详细介绍的是点阵式LED显示0到9的数字显示程序和仿真免费下载。
发表于 02-26 15:44 24次 阅读
点阵式LED显示0到9的数字显示程序和仿真免费下载

测温和万年历显示的程序免费下载

本文档的主要内容详细介绍的是测温和万年历显示的程序免费下载。
发表于 02-26 15:44 20次 阅读
测温和万年历显示的程序免费下载

频率计调试程序和仿真电路图免费下载

本文档的主要内容详细介绍的是频率计调试程序和仿真电路图免费下载
发表于 02-26 15:44 29次 阅读
频率计调试程序和仿真电路图免费下载

智能汽车机器人的程序免费下载

本文档的主要内容详细介绍的是智能汽车机器人的程序免费下载。
发表于 02-26 15:01 10次 阅读
智能汽车机器人的程序免费下载

Arduino的实验例程之串口中断的程序免费下载

本文档的主要内容详细介绍的是Arduino的实验例程之串口中断的程序免费下载。
发表于 02-25 17:39 15次 阅读
Arduino的实验例程之串口中断的程序免费下载

Arduino的实验例程之风扇转速调节程序免费下载

本文档的主要内容详细介绍的是Arduino的实验例程之风扇转速调节程序免费下载
发表于 02-25 17:39 12次 阅读
Arduino的实验例程之风扇转速调节程序免费下载

Arduino的实验例程之串口接收数据程序的资料免费下载

本文档的主要内容详细介绍的是Arduino的实验例程之串口接收数据程序的资料免费下载。
发表于 02-25 17:39 15次 阅读
Arduino的实验例程之串口接收数据程序的资料免费下载

Arduino的实验例程之虚拟鼠标实验

本文档的主要内容详细介绍的是Arduino的实验例程之虚拟鼠标实验。
发表于 02-25 16:37 19次 阅读
Arduino的实验例程之虚拟鼠标实验

IBM SPSS Statistics25中文简体手册合集

与 SPSS Statistics Standard Edition 或“高级统计”选项中提供的建模....
发表于 02-25 14:48 22次 阅读
IBM SPSS Statistics25中文简体手册合集

Logistic回归数学推导以及python实现

Logistic回归数学推导以及python实现
发表于 02-25 14:48 8次 阅读
Logistic回归数学推导以及python实现

python的常用函数有哪些

map() 是 Python 内置的高阶函数,它接收一个函数 f 和一个list ,并通过把函数 f....
发表于 02-25 11:52 11次 阅读
python的常用函数有哪些

人工神经网络有哪些基本特征

非线性非线性关系是自然界的普遍特性。大脑的智慧就是一种非线性现象。人工神经元处于激活或抑制二种不同的....
发表于 02-25 10:48 39次 阅读
人工神经网络有哪些基本特征

如何实现两块FPGA之间的通信总结

1、两块fpga 之间采用12 根线连接,包括8 根数据线, 2 根同步时钟线, 2 根使能信号线。
发表于 02-25 09:58 21次 阅读
如何实现两块FPGA之间的通信总结

Arduino和OLED及MAX30102心率腕表程序免费下载

arduino+oled+MAX30102心率腕表程序,OLED是用的是七引脚0.96寸的,写得一般....
发表于 02-25 08:00 14次 阅读
Arduino和OLED及MAX30102心率腕表程序免费下载

我们为什么需要回调函数?

不知你是不是也有这样的疑惑,我们为什么需要回调函数这个概念呢?直接调用函数不就可以了?回调函数到底有....
的头像 玩转单片机 发表于 02-23 15:29 79次 阅读
我们为什么需要回调函数?

三菱Q系列QD77MS2 PLC控制程序免费下载

本文档的主要内容详细介绍的是三菱Q系列QD77MS2控制程序免费下载。
发表于 02-23 08:00 45次 阅读
三菱Q系列QD77MS2 PLC控制程序免费下载

使用人工智能软件重现25年前去世的歌手的声音

这位艺术家出生在大邱,在该地区有许多致敬之作,包括雕像,电视台SBS负责故事的所有制作,并为了重现金....
的头像 倩倩 发表于 02-22 09:07 306次 阅读
使用人工智能软件重现25年前去世的歌手的声音

交流充电器的揽上板程序免费下载

本文档的主要内容详细介绍的是交流充电器的揽上板程序免费下载。
发表于 02-22 08:00 7次 阅读
交流充电器的揽上板程序免费下载

Android开发手册API函数详解资料免费下载

本文档的主要内容详细介绍的是Android开发手册API函数详解资料免费下载。
发表于 02-22 08:00 18次 阅读
Android开发手册API函数详解资料免费下载

C函数功能实现触摸屏与信捷PLC自由通讯的详细资料说明

本文档的主要内容详细介绍的是C函数功能实现触摸屏与信捷PLC自由通讯的详细资料说明。
发表于 02-22 08:00 41次 阅读
C函数功能实现触摸屏与信捷PLC自由通讯的详细资料说明

freemodbus教程之freemodbus移植应用串口中断接收和数据解析

div style=overflow-wrap: break-word; color: rgb(0,....
发表于 02-18 16:56 812次 阅读
freemodbus教程之freemodbus移植应用串口中断接收和数据解析

如何编写漂亮的PLC程序

对于PLC程序的编写,我认为无须天马行空的标新立异,也无须花枝招展的炫弄技巧。只要在内容和质量这两方....
发表于 02-12 11:44 281次 阅读
如何编写漂亮的PLC程序

PLC停止故障诊断

从操作者的聊天中了解到,这设备几个月没开机了,但是我在诊断里并没有发现NCU电池的报警,说明电池还是....
发表于 02-11 17:36 129次 阅读
PLC停止故障诊断

"可重入"和"线程安全"是两个概念 千万不要搞混了

  大伙估计在多任务程序中使用printf打印一些信息是非常欢乐的一件事,运气不错的话偶尔错几个数据....
的头像 嵌入式ARM 发表于 02-10 17:38 357次 阅读
"可重入"和"线程安全"是两个概念 千万不要搞混了

LabVIEW的程序实例详细资料说明

本文档的主要内容详细介绍的是LabVIEW的程序实例详细资料说明。
发表于 02-05 14:05 126次 阅读
LabVIEW的程序实例详细资料说明

Python的100个小例子详细资料说明

本文档的主要内容详细介绍的是Python的100个小例子详细资料说明。
发表于 02-05 14:05 54次 阅读
Python的100个小例子详细资料说明

关于GPS放射源旋转角度解释及源抽样测试的程序分享

GeneralParticleSource为通用粒子源,在Geant4可以通过宏文件来做复杂的放射源....
的头像 Geant4模拟学习交流 发表于 02-05 09:29 218次 阅读
关于GPS放射源旋转角度解释及源抽样测试的程序分享

使用GDB调试程序的详细资料概述

GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形....
发表于 02-05 08:00 34次 阅读
使用GDB调试程序的详细资料概述

typedef和#define的区别

关于自增自减(即++i,i++) typedef和#define的区别 static变量的三种用法 static函数 —— 内部函数和外部函数 ...
发表于 02-05 07:56 0次 阅读
typedef和#define的区别

Python5个内建高阶函数的使用

map函数的基本语法是map(func, seq),其含义指的是:对后面可迭代序列中的每个元素执行前....
的头像 数据分析与开发 发表于 02-04 16:06 232次 阅读
Python5个内建高阶函数的使用

使用单片机C语言实现消防车警报的实例程序和工程文件免费下载

本文档的主要内容详细介绍的是使用单片机C语言实现消防车警报的实例程序和工程文件免费下载。
发表于 02-02 10:48 44次 阅读
使用单片机C语言实现消防车警报的实例程序和工程文件免费下载

使用单片机C语言实现音乐播放的实例程序和工程文件免费下载

本文档的主要内容详细介绍的是使用单片机C语言实现音乐播放的实例程序和工程文件免费下载。
发表于 02-02 10:48 40次 阅读
使用单片机C语言实现音乐播放的实例程序和工程文件免费下载

一文详解codegen

codegen介绍
发表于 02-02 06:20 0次 阅读
一文详解codegen

MCU的基本功能及程序编写

MCU的基本功能 MCU程序的编写
发表于 02-02 06:05 0次 阅读
MCU的基本功能及程序编写

软件的PID程序资料合集免费下载

本文档的主要内容详细介绍的是软件的PID程序资料合集免费下载。
发表于 02-01 11:08 47次 阅读
软件的PID程序资料合集免费下载

如何使用python开发运维友好的程序

本文档的主要内容详细介绍的是如何使用python开发运维友好的程序。
发表于 02-01 11:08 29次 阅读
如何使用python开发运维友好的程序

人工神经网络的详细资料综述

人工神经网络( Artificial neural Networks,ANN)系统是20世纪40年代....
发表于 02-01 10:33 75次 阅读
人工神经网络的详细资料综述

C51单片机C语言程序设计解析的学习课件免费下载

C语言程序采用函数结构,每个C语言程序由一个或多个函数组成,在这些函数中至少应包含一个主函数main....
发表于 02-01 09:58 66次 阅读
C51单片机C语言程序设计解析的学习课件免费下载

使用内核三步实现InlineHook的详细分析

Inline hook.通俗的说就是对函数执行流程进行修改。达到控制函数过滤操作的目的。理论上我们可....
发表于 02-01 09:58 43次 阅读
使用内核三步实现InlineHook的详细分析

【HarmonyOS HiSpark IPC试用】开发Hi3518第一个示例程序Say Hello to HarmonyOS

发表于 01-30 23:27 101次 阅读
【HarmonyOS HiSpark IPC试用】开发Hi3518第一个示例程序Say Hello to HarmonyOS

调试时 观察窗口的变量不随程序变化?

就是说,我在调试时,我设置的变量在观察窗口一点变化也没有!...
发表于 01-30 00:01 101次 阅读
调试时  观察窗口的变量不随程序变化?

设计一个纹波穿透计数器的实验项目工程文件免费下载

本文档的主要内容详细介绍的是设计一个纹波穿透计数器的实验项目工程文件免费下载。
发表于 01-29 17:11 44次 阅读
设计一个纹波穿透计数器的实验项目工程文件免费下载

百架无人机“炸机”撞楼!只因程序写错、主机死机

无人机“炸机”坠毁的事儿并不罕见,但是如果几十上百架无人机同时“炸机”,那是何等景象?! 据网友曝料....
的头像 工程师邓生 发表于 01-27 10:03 1747次 阅读
百架无人机“炸机”撞楼!只因程序写错、主机死机

重庆无人机群表演时失控撞楼坠落

无人机“炸机”坠毁的事儿并不罕见,但是如果几十上百架无人机同时“炸机”,那是何等景象?!
的头像 如意 发表于 01-27 09:56 709次 阅读
重庆无人机群表演时失控撞楼坠落

Vivado中xilinx_courdic IP核(求exp指数函数)使用

由于Verilog/Vhdl没有计算exp指数函数的库函数,所以在开发过程中可利用cordic IP....
发表于 01-27 07:21 60次 阅读
Vivado中xilinx_courdic IP核(求exp指数函数)使用

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】小白写个入门程序——按键控制LED灯的亮灭(查询方式)

       以前只是简单的玩过51单片机,现在直接玩鸿蒙开发,处处碰壁、踩坑无数!根据官网教程搭好环境之后,...
发表于 01-26 13:17 303次 阅读
【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】小白写个入门程序——按键控制LED灯的亮灭(查询方式)

C51单片机的程序设计实例说明

本文档的主要内容详细介绍的是C51单片机的程序设计实例说明免费下载。虽然本章的例题很简单,但是只要做....
发表于 01-26 11:53 154次 阅读
C51单片机的程序设计实例说明

功能齐全的串口通讯程序

近一段时间学习有关通讯软件,找了好些串口通讯调试监测软件,这款无疑是我用过的最好的(含Modbus通讯协议),推荐给大家...
发表于 01-26 09:15 2627次 阅读
功能齐全的串口通讯程序

Audio Expert的使用说明书

一、软件主界面介绍 1、单步测试:程序会按照编辑好的序列从第一步跑到最后一步; 2、循环测试:程序会....
发表于 01-26 08:00 53次 阅读
Audio Expert的使用说明书

微软再次推出了一个面向所有用户的Autopilot Win10系统补丁

据悉,用户在论坛上报告说,此更新已发布到Win10的消费者版本,当用户检查更新时会立即显示此更新,即....
的头像 倩倩 发表于 01-23 10:50 693次 阅读
微软再次推出了一个面向所有用户的Autopilot Win10系统补丁

使用Labview播放视频的程序工程文件免费下载

本文档的主要内容详细介绍的是使用Labview播放视频的程序工程文件免费下载。
发表于 01-23 08:00 50次 阅读
使用Labview播放视频的程序工程文件免费下载

C++串口控件CportC6的程序和工程文件免费下载

本文档的主要内容详细介绍的是C++串口控件CportC6的程序和工程文件免费下载。
发表于 01-23 08:00 65次 阅读
C++串口控件CportC6的程序和工程文件免费下载

WGM12864-COG_21(控制芯片S6B0724)驱动程序分享

WGM12864-COG_21(控制芯片S6B0724)驱动程序
发表于 01-23 00:38 101次 阅读
WGM12864-COG_21(控制芯片S6B0724)驱动程序分享

Linux内核GPIO操作函数的详解分析

本文档的主要内容详细介绍的是Linux内核GPIO操作函数的详解分析免费下载。
发表于 01-22 16:58 60次 阅读
Linux内核GPIO操作函数的详解分析

神经网络的应用及发展的详细资料说明

该文介绍了神经网络的发展、优点及其应用现状和发展动向,对神经网络的一些常用算法进行简单的讲解, 着重....
发表于 01-22 16:35 138次 阅读
神经网络的应用及发展的详细资料说明

STM32自建工程文件免费下载

本文档的主要内容详细介绍的是根据官方文件设置的STM32工程模板免费下载。
发表于 01-22 08:00 35次 阅读
STM32自建工程文件免费下载

实物程序原理图+pcB(测试模块间的同步采集)

有会做的大神帮帮我
发表于 01-11 16:25 289次 阅读
实物程序原理图+pcB(测试模块间的同步采集)

wifiiot 变量或者函数定义但是未使用,编译报错,怎么解决

请问各位大佬, 编译时出现这样的错误应该怎么处理:error: variable 'gasSensorResistance' set but not used [-Werror=unu...
发表于 12-31 15:58 208次 阅读
wifiiot 变量或者函数定义但是未使用,编译报错,怎么解决