1. OpenHarmony Hi3861 

学习目标与任务

  • 硬件基础知识:涵盖嵌入式硬件体系架构(如 MCU 基础、硬件接口原理 )、硬件设计流程(原理图绘制、PCB Layout 规范 ),了解常见硬件外设(传感器、通信模块等)的工作逻辑与硬件适配要点。
  • 软件 + 硬件开发模式:学习嵌入式软件开发与硬件协同流程,包括硬件驱动开发(基于 Hi3861 芯片手册编写驱动代码 )、通过 SDK 实现软件对硬件资源(GPIO、定时器等)的调用,理解软硬件交互的信号流程与时序控制。
  • 软件到硬件开发逻辑:掌握从需求分析(功能定义)→ 软件架构设计(模块划分、任务调度 )→ 硬件驱动适配(寄存器操作、协议实现 )→ 联调测试(软硬件协同排障 )的完整链路,理解 “软件逻辑依赖硬件能力,硬件能力通过软件调用释放” 的核心逻辑。
  • 物联网 IOT 开发流程:基于 Hi3861 实践 “需求调研(场景定义 )→ 方案设计(硬件选型、通信协议确定 )→ 开发实现(硬件电路、软件程序 )→ 联调测试(功能、兼容性 )→ 部署上线(OTA 升级、远程管理 )” 全流程,重点学习物联网设备的组网(如 Wi-Fi 配网 )、数据上云(MQTT/CoAP 协议应用 )、边缘计算(轻量级数据处理 )等关键环节。

2. OpenHarmony 概述

基本定义与定位
  • HarmonyOS(鸿蒙系统 ):华为自主研发的商业闭源分布式操作系统,聚焦全场景智慧体验,通过 “硬件互助、资源共享”,实现手机、平板、智能穿戴、智慧屏等华为终端的无缝协同,为消费者与商业场景提供深度整合的操作系统能力。
  • OpenHarmony(开源鸿蒙 ):由开放原子开源基金会(OpenAtom Foundation )孵化、运营的开源分布式操作系统,面向全行业开放生态。以 “开源协同” 为核心,联合硬件厂商、开发者、行业伙伴,构建跨设备(IoT 终端、行业终端等 )的无缝协同体系,推动物联网时代的操作系统技术普惠与创新。
版本演进与关键特性
时间版本核心特性与支持设备
2020 年 9 月OpenHarmony 1.0聚焦 IoT 基础设备,支持 128KB - 128MB 内存 场景(如低功耗传感器、简易智能终端 ),奠定开源分布式框架雏形。
2021 年 6 月OpenHarmony 2.0全量开源 升级,扩展设备支持范围(覆盖更多行业终端、轻量级智能设备 ),强化分布式软总线能力,推动跨设备通信与协同开发生态初步构建。
2021 年 9 月OpenHarmony 3.0 LTS主打 “强分布式”,支持 标准系统设备(如智能座舱、工业平板 ),完善系统安全性(设备身份认证、数据加密 )与开发工具链,为行业应用开发提供更成熟的框架(ArkUI 界面开发、原子化服务基础能力 )。
2023 年OpenHarmony 4.0深化 AI 与分布式技术融合,强化端侧智能(设备本地 AI 推理、低功耗算力调度 ),优化分布式软总线的跨平台兼容性,推动 “设备协同智能化”(如多终端 AI 任务分工、协同推理 )。
2024 年OpenHarmony 5.1聚焦 AI 与机器人技术优化,加强对机器人操作系统(ROS )的适配,完善运动控制、环境感知等机器人专属能力,同时拓展 AI 在 IoT 场景的落地(如智能识别、自主决策 ),深化行业场景渗透。
OpenHarmony 与 HarmonyOS 体系对比
对比项OpenHarmony(开源鸿蒙)HarmonyOS(鸿蒙商业版)HarmonyOS NEXT(纯血鸿蒙)
性质开源项目,由开放原子基金会主导生态共建华为闭源商业系统,面向消费与商业市场华为闭源商业系统,聚焦 “纯血鸿蒙” 架构
技术底座微内核架构 + LiteOS/Linux 兼容(适配不同设备资源 )基于 OpenHarmony 开源基线 + AOSP(安卓兼容层 )基于 OpenHarmony 开源基线,剔除 AOSP,构建纯血微内核架构
应用生态生态分散,依赖厂商 / 开发者定制:
- 设备厂商需适配硬件、构建分发渠道;
- 应用需基于 OpenHarmony 开源 API 开发,适配多终端场景。
兼容安卓应用(通过 AOSP 层 )+ 鸿蒙原生应用,依托华为终端生态(手机、平板等 ),实现 “一次开发、多端部署”。仅支持 鸿蒙原生应用,强化系统纯净度与性能,聚焦高端旗舰设备的极致体验,推动生态向 “纯鸿蒙架构” 迁移。
典型设备IoT 终端(智能传感器、低功耗设备 )、行业终端(工业平板、智能座舱 )、边缘设备(轻量级网关 )等。华为手机、平板、智慧屏、智能穿戴等消费级终端,覆盖个人与家庭全场景。未来华为旗舰手机、高端平板等核心终端,聚焦极致性能、纯血架构体验,引领操作系统技术标杆。
补充说明
  • OpenHarmony 作为开源项目,是鸿蒙生态 “技术普惠” 的基础:通过开放代码、工具链,降低行业准入门槛,推动 IoT 设备、行业终端的智能化升级;
  • HarmonyOS 商业版则聚焦 “用户体验与商业价值”,依托华为终端生态,为消费者与企业客户提供深度整合的全场景服务;
  • HarmonyOS NEXT(纯血鸿蒙 )代表生态演进方向:剔除安卓代码依赖后,系统性能、安全性、协同效率将进一步突破,为高端设备与未来场景(如 AI 原生应用、元宇宙协同 )奠定技术底座。

3. OpenHarmony 开发环境

4. OpenHarmony 第一行代码

4.1 安装必要的开发软件

为开展 OpenHarmony(基于 Hi3861 等设备 )开发,需提前准备工具链,保障开发、调试、烧录全流程:

工具名称作用
CH340 USB 驱动实现 Windows 与 Hi3861 开发板的硬件连接,为串口通信、程序烧录提供基础
HiBurn.exe海思芯片专用烧录软件,将编译后的程序(如 .bin 文件 )烧录到开发板
UartAssist.exe串口调试工具,查看开发板运行日志、打印信息,辅助调试代码
VSCode SSH 远程链接通过 SSH 远程连接开发环境(如 Linux 服务器 ),在 VSCode 中编写、编译代码

4.2 项目结构规范

基础路径与目标

项目需在 OpenHarmony 代码仓库的指定路径创建:

/home/qf/Desktop/OpenHarmony/code-v3.0-LTS/OpenHarmony/applications/sample/wi-fi-iot/app  

在此路径下,按规则创建项目目录(如 demo01_thread ),并遵循目录命名要求

目录命名规则
  • 禁止:数字开头、中文 / 特殊符号(如 123_demo测试_dir 不合法 )
  • 要求:英文小写字母开头,可包含字母、数字、下划线(如 demo01_thread 合规 )
  • 唯一性:app 文件夹内项目名称必须唯一,避免编译冲突
项目结构示例(以 demo01_thread 为例 )

在 app 目录下创建 demo01_thread 后,完整结构(核心文件说明 ):

# 项目路径  
/home/qf/Desktop/OpenHarmony/code-v3.0-LTS/OpenHarmony/applications/sample/wi-fi-iot/app/  
└── BUILD.gn             # 在app目录下的,明确启动有哪些组件
|——demo01_thread/        # 项目目录(需符合命名规范)  ├── BUILD.gn         # 编译脚本:定义编译规则、依赖、输出产物  └── demo1.c          # 业务代码:编写功能逻辑(如线程创建、硬件控制 )  
关键文件作用
  • BUILD.gn:OpenHarmony 编译系统的配置文件,需声明:
    • 编译目标类型(如 static_library 静态库 )
    • 参与编译的源文件(如 demo1.c )
    • 头文件路径、依赖库等信息
    • 示例(简化版 ):
      static_library("demo01_thread") {  # 库名称需与目录名一致  sources = [ "demo1.c" ]       # 指定参与编译的代码文件  include_dirs = [              # 头文件搜索路径  "//utils/native/lite/include",  "//kernel/liteos_m/kal/cmsis"  ]  
      }  
      
  • demo1.c:存放具体业务代码(如线程创建、硬件初始化逻辑 ),是功能实现的核心文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 以下是需要导入的鸿蒙相关的头文件
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_timer.h"/*
【第二步,完成线程所需的任务函数】
当前函数满足 osThreadFunc_t typedef void (*osThreadFunc_t) (void *argument); 返回值类型为 void 类型,同时参数类型为 void * 类型。
*/
void thread_test(void *arg){int n = 10;while(n){/*osDelay OpenHarmony 提供的系统延时函数,单位是 10ms100 * 10ms ==> 1s*/osDelay(100);/*osThreadId_t osThreadGetId();返回当前真正运行的线程 ID 数据osThreadId_t ==> void **/printf("Thread is : %p,n = %d\n",osThreadGetId(),n);n -= 1;}
}/*
threadTestTask thread 测试任务当前函数要求无返回无参数,同时建议使用 static 修饰,有且只允许在当前文件中有效,可以调用。【threadTestTask】 用于注册线程任务到 OpenHarmony OS 中。*/
static void threadTestTask(void){/*【第一步,创建线程】*//*osThreadAttr_t OpenHarmony 提供的数据类型用于描述当前线程的相关属性重要内容1. 线程名称2. 线程占用栈区字节数3. 【线程优先级】【重点要求】  osThreadAttr_t 必须进行 memset 擦除*/osThreadAttr_t thread_attr;memset(&thread_attr,0,sizeof(osThreadAttr_t));thread_attr.name = "thread_test";thread_attr.stack_size = 1024;thread_attr.priority = osPriorityNormal;/*系统编程中的对应线程创建函数pthread_create(pthread_t &tid, attr, function, fun_arg);*//*osThreadId_t 当前 OpenHarmony 提供的数据类型,用于描述当前线程 ID真实类型为 void * 类型。【去指针化操作】typedef void *osThreadId_t;osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr);【osThreadFunc_t func】 线程任务函数 OpenHarmony 提供的数据类型typedef void (*osThreadFunc_t) (void *argument); 根据原码分析,当前任务函数要求参数为 void * 返回值为 void 【void *argument】 用于提供函数参数给当前线程任务函数【const osThreadAttr_t *attr】 用于初始化当前线程属性的结构体*/osThreadId_t thread_id = osThreadNew(thread_test,NULL,&thread_attr);if(NULL == thread_id){perror("[osThreadNew] create [thread_test] thread failed!\n");exit(1);}
}/*
【第三步,注册线程任务】
注册当前线程任务。
利用 OpenHarmony 提供的有参数宏,对当前任务线程函数 static void threadTestTask(void) 
进行系统注册,OpenHarmony APP 启动会将当前自定义组件/线程任务加入到程序中。#define APP_FEATURE_INIT(func) LAYER_INITCALL_DEF(func, app_feature, "app.feature")
*/
APP_FEATURE_INIT(threadTestTask);

项目组件 BUILD.gn 文件内容:(在app目录下的BUILD.gn)

import("//build/lite/config/component/lite_component.gni")lite_component("app") {features = ["demo01_thread",]
}

5. 编译操作

5.1 利用HiBurn 软件烧录程序到Hi3861中

        通过 hb 编译之后,对应的编译结果路径在 ~/Desktop/OpenHarmony/code-v3.0-
LTS/OpenHarmony/out/hispark_pegasus/wifiiot_hispark_pegasus ,在 Windows 中,需
要利用远程共享文件夹(知晓当前 Linux IP)方式,找到对应编译结果文件。

当前路径仅供参考:

\\192.168.25.129\qf\Desktop\OpenHarmony\code-v3.0-
LTS\OpenHarmony\out\hispark_pegasus\wifiiot_hispark_pegasus

选择编译生成的可执行文件:

烧录中:

打开串口调试助手:

https://github.com/0voice

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

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

相关文章

大模型提示词工程实践:大语言模型文本转换实践

大模型文本转换 学习目标 在本课程中&#xff0c;我们将探究如何使用大语言模型来完成文本转换任务&#xff0c;例如语言翻译、拼写和语法检查、语气调整以及格式转换。 相关知识点 大模型文本转换 学习内容 1. 大模型文本转换 文本转换的核心定义与范畴 文本转换 是指通过技术…

力扣LCR024:反转链表206.反转链表双解法(经典面试题)

LCR 024. 反转链表 - 力扣&#xff08;LeetCode&#xff09;LCR 024. 反转链表 - 给定单链表的头节点 head &#xff0c;请反转链表&#xff0c;并返回反转后的链表的头节点。 示例 1&#xff1a;[https://assets.leetcode.com/uploads/2021/02/19/rev1ex1.jpg]输入&#xff1a…

Day 6: CNN卷积神经网络 - 计算机视觉的核心引擎

Day 6: CNN卷积神经网络 - 计算机视觉的核心引擎 📚 核心概念(5分钟理解) 什么是CNN卷积神经网络? 核心概念解释: CNN(Convolutional Neural Network): 专门处理具有网格状拓扑结构数据的深度学习模型,特别擅长图像识别 为什么需要: 传统全连接神经网络处理图像时参数量…

MacBook 本地化部署 Dify 指南

Dify 安装前的准备工作 确认系统满足最低配置要求&#xff0c;包括操作系统版本、内存、CPU 和存储空间。 检查是否已安装必要的依赖项&#xff0c;如 Python、Docker 确保网络环境稳定&#xff0c;能够访问所需的软件源或镜像仓库。 获取 Dify 安装包 https://docs.dify.ai…

疫情可视化:基孔肯雅热风险地图实战解析

> 一只白纹伊蚊的飞行半径是100米,而一套WebGIS系统能将疫情防控范围精确到每平方米。 2025年夏季,基孔肯雅热疫情在广东佛山爆发,短短一个月内感染病例占全省95%以上。这种由伊蚊传播的病毒性疾病,以**突发高热、剧烈关节痛和全身皮疹**为特征,患者关节疼痛可能持续数…

【14-模型训练细节】

训练步骤 1、指定输入和输出&#xff0c;即模型定义&#xff1b; 2、指定损失函数和成本函数&#xff1b; 3、指定训练算法&#xff0c;如梯度下降算法&#xff1b;训练细节 损失函数和成本函数用梯度下降算法训练模型 主要是求成本函数的偏导数&#xff0c;使用的是反向传播算…

ConcurrentDictionary 详解:.NET 中的线程安全字典

什么是 ConcurrentDictionary&#xff1f; ConcurrentDictionary<TKey, TValue> 是 .NET Framework 4.0 和 .NET Core/.NET 5 中引入的线程安全字典实现&#xff0c;位于 System.Collections.Concurrent 命名空间。它解决了多线程环境下操作字典时的同步问题&#xff0c…

集成电路学习:什么是URDF Parser统一机器人描述格式解析器

URDF Parser(URDF解析器)是ROS(Robot Operating System,机器人操作系统)中用于解析URDF(Unified Robot Description Format,统一机器人描述格式)文件的工具。URDF是一种基于XML(Extensible Markup Language,可扩展标记语言)规范的格式,用于描述机器人的结构、关节、…

老式大头显示器(CRT)和当前最高分辨率的LED显示器对比

老式 CRT&#xff08;阴极射线管&#xff09;和当前最顶尖的 LED&#xff08;包括 MicroLED / 高端 MiniLED / OLED&#xff09;显示器在画面清晰度极限相关的参数并列分析。1. 分辨率与像素密度指标老式 CRT&#xff08;PC/电视用&#xff09;顶级 LED 显示器&#xff08;2025…

北京JAVA基础面试30天打卡07

1. 缓存三大问题及解决方案问题场景后果常用解决方案缓存穿透请求的数据在缓存和数据库中都不存在&#xff08;恶意攻击或查询异常 ID&#xff09;每次请求都会打到数据库&#xff0c;导致 DB 压力骤增- 缓存空值&#xff08;短期缓存不存在的 key&#xff09;- 布隆过滤器&…

后量子密码学的迁移与安全保障:迎接量子时代的挑战

在当今数字化时代&#xff0c;信息安全无疑是保障个人隐私、企业运营和国家安全的基石。我们依赖密码学来保护敏感信息&#xff0c;从在线银行交易到机密军事通信&#xff0c;从医疗记录的存储到云计算中的数据传输&#xff0c;传统密码学为我们构筑起一道抵御恶意攻击的防线。…

Android 获取 UserAgent (UA) 的三种方式深度解析:差异、风险与最佳实践

引言 在 Android 开发中&#xff0c;获取 UserAgent (UA) 字符串是常见需求&#xff0c;尤其涉及网络请求和 WebView 交互时。开发者通常使用三种方式获取 UA&#xff1a; new WebView(context).getSettings().getUserAgentString()WebSettings.getDefaultUserAgent(context)…

Apache IoTDB 全场景部署:跨「端-边-云」的时序数据库 DB+AI 实战

时序数据正成为现代工业物联网的核心资产,从设备传感器到业务分析,数据需跨越端、边、云多个层级。本文将深入探讨 **Apache IoTDB** 如何实现全场景统一时序数据管理,并融合AI能力实现智能决策。 --- ### 一、为什么需要「端-边-云」协同? 在工业物联网场景中: - **端侧…

某地渣库边坡自动化监测服务项目

1. 项目简介该矿山主要从事稀有金属钽、铌及合金等的研发、生产、销售和进出口业务。具有科学的管理理念、精良的工艺装备、先进的技术水平、高素质的员工队伍等综合优势&#xff0c;已形成钽、铌金属及其合金材料等主要产业格局。公司产品被广泛应用于电子、通讯、航空、航天、…

redis(2)-java客户端使用(IDEA基于springboot)

一、准备工作首先确保&#xff1a;Linux 服务器上已安装并启动 Redis 服务Redis 已配置允许远程连接&#xff08;修改 redis.conf 文件&#xff09;开发环境&#xff08;IDEA&#xff09;已准备好二、Spring Boot 项目配置 Redis1. 添加依赖在pom.xml中添加 Redis 相关依赖&…

解决 vscode 编辑 markdown 文件时退格键/backspace 删除卡顿问题

文章目录发现问题解决问题发现问题 使用 vscode 编辑 markdown 时&#xff0c;发现有时按下退格键 backspace 后等待很久才会生效&#xff0c;卡顿明显 解决问题 从界面左下角的设置图标&#xff0c;打开 vscode 的键盘快捷键设置页面 Keyboard Shortcuts 搜索 backspace 按…

绿巨人VS Code多开项目单独管理每个项目单独使用一个不限制的augment

绿巨人VS Code多开项目单独管理每个项目单独使用一个不限制的augment 绿巨人VS前言 在AI辅助编程时代&#xff0c;Augment Code作为一款强大的代码助手工具&#xff0c;为开发者提供了智能代码补全、代码生成等功能。然而&#xff0c;免费版本的使用限制&#xff08;通常为每月…

Java 之抽象类和接口

一 、抽象类 1.1 、什么是抽象类&#xff1f; 就是当一个类不能描述具体的对象时&#xff0c;那么这个类就可以写成抽象类。比如说 Animal &#xff0c;我们知道 Animal 不能非常清楚的描述一个具体的动物&#xff0c;所以可以把 Animal 写成抽象类。还有就是我们知道父类中的方…

【运维进阶】WEB 服务器

WEB 服务器 WEB 服务器简介 Web 服务器&#xff08;Web Server&#xff09;是指一种接收客户端&#xff08;如浏览器&#xff09;发送的 HTTP 请求&#xff0c;并返回网页内容或资源的程序或设备。它是万维网&#xff08;WWW&#xff09;的核心组成部分。 Web 服务器的主要功能…

LLM(大语言模型)的“幻觉”本质原因

LLM(大语言模型)的“幻觉”本质原因 LLM(大语言模型)的“幻觉”(生成与事实不符但模型自信输出的内容)本质上是其作为概率统计模型的底层机制与训练、推理过程中多重限制共同作用的结果。从模型内部逻辑、训练机制到推理环节 一、底层机制:基于“统计关联”而非“真实…