尝鲜!我在华为鸿蒙上编写的第一个 Hello World!

最激动入门级选手的心的时刻来了,本示例将演示如何编写简单业务,输出“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.

作者:阿拉蕾aaa

来源:my.oschina.net/u/4518335/blog/4557426

--END--▐往期推荐 
  • [灵魂拷问]MySQL面试高频问题(工程师方向)

  • JVM架构体系与GC命令小总结

  • MySQL 三种日志

  • 三种 MySQL 大表优化方案

  • MySQL的存储过程原来还可以这样玩?(还不收藏)

  • 架构篇:什么才是真正的架构设计?

  • 万字总结:学习MySQL优化原理,这一篇就够了!

  • 深度解析spring源码IOC原理

如果你觉得文章不错,文末的赞 ???? 又回来啦,记得给我「点赞」和「在看」哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39759.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC for code(text-to-codeAIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 1 Github Copilot 1.1 简介 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直…

全民ChatGPT热:快来解锁你的“全能网友”

前 言 2021年11月30日,OpenAI推出人工智能聊天原型ChatGPT,赚足了眼球,在AI界引发了类似AIGC让艺术家失业的大讨论。 据报道,ChatGPT在开放试用的短短几天,就吸引了超过 100 万互联网注册用户。并且社交网络流传出各种…

R语言Lasso回归模型变量选择和糖尿病发展预测模型

全文链接:http://tecdat.cn/?p22721 Lease Absolute Shrinkage and Selection Operator(LASSO)在给定的模型上执行正则化和变量选择(点击文末“阅读原文”获取完整代码数据)。 根据惩罚项的大小,LASSO将不…

分布滞后模型与自回归模型

分布滞后模型与自回归模型 第一节 滞后效应与滞后变量模型 一、经济活动中的滞后现象 一般说来,解释变量(自变量)对被解释变量(因变量)的影响不可能在短时间内完成,在这一过程通常存在时间滞后&#xff…

stata学习笔记|受限被解释变量

受限被解释变量类型 普通断尾随机变量——断尾回归:对于分析的样本解释变量有上限或者下限的要求零断尾计数数据——零断尾泊松回归和负二项回归:正整数偶然断尾(自选择问题)——样本选择模型:因为某些原因&#xff0…

回归模型的变量筛选与预测

我眼中的回归变量筛选 变量筛选是回归建模过程关键的一步,由于变量间的相关性,必然会导致不同的筛选方法得到不同的模型。 在所有变量筛选方法中,向前法、向后法以及逐步回归法的使用频率较高,因为这类方法操作简单、运算速度快&a…

回归模型中的哑变量

在构建回归模型时,如果自变量X为连续性变量,回归系数β可以解释为:在其他自变量不变的条件下,X每改变一个单位,所引起的因变量Y的平均变化量;如果自变量X为二分类变量,例如是否饮酒(…

简单线性回归模型

简单线性回归模型 研究经济变量之间相互数量关系最基本的方法之一是回归分析。在回归分析中,只有一个解释变量的线性回归模型是最简单的,称为简单线性回归模型或一元线性回归模型。本文主要从最简单的一元线性回归模型入手,讨论在基本假定满…

多元线性回归模型

多元线性回归模型 由于实际问题的复杂性,一个经济变量可能会同多个变量相联系。例如,消费者对某种商品的需求量不仅取决于该种商品价格的影响,而且可能受消费者的收入水平、其他代用商品的价格等因素的影响。因此,有必要将只要有…

快讯 | 机器人加班也会“猝死”,连续工作 20 小时倒地不起;马斯克暗示或起诉 OpenAI

一分钟速览新闻点 滴滴自动驾驶卡车 KargoBot 亮相上海车展 华为战略研究院院长周红:AI发展还面临三个重要挑战 路特斯发布全球首款量产“闪充机器人” 马斯克暗示或起诉 OpenAI 业内最新报告:ChatGPT 或会暴露企业机密信息 机器人加班也会“猝死”…

【科研资讯】嵌入织物的纤维泵和液体压电材料首现,全钙钛矿叠层太阳电池和高温超导电动悬浮取得新进展...

点击蓝字 关注我们 新的一天从研究资讯开始 DAILY NEWS 聚焦国内外 今日研究资讯 DAY BY DAY 2023年 4月6日 前言 在这里, 为你提供最新的科研资讯, 实验与热点你缺一不可! 1、首个嵌入织物的纤维泵制成 美国工程师设计了一种新型纳米颗粒&am…

国家数据局成立将带来大数据的五个发展趋势

大家好,我是独孤风。10年的时间我通过自学从港口工人转型成为了国企的大数据负责人。并注册大数据流动公众号,持续的进行文章创作,很高兴能在这里与大家相识~ 昨天的朋友圈相信大家都被这条振奋人心的消息刷屏了。 组建国家数据局&#xff01…

【技术简史】人类技术史:概念,本质,演化史,影响,未来挑战与发展前景

人类技术史:概念,本质,演化史,影响,未来挑战与发展前景 文章目录 人类技术史:概念,本质,演化史,影响,未来挑战与发展前景人类技术史:概念与本质人类技术史:演化史原始时期古代时期中世纪时期工业革命时期现代时期人类技术史:影响生产力水平社会结构生态环境人类技…

正向代理反向代理,清晰直观

大前提是什么?网络啊!局域网,公网啊! 表现是什么?请求 响应啊! 为什么代理?互通啊,隐藏啊 正向代理:代理客户端 多余的解释:你在局域网内(dddd&…

【网络】正向代理和反向代理

关于网络的基本知识: 为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC; 内网访问外网和外网访问内网的原理 代理 什么是代理?代理其实就相当于交易…

Traefik 一个反向代理的新工具

由于工作需要最近试用了几个反向路由的开源项目,Traefik就是其中之一。 一,Traefik 是干什么用的 简单来说它就是用来作反向代理和负载均衡的,比较适用于微服务化的场景,支持多种分布式的Key-Value存储系统,支持容器技…

Invalid block tag on line 16: 'endblock', expected 'endblock' or 'endblock topfiles'. Did you forget

Invalid block tag on line 16: ‘endblock’, expected ‘endblock’ or ‘endblock topfiles’. Did you forget to register or load this tag? 报错是因为代码没有注意空格问题。 改成缩进一格就行。

Your Bitbucket account has been locked. To unlock it and log in again you must solve a CAPTCHA.

Your Bitbucket account has been locked. To unlock it and log in again you must solve a CAPTCHA. 使用sourceTree拉取代码是出现这个错误,原因是账号对应的密码不对,需要修改window保存的账号名与密码 解决办法: 1,打开控…

启用或禁用更改块跟踪 (Changed Block Tracking, CBT)的两种方式

启用或禁用更改块跟踪 (Changed Block Tracking, CBT) 的两种方式 由于VMware提供了方便的数据块修改追踪(Changed Block Tracking,CBT)技术,为虚拟机增量备份提供了基础,除第一次备份必须完整备份与传输整个VM数据外&…

通过命令行关闭Bitlocker

cmd中输入以下命令关闭 manage-bde -off C: 但是有时候出现如下提示: 此时需要先执行如下命令:(系统分区不是C的话更改下面的盘符) manage-bde -autounlock -ClearAllKeys c: 然后再执行即可 manage-bde -off C: 提示解密进行…