![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenHarmony
文章平均质量分 93
愿天堂没有996
这个作者很懒,什么都没留下…
展开
-
鸿蒙轻内核M核源码分析系列十一 (2)信号量Semaphore
在文件定义的信号量控制块结构体为LosSemCB,结构体源代码如下。信号量状态.semStat取值,其他成员变量的注释见注释部分。/**< 信号量状态 *//**< 可用的信号量数量 *//**< 可用的信号量最大数量 *//**< 信号量Id *//**< 阻塞在该信号量的任务链表 */} LosSemCB;系统支持创建多少信号量是根据开发板情况使用宏定义的,每一个信号量semId是UINT32类型的,取值为,表示信号量池中各个的信号量的编号。原创 2024-07-22 22:13:58 · 614 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列十一(1) 信号量Semaphore
在文件定义的信号量控制块结构体为LosSemCB,结构体源代码如下。信号量状态.semStat取值,其他成员变量的注释见注释部分。/**< 信号量状态 *//**< 可用的信号量数量 *//**< 可用的信号量最大数量 *//**< 信号量Id *//**< 阻塞在该信号量的任务链表 */} LosSemCB;系统支持创建多少信号量是根据开发板情况使用宏定义的,每一个信号量semId是UINT32类型的,取值为,表示信号量池中各个的信号量的编号。原创 2024-07-22 21:24:23 · 425 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列十 软件定时器Swtmr
在文件定义的定时器控制块结构体为,结构体源代码如下。定时器状态.ucState取值或,定时器模式.mode取值或。其他结构体成员的解释见注释部分。/* 指向下一个定时器结构体的指针 *//* 定时器状态,取值枚举SwtmrState *//* 定时器模式,取值枚举enSwTmrType *//* 唤醒开关 *//* 对齐开关 */#endif/* 定时器编号Id *//* 定时器运行的次数 *//* 周期定时器超时间隔 (单位: tick) *//* 定时器超时回调函数参数 */原创 2024-07-22 20:54:46 · 508 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列九 互斥锁Mutex
在文件定义的互斥锁控制块结构体LosMuxCB,源代码如下,结构体成员的解释见注释部分。/**< 互斥锁状态:OS_MUX_UNUSED, OS_MUX_USED *//**< 锁被持有的次数 *//**< 互斥锁Id *//**< 互斥锁双向链表 *//**< 当前持有锁的任务 *//**< 当前持有锁的任务的优先级,为避免优先级翻转,可能会更改任务的优先级,此时有备份的作用 */} LosMuxCB;系统支持创建多少互斥锁是根据开发板情况使用宏定义的,互斥锁muxId是UINT32类型的,原创 2024-07-22 20:24:42 · 576 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列八 静态内存MemoryBox
静态内存结构体在文件中定义。源代码如下,⑴处定义的是静态内存节点结构体,⑵处定义的静态内存的结构体池信息结构体为,,结构体成员的解释见注释部分。/**< 静态内存池中空闲节点指针,指向下一个空闲节点 *//**< 静态内存池中空闲节点指针,指向下一个空闲节点 *//**< 静态内存池的内存块总数量 *//**< 静态内存池的已分配的内存块总数量 *//**< 指向下一个静态内存池 */#endif/**< 静态内存池的空闲内存块单向链表 */原创 2024-07-22 18:01:30 · 544 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory
动态内存的结构体有动态内存池信息结构体,动态内存池头结构体、动态内存节点头结构体,已使用内存节点结构体,空闲内存节点结构体。这些结构体定义在文件中,下文会结合上文的动态内存管理结构示意图对各个结构体的成员变量进行说明。如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。原创 2024-07-22 16:43:37 · 94 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列六 任务及任务调度(3)任务调度模块
调度,Schedule也称为Dispatch,是操作系统的一个重要模块,它负责选择系统要处理的下一个任务。调度模块需要协调处于就绪状态的任务对资源的竞争,按优先级策略从就绪队列中获取高优先级的任务,给予资源使用权。原创 2024-07-22 16:02:57 · 327 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列六 任务及任务调度(2)任务模块
在文件定义的任务控制块结构体LosTaskCB,源代码如下,结构体成员的解释见注释部分。/* 任务栈指针 *//* 任务状态 *//* 任务优先级 *//* 剩余的时间片 *//* 任务超时排序链表节点 *//* 任务栈大小 *//* 栈顶指针 *//* 任务编号Id *//* 任务入口函数 *//* 任务持有的信号量 *//* 导致任务阻塞的互斥锁 */UINT32 arg;/* 任务入口函数的参数 *//* 任务名称 *//* 就绪队列等链表节点 */原创 2024-07-22 15:09:05 · 433 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列六 任务及任务调度(1)任务栈
在文件中,定义的上下文的结构体如下,主要是浮点寄存器,通用寄存器。UINT32 S16;UINT32 S17;UINT32 S18;UINT32 S19;UINT32 S20;UINT32 S21;UINT32 S22;UINT32 S23;UINT32 S24;UINT32 S25;UINT32 S26;UINT32 S27;UINT32 S28;UINT32 S29;UINT32 S30;UINT32 S31;#endif。原创 2024-07-22 14:06:17 · 439 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列五 时间管理
在鸿蒙轻内核源码分析上一篇文章中,我们剖析了中断的源码,简单提到了Tick中断。本文会继续分析Tick和时间相关的源码,给读者介绍鸿蒙轻内核的时间管理模块。本文中所涉及的源码,以OpenHarmony LiteOS-M内核为例原创 2024-07-22 13:38:30 · 445 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列四 中断Hwi
中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。当外设需要CPU时,将通过产生中断信号使CPU立即中断当前任务来响应中断请求。在剖析中断源代码之前,下面介绍些中断相关的硬件、中断相关的概念。与中断相关的硬件可以划分为三类:设备、中断控制器、CPU本身。设备发起中断的源,当设备需要请求CPU时,产生一个中断信号,该信号连接至中断控制器。中断控制器中断控制器是CPU众多外设中的一个,它一方面接收其它外设中断引脚的输入。另一方面,它会发出中断信号给CPU。原创 2024-07-21 22:20:48 · 464 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表
在头文件中定义了排序链表属性的结构体。该结构体定义了排序链表的头节点,游标,还有一个保留字段,暂时没有使用。在文件中定义了排序链表属性结构体类型的全局变量,该全局变量的成员变量sortLink作为排序链表的头结点,指向一个长度为32的环状的双向链表数组,成员变量cursor作为游标记录环状数组的当前游标位置。源代码如下。我们使用示意图来讲述一下。任务排序链表是环状双向链表数组,长度为32,每一个元素是一个双向链表,挂载任务LosTaskCB的链表节点timerList。任务LosTaskCB。原创 2024-07-21 21:50:24 · 515 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS
会分2部分来介绍结构体部分,先介绍LittleFS文件系统的结构体,然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。原创 2024-07-21 21:19:37 · 492 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列二 数据结构-任务就绪队列
在文件中定义了和任务就绪队列相关的主要变量。其中⑴表示任务就绪队列,是一个双向链表数组,后文初始化该数组时会将数组长度设置为⑷处定义的;⑵表示优先级位图,标识了任务就绪队列中已挂载的就绪任务所在的优先级;⑶表示优先级为0的比特位;⑷表示任务就绪队列支持的优先级个数32,所以鸿蒙轻内核优先级的取值范围为0-31,数值越小优先级越大。优先级位图的bit位和优先级的关系为,优先级数组包含了个数组元素,每个数组元素都是一个双向链表,同一优先级的处于就绪状态的所有任务都会挂载到对应优先级的双向链表中。原创 2024-07-21 20:46:12 · 591 阅读 · 0 评论 -
鸿蒙轻内核M核源码分析系列一 数据结构-双向循环链表
在学习OpenHarmony鸿蒙轻内核源代码的时候,常常会遇到一些数据结构的使用。如果没有掌握它们的用法,会导致阅读源代码时很费解、很吃力。本文会给读者介绍源码中重要的数据结构,双向循环链表Doubly Linked List。原创 2024-07-21 19:54:05 · 644 阅读 · 0 评论 -
OpenHarmony 实战开发之NAPI框架介绍
NAPI是JavaScript与C++交互的桥梁。在OpenHarmony中,Javascript代码在运行时由ArkUI的JS引擎解释执行,C++代码则通过NAPI接口访问JS引擎中的Javascript上下文,从而实现与JS变量、方法之间的相互调用。原创 2024-07-20 22:25:52 · 591 阅读 · 0 评论 -
OpenAtom OpenHarmony三方库创建
创建OpenHarmony三方库,支持通过DevEco Studio(以下简称IDE)界面创建和OHPM命令行创建两种方式。在应用工程中,新创建Module,选择"Static Library"模板,创建完成后,完善oh-package.json5的信息,其中名称、版本等信息根据实际情况填写。OHPM命令行创建,可通过三方中心仓指导文档操作,链接地址:https://ohpm.openharmony.cn/#/cn/help/createfile。原创 2024-07-20 22:19:09 · 578 阅读 · 0 评论 -
【开源三方库】Easyui:基于OpenAtom OpenHarmony ArkUI深度定制的组件框架
Easyui是一套基于ArkTS语言开发的轻量、可靠的移动端组件库,它是对OpenAtom OpenHarmony(以下简称“OpenHarmony”) ArkUI进行深度定制的组件框架。Easyui可扩展性较强,可以基于源码进行二次开发,修改原有组件以及新增部分组件,以满足具体项目的开发需求。该框架适用大部分OpenHarmony应用的开发 ,能够更加完善OpenHarmony 的应用开发能力,使我们的应用开发更简单。通过本篇文章介绍,您对easyui组件框架应该有了初步的了解。原创 2024-07-20 20:53:13 · 825 阅读 · 0 评论 -
OpenHarmony 状态变量更改通知:@Watch 装饰器
Watch 用于监听状态变量的变化,当状态变量变化时,@Watch 的回调方法将被调用。@Watch 在 ArkUI 框架内部判断数值有无更新使用的是严格相等(===),遵循严格相等规范。当在严格相等为 false 的情况下,就会触发 @Watch 的回调。以下示例展示组件更新和 @Watch 的处理步骤。count 在 CountModifier 中由 @State 装饰,在 TotalView 中由 @Prop 装饰。原创 2024-07-20 20:04:42 · 738 阅读 · 0 评论 -
OpenHarmony设备环境查询:Environment
开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询。原创 2024-07-19 22:16:25 · 763 阅读 · 0 评论 -
OpenHarmony持久化存储UI状态:PersistentStorage
PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。PersistentStorage和AppStorage中的属性建立双向同步。原创 2024-07-19 21:32:07 · 599 阅读 · 0 评论 -
OpenHarmony应用全局的UI状态存储:AppStorage
AppStorage是在应用启动的时候会被创建的单例。它的目的是为了提供应用状态数据的中心存储,这些状态数据在应用级别都是可访问的。AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。AppStorage中的属性可以被双向同步,数据可以是存在于本地或远程设备上,并具有不同的功能,比如数据持久化(详见 PersistentStorage )。原创 2024-07-19 20:31:15 · 664 阅读 · 0 评论 -
OpenHarmony页面级UI状态存储:LocalStorage
LocalStorage是ArkTS为构建页面级别状态变量提供存储的内存内“数据库”。● 应用程序可以创建多个LocalStorage实例,LocalStorage实例可以在页面内共享,也可以通过GetShared接口,获取在UIAbility里创建的GetShared,实现跨页面、UIAbility内共享。● 组件树的根节点,即被@Entry装饰的@Component,可以被分配一个LocalStorage实例,此组件的所有子组件实例将自动获得对该LocalStorage实例的访问权限。原创 2024-07-19 16:59:28 · 813 阅读 · 0 评论 -
【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库
Fuse.js是一款功能强大且轻量级的JavaScript模糊搜索库,支持OpenAtom OpenHarmony(以下简称“OpenHarmony”)操作系统,它具备模糊搜索和排序等功能。该库高性能、易于使用、高度可配置,支持多种数据类型和多语言搜索,适用于各种场景,如搜索引擎、电子商务网站和数据可视化,可以帮助用户在包含大量数据的环境中快速地找到相关的搜索结果,并支持高度可定制化的搜索选项。通过本篇文章介绍,您对OpenHarmony Fuse.js组件应该有了初步的了解。原创 2024-07-19 15:34:43 · 886 阅读 · 0 评论 -
OpenHarmony嵌套类对象属性变化:@Observed装饰器和@ObjectLink装饰器
ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步:● 被@Observed装饰的类,可以被观察到属性的变化;● 子组件中@ObjectLink装饰器装饰的状态变量用于接收@Observed装饰的类的实例,和父组件中对应的状态变量建立双向数据绑定。这个实例可以是数组中的被@Observed装饰的项,或者是class object中的属性,这个属性同样也需要被@Observed装饰。原创 2024-07-19 14:55:35 · 222 阅读 · 0 评论 -
OpenHarmony后代组件双向同步,跨层级传递:@Provide装饰器和@Consume装饰器
Provide/@Consume装饰的状态变量有以下特性:● @Provide装饰的状态变量自动对其所有后代组件可用,即该变量被“provide”给他的后代组件。由此可见,@Provide的方便之处在于,开发者不需要多次在组件之间传递变量。● 后代通过使用@Consume去获取@Provide提供的变量,建立在@Provide和@Consume之间的双向数据同步,与@State/@Link不同的是,前者可以在多层级的父子组件之间传递。原创 2024-07-19 14:27:27 · 783 阅读 · 0 评论 -
OpenHarmony AI框架开发指南
AI 业务子系统是 OpenHarmony 提供原生的分布式 AI 能力的子系统。AI 业务子系统提供了统一的 AI 引擎框架,实现算法能力快速插件化集成。原创 2024-07-19 14:04:41 · 943 阅读 · 0 评论 -
OpenHarmony系统能力SystemCapability
SysCap,全称SystemCapability,即系统能力,指操作系统中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是系统能力之一。每个系统能力对应多个API,随着目标设备是否支持该系统能力共同存在或消失,也会随着DevEco Studio一起提供给开发者做联想。开发者可以在SysCap列表中查询OpenHarmony的能力集。如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。原创 2024-07-18 22:26:33 · 809 阅读 · 0 评论 -
OpenHarmony—应用间HSP开发指南
应用间HSP用于不同应用间的代码、资源共享。 应用间HSP的宿主应用是一种特殊状态的应用,只能由一个HSP组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用。当普通应用运行时,通过动态调用的方式使用应用间HSP提供的能力,从而实现应用自身所需要的功能。原创 2024-07-18 21:59:42 · 705 阅读 · 0 评论 -
【开源三方库】crypto-js加密算法库的使用方法
OpenAtom OpenHarmony(简称“OpenHarmony”)三方库,是经过验证可在OpenHarmony系统上可重复使用的软件组件,可帮助开发者快速开发OpenHarmony应用。如果是发布到开源社区,称为开源三方库,开发者可以通过访问开源社区获取。接下来我们来了解crypto-js开源三方库。crypto-js是一个加密算法类库,可以非常方便地在前端进行其所支持的加解密操作。目前crypto-js已支持的算法有:MD5、SHA-1、SHA-256、HMAC、HMAC-MD5、HMAC-SHA原创 2024-07-18 21:31:36 · 887 阅读 · 0 评论 -
OpenHarmony应用开发之自定义弹窗
)这个CustomDialogController就代表弹窗,UpdateDialog()是弹窗的具体实现,customStyle为ture就表示弹窗样式可以自定义。如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。原创 2024-07-18 21:03:13 · 878 阅读 · 0 评论 -
OpenHarmony使用ArkUI Inspector分析布局
应用将布局渲染到屏幕上的流畅度影响用户对质量的感知。建议移除多余的嵌套层次减少视图嵌套层次。视图的嵌套层次会影响应用的性能。因此推荐开发者移除多余的嵌套层次,缩短组件刷新耗时。如果视图嵌套得很深,会导致花费更多的时间来处理,会增加页面渲染时间。在屏幕刷新率为120Hz的设备上,每8.3ms刷新一帧,如果视图的嵌套层次多,可能会导致没法在8.3ms内完成一次屏幕刷新,就会造成丢帧卡顿,影响用户体验。嵌套视图会创建更多的节点,会增加内存消耗。原创 2024-07-18 20:35:34 · 766 阅读 · 0 评论 -
OpenHarmony应用ArkUI 状态管理开发案例
在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染,在ArkUI中统称为状态管理机制。原创 2024-07-18 17:03:19 · 535 阅读 · 0 评论 -
开源图形驱动在OpenHarmony上的使用和落地
图形驱动也是一种软件程序,它串联了操作系统和应用程序与计算机图形硬件进行通信和交互,是发挥硬件性能为操作系统提供高质量图形显示的关键环节。OpenHarmony在开源图形驱动的使用和落地上做了哪些工作呢?原创 2024-07-17 22:52:47 · 1009 阅读 · 0 评论 -
OpenHarmony设备截屏的5种方式
● 方式1:系统控制中心● 方式2:OHScrcpy投屏工具 推荐● 方式3:DevEcoStudio截屏功能● 方式4:hdc shell snapshot_display● 方式5:hdc shell wukong● 持续关注原创 2024-07-17 21:49:26 · 314 阅读 · 0 评论 -
OpenHarmony组件复用示例展示
本文介绍了开发OpenHarmony应用时如何使用组件复用能力,提供代码示例,期望帮助关注组件复用的开发者朋友们。搭建开发环境Windows 开发环境的搭建Ubuntu 开发环境搭建Linux 与 Windows 之间的文件共享……构建子系统启动流程子系统分布式任务调度子系统分布式通信子系统驱动子系统……如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。原创 2024-07-17 21:04:48 · 863 阅读 · 0 评论 -
OpenHarmony 分布式硬件关键技术
从智能终端的发展趋势来看,单一智能智能终端硬件已经越来越难以满足用户对全场景的要求,面临发展瓶颈:由于体积的限制,无法把所有场景所涉及的硬件全部加入到一个设备中,且单一设备也无法满足所有场景的需求。基于这个现实痛点,多智能终端“组合”而成的“超级终端”应运而生。超级终端可以根据用户期望,通过分布式技术将多个设备组合起来,使设备间的硬件资源共享,实现硬件的“自由”扩展,并可以在不同的业务场景下,按需组合硬件资源,提供更好的用户体验。例如,通过手机、平板、手表、大屏幕、电脑等智能终端的组合,可以实现多屏幕串联、原创 2024-07-17 20:33:58 · 604 阅读 · 0 评论 -
OpenHarmony应用实现二维码扫码识别
二维码的应用场景非常广泛,在购物应用中,消费者可以直接扫描商品二维码,浏览并购买产品,如图是购物应用的扫描二维码的页面。本文就以 橘子购物示例应用 为例,来讲解OpenHarmony应用二维码开发相关的技术点。我们先看下二维码相关的几个概念。● 二维码生成OpenHarmony应用框架提供了 QRCode组件 ,用于显示单个二维码的组件。该组件只能用于显示二维码,无法显示条码与解析码内容。● 二维码解析。原创 2024-07-17 18:05:01 · 755 阅读 · 0 评论 -
OpenHarmony面向万物智联的应用框架的思考与探索
应用框架,是操作系统连接开发者生态,实现用户体验的关键基础设施。业务的飞速发展促进了应用框架不断演进和变化。原创 2024-07-17 16:23:29 · 481 阅读 · 0 评论 -
【开源三方库】Aki:一行代码极简体验JS&C++跨语言交互
OpenAtom OpenHarmony(以下简称“OpenHarmony”)的前端开发语言是ArkTS,在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是JavaScript(简称JS)的超集。而Node-API(简称NAPI)是方舟引擎用于封装JS能力为Native插件的API,是前端JS与Native C/C++的FFI(Foreign Function Interface 跨语言交互接口)。原创 2024-07-17 15:46:51 · 660 阅读 · 0 评论