鸿蒙OpenHarmony【轻量系统 运行】 (基于Hi3861开发板)

 运行

联网配置

由于Hi3861为WLAN模组,您可以在版本编译及烧录后,通过如下操作,使开发板实现联网功能。

  1. 保持Windows工作台和Hi3861 WLAN模组的连接状态,确认串口终端显示正常。
  2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。

    图1 Hi3861 WLAN模组复位成功示意图  

    quickstart-pkg-3861-running-restart

  3. 依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。

    AT+STARTSTA                             # 启动STA模式
    AT+SCAN                                 # 扫描周边AP
    AT+SCANRESULT                           # 显示扫描结果
    AT+CONN="SSID",,2,"PASSWORD"            # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
    AT+STASTAT                              # 查看连接结果
    AT+DHCP=wlan0,1                         # 通过DHCP向AP请求wlan0的IP地址

  4. 查看Hi3861 WLAN模组与网关联通是否正常,如下图所示。

    AT+IFCFG                                # 查看模组接口IP
    AT+PING=X.X.X.X                         # 检查模组与网关的联通性,其中X.X.X.X需替换为实际的网关地址

    图2 Hi3861 WLAN模组联网成功示意图   

    quickstart-pkg-3861-running-success

调测验证

完成烧录及联网之后,用户可根据需要进行调试验证。目前调试验证的方法有以下两种,开发者可以根据具体业务情况选择。

  1. 通过printf打印日志
  2. 通过asm文件定位panic问题
  3. 鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

由于本示例业务简单,采用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***
 

搜狗高速浏览器截图20240326151344.png


为解析上述调用栈信息,需要使用到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函数中出现了异常。

    hi3861-test

  4. 完成代码排查及修改。

运行结果

示例代码编译、烧录、运行、调测后,重启开发板后将自动在界面输出如下结果:

ready to OS start
FileSystem mount ok.
wifi init success!
[DEMO] Hello world.

鸿蒙Next核心技术分享

1、鸿蒙基础知识←《鸿蒙NEXT星河版开发学习文档》

2、鸿蒙ArkUI←《鸿蒙NEXT星河版开发学习文档》

3、鸿蒙进阶技术←《鸿蒙NEXT星河版开发学习文档》

 4、鸿蒙就业高级技能←《鸿蒙NEXT星河版开发学习文档》 

 5、鸿蒙多媒体技术←《鸿蒙NEXT星河版开发学习文档》 

6、鸿蒙南向驱动开发←《鸿蒙NEXT星河版开发学习文档》  

7、鸿蒙南向内核设备开发←《鸿蒙NEXT星河版开发学习文档》  

 8、鸿蒙系统裁剪与移植←《鸿蒙NEXT星河版开发学习文档》  


http://www.ppmy.cn/devtools/26832.html

相关文章

linux安装docker

linux安装安装docker 1、linux安装docker1.1、官网安装文档1.2、下载docker安装包 2、安装docker 26.1.03、配置docker systemd服务 1、linux安装docker 1.1、官网安装文档 https://docs.docker.com/engine/install/binaries/ 1.2、下载docker安装包 官方下载链接&#xff…

jenkins教程

jenkins 一、简介二、下载安装三、配置jdk、maven和SSH四、部署微服务 一、简介 Jenkins是一个流行的开源自动化服务器,用于自动化软件开发过程中的构建、测试和部署任务。它提供了一个可扩展的插件生态系统,支持各种编程语言和工具。 Jenkins是一款开…

java-springmvc 01 补充 javaweb 三大组件Servlet,Filter、Listener(源码都是tomcat8.5项目中的)

01.JavaWeb三大组件指的是:Servlet、Filter、Listener,三者提供不同的功能 这三个在springmvc 运用很多 Servlet 01.Servlet接口: public interface Servlet {/*** 初始化方法* 实例化servlet之后,该方法仅调用一次 * init方法必须执行完…

selenium之document.querySelector()方法

document.querySelector()方法 1. 常用的三种获取元素的js方式 document.getElementById("");document.getElementsByClassName();document.getElementsByTagName(); var docdocument;var boxdoc.getElementById("box");var libox.getElementsByTagName(…

Oracle数据常驻程序内存优化【数据库实例优化系列三】

Oracle程序常驻程序内存优化【数据库实例优化系列二】-CSDN博客 在生产中,为提高用户的访问速度。可以将经常使用的表常驻与内存中。避免频繁的访问磁盘,降低IO。 虽然会占用一定的内存,但是效果还是很明显的。 如果不是用了,DBA可以将其删除。 一、数据缓冲池 数据库…

Kafka 2.13-3.7.0 在 Windows 上的安装与配置指南

在本文中,我将引导您完成在Windows操作系统上安装Apache Kafka 2.13-3.7.0的全过程,包括下载Scala运行环境、Kafka软件包、配置相关设置,并最终启动Kafka服务。此外,还会简要介绍如何使用客户端工具进行查看和管理。 Kafka的命名…

MAC M1电脑部署Grafana+Prometheus+Node_exporter

一、安装 1、grafana安装 brew install grafana 2、prometheus安装 brew install prometheus 3、node_exporter安装 brew install node_exporter 二、启动 1、grafana启动 brew services start grafana 2、prometheus启动 brew services start prometheus 3、node_exporter启动…

Scala 多版本下载指南

Scala,这一功能丰富的编程语言,结合了面向对象和函数式编程的精华,为开发者提供了强大的工具来构建高效、可扩展的应用程序。随着Scala社区的不断壮大和技术的演进,多个版本的Scala被广泛应用于不同的项目与场景中。本文旨在为您提…

什么ISP是住宅IP,和普通IP有什么区别?

ISP(Internet Service Provider)即互联网服务提供商,是向广大用户综合提供互联网接入业务、信息业务和增值业务的电信运营商。住宅IP,也称为家庭IP,是指由ISP分配给家庭或个人用户的IP地址。这些IP地址是真实的&#x…

远程仓库——GitHub

远程仓库——GitHub 一、在GitHub创建远程仓库二、在GitHub上添加密钥三、克隆远程仓库的代码到本地四、如何将本地仓库第一次同步到Github五、总结1.常用命令总结 注意:本文主要讲解的是,如何快速的将本地仓库的代码托管到GitHub上,如果不知…

物联网五层架构:每一层都扮演着不可或缺的角色——青创智通

物联网五层架构涵盖了感知层、网络层、数据层、应用层和业务层,每一层都扮演着不可或缺的角色,共同构成了物联网的完整生态系统。下面我们将详细探讨这五层架构的功能和特点。 首先,感知层是物联网的起点,负责获取和识别各种物理世…

手把手教数据结构与算法:优先级队列(银行排队问题)

队列 基本概念 队列的定义 队列(Queue):队列是一种常见的数据结构,遵循先进先出(First-In-First-Out, FIFO)的原则。在队列中,元素按照进入队列的顺序排列。队列是一个线性的数据结构&#x…

低功耗数字IC后端设计实现典型案例| UPF Flow如何避免工具乱用Always On Buffer?

下图所示为咱们社区低功耗四核A7 Top Hierarchical Flow后端训练营中的一个案例,设计中存在若干个Power Domain,其中Power Domain2(简称PD2)为default Top Domain,Power Domain1(简称PD1)为一个需要power off的domain&…

SpringBoot的旅游网站的设计与实现 - 源码免费(私信领取)

1. 研究目的 本项目旨在设计并实现一个基于Spring Boot的旅游网站,为用户提供便捷的旅游信息查询、预订服务,以及旅游资讯分享功能,提升用户旅游体验。 2. 研究要求 a. 需求分析 通过市场调研和用户需求分析,了解用户对旅游网…

C语言(操作符)1

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

vue3、element-plus递归实现动态菜单

vue3、element-plus递归实现动态菜单 使用场景:动态菜单为什么使用递归递归在动态菜单中的实现 使用场景:动态菜单 动态菜单是指菜单项的数量和层次结构可能是动态的,通常来自后端或用户输入。这些菜单的特征包括: 多层嵌套&…

Redis---------实现短信登录业务

目录 基于Session的短信登录 ①首先看他的业务逻辑 ②进行代码逻辑处理 基于Redis的短信登录 ①首先看他的业务逻辑 ②进行代码逻辑处理 Controller: Service接口: Service实例: Mapper: 封装ThreadLocal线程的数据操作&#x…

上传jar到github仓库,作为maven依赖存储库

记录上传maven依赖包到github仓库问题 利用GitHubPackages作为依赖的存储库踩坑1 仓库地址问题踩坑2 Personal access tokens正确姿势一、创建一个普通仓库,比如我这里是fork的腾讯Shadow到本地。地址是:https://github.com/dhs964057117/Shadow二、生成…

开源博客项目Blog .NET Core源码学习(19:App.Hosting项目结构分析-7)

本文学习并分析App.Hosting项目中后台管理页面的主页面。如下图所示,开源博客项目的后台主页面采用layui预设类layui-icon-shrink-right设置样式,点击主页面中的菜单,其它页面采用弹框或者子页面形式显示在主页面的内容区域。   后台主页面…

【八股】UML 2的基础结构和上层结构

UML(统一建模语言)是一种广泛使用的建模语言,用于软件工程中的系统设计。UML 2是UML的一个重要版本,它扩展了原有的功能,提供了更加丰富和灵活的建模能力。UML 2的结构可以分为两部分:基础结构(…