尝鲜!我在华为鸿蒙上编写的第一个 Hello World!那些说鸿蒙是PPT的可以闭嘴了!...
作者:阿拉蕾aaa
来源:my.oschina.net/u/4518335/blog/4557426
最激动入门级选手的心的时刻来了,本示例将演示如何编写简单业务,输出“Hello World”。
修改源码
bugfix和新增业务两种情况,涉及源码修改。下面以新增业务举例,向开发者介绍如何进行源码修改。
1.确定目录结构。
开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
.
└── applications└── sample└── wifi-iot└── app│── my_first_app│ │── hello_world.c│ └── BUILD.gn└── BUILD.gn
2.编写业务代码。
在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
#include "ohos_init.h"
#include "ohos_types.h"void HelloWorld(void)
{printf("[DEMO] Hello world.\n");
}
SYS_RUN(HelloWorld);
3.编写用于将业务构建成静态库的BUILD.gn文件。
如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。以my_first_app为例,需要创建./applications/sample/wifi-iot/app/my_first_app/BUILD.gn,并完如下配置。
static_library("myapp") {sources = ["hello_world.c"]include_dirs = ["//utils/native/liteos/include"]
}
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字段配置如下。
import("//build/lite/config/component/lite_component.gni")lite_component("app") {features = ["my_first_app:myapp",]
}
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")。
调测验证
目前调试验证的方法有两种,分别为通过printf打印日志、通过asm文件定位panic问题,开发者可以根据具体业务情况选择。
由于本示例业务简单,采用printf打印日志的调试方式即可。下面开始介绍这两种调试手段的使用方法。
printf打印
代码中增加printf维测,信息会直接打印到串口上。开发者可在业务关键路径或业务异常位置增加日志打印,如下所示。
void HelloWorld(void)
{printf("[DEMO] Hello world.\n");
}
根据asm文件进行问题定位
系统异常退出时,会在串口上打印异常退出原因调用栈信息,如下文所示。通过解析异常栈信息可以定位异常位置。
=======KERNEL PANIC=======
**********************Call Stack*********************
Call Stack 0 -- 4860d8 addr:f784c
Call Stack 1 -- 47b2b2 addr:f788c
Call Stack 2 -- 3e562c addr:f789c
Call Stack 3 -- 4101de addr:f78ac
Call Stack 4 -- 3e5f32 addr:f78cc
Call Stack 5 -- 3f78c0 addr:f78ec
Call Stack 6 -- 3f5e24 addr:f78fc
********************Call Stack end*******************
为解析上述调用栈信息,需要使用到Hi3861_wifiiot_app.asm文件,该文件记录了代码中函数在Flash上的符号地址以及反汇编信息。asm文件会随版本大包一同构建输出,存放在./out/wifiiot/路径下。
1.将调用栈CallStack信息保存到txt文档中,以便于编辑。(可选)
2.打开asm文件,并搜索CallStack中的地址,列出对应的函数名 信息。通常只需找出前几个栈信息对应的函数,就可明确异常代码方向。
Call Stack 0 -- 4860d8 addr:f784c -- WadRecvCB
Call Stack 1 -- 47b2b2 addr:f788c -- wal_sdp_process_rx_data
Call Stack 2 -- 3e562c addr:f789c
Call Stack 3 -- 4101de addr:f78ac
Call Stack 4 -- 3e5f32 addr:f78cc
Call Stack 5 -- 3f78c0 addr:f78ec
Call Stack 6 -- 3f5e24 addr:f78fc
3.根据以上调用栈信息,可以定位WadRecvCB函数中出现了异常。4.完成代码排查及修改。
运行结果
示例代码编译、烧录、运行、调测后,会显示如下结果
ready to OS start
FileSystem mount ok.
wifi init success!
[DEMO] Hello world.
尝鲜!我在华为鸿蒙上编写的第一个 Hello World!那些说鸿蒙是PPT的可以闭嘴了!...相关推荐
- 鸿蒙系统开发者公测,公测尝鲜开启!华为Mate40/P40开始和安卓渐行渐远
目前华为官方发布公告,华为EMUI的微博等相关官方媒体账号全部更名为HarmonyOS,这也意味着HarmonyOS将会成为华为在软件系统层面的重心,彻底替代基于Android的华为EMUI. 至于那 ...
- iOS 16.1新功能尝鲜:如何在iPhone上启用实时活动?
近日,苹果发布了iOS 16.1正式版,在本次更新中,苹果推出了全新"实时活动"功能,用户能在iPhone锁定屏幕上查看到更多信息,如果是iPhone 14 Pro机型,实时活动信 ...
- Halium 9 尝鲜 -- 在小米平板4上的移植 (一)
废话 最近Apple出了一个基于arm的笔记本,arm的低功耗.高续航的特点的确香到我了,但是学生党太穷买不太起,只有一个安卓系统的小米平板4在吃灰.在UOS和菊花厂的推动下,好多国产软件都有了arm ...
- Halium 9 尝鲜 -- 在小米平板4上的移植 (四)
修改kernel 检查并修改内核选项 Halium提供了一个脚本检查defconfig的有些选项是否已经打开.找到内核项目里的defconfig,就可以开搞了. 脚本 ./check-kernelco ...
- Halium 9 尝鲜 -- 在小米平板4上的移植 (七)
嗯,好像距离上次研究Halium已经过了很久了.虽然一直没时间弄这个,但是没全部驱动心里一直不太服气,最近还是抽出时间来把它弄好了(好了,但没完全好).小米平板4终于有机会可以摆脱"大手机& ...
- Halium 9 尝鲜 -- 在小米平板4上的移植 (三)
修改device 由于不同的机型情况不一样这里只列举一些常见的修改,启动到rootfs应该是没什么问题的. 准备好一个可以用的git平台账号,fork目标机型的lineage os 16适配就可以开始 ...
- Halium 9 尝鲜 -- 在小米平板4上的移植 (六)
烧写 生成了三个需要的镜像后,需要用twrp把vendor.img和halium-boot.img分别烧写到vendor分区和boot分区(在烧写前建议格式化system vendor cache d ...
- Halium 9 尝鲜 -- 在小米平板4上的移植 (五)
编译 Halium 9 在完成上述修改后,终于可以开始编译了-- 写一个xml并同步你的适配包 在halium/devices/manifests目录下创建你的机型的xml 命名格式 (厂商)_(co ...
- Halium 9 尝鲜 -- 在小米平板4上的移植 (二)
配置环境 Halium 9 是基于lineage os 16修改而来,所以基本上对环境的要求与其一致,推荐使用内存8gb以上的台式机和梯子进行编译.Ubuntu 20.04亲测是可以通过的. 安装依赖 ...
最新文章
- mysql防注入pdo_mysql PDO和存储过程动态SQL注入
- 极客邦科技旗下TGO鲲鹏会成立美国硅谷分会
- js里的数据类型转换
- centos pip命令安装mysql_centos下pip安装mysql_python报错mysql_config not found
- 实现机器学习的循序渐进指南V——支持向量机
- 糖原代谢疾病行业调研报告 - 市场现状分析与发展前景预测
- 某考试T1 game
- 你需要知道的包管理器(Package Manager)
- php access 所有表,Oracle|sql server|access 数据库里的所有表名,字段名
- 杂谈之什么是FullGC
- 【ACF学习】ACF安装、训练及检测初探
- 在线html网页编辑器ckeditor的使用与配置
- 30天免费试用 ▎(IDM) 极速下载工具
- Sophos防火墙v18版本访问内部服务器或者电脑SNAT地址转换的问题解决办法
- 哪个版本的outlook好_未来版本的Outlook的阴影?
- linux中cat的一个用法(向文件里面添加内容)
- Real-Time Rendering Fourth Edition 学习笔记之 -- 第一章:介绍
- 激光SLAM理论与实践(一)--激光SLAM简要介绍
- Ubuntu中使用apt-get时无法搜索软件的解决方法
- [league/climate]一个功能健全的命令行功能操作库