CN112685188A - 一种基于全局字节数组的嵌入式内存管理方法及装置 - Google Patents

一种基于全局字节数组的嵌入式内存管理方法及装置 Download PDF

Info

Publication number
CN112685188A
CN112685188A CN202110302248.3A CN202110302248A CN112685188A CN 112685188 A CN112685188 A CN 112685188A CN 202110302248 A CN202110302248 A CN 202110302248A CN 112685188 A CN112685188 A CN 112685188A
Authority
CN
China
Prior art keywords
memory
pool
blocks
memory pool
management
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110302248.3A
Other languages
English (en)
Inventor
任文龙
刘嵩义
温奎
罗勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Jiuzhou Electric Group Co Ltd
Original Assignee
Sichuan Jiuzhou Electric Group Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Jiuzhou Electric Group Co Ltd filed Critical Sichuan Jiuzhou Electric Group Co Ltd
Priority to CN202110302248.3A priority Critical patent/CN112685188A/zh
Publication of CN112685188A publication Critical patent/CN112685188A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于全局字节数组的嵌入式内存管理方法及装置,本发明的装置包括一个内存池和一个内存管理器;所述内存池是通过在嵌入式***中定义一个全局字节数组创建,所述内存池划分为多个固定大小的内存块;所述内存管理器包括内存池使用状态和一个单向链表,所述内存池使用状态用于指示内存块的使用情况,所述单向链表用于挂接内存池中空闲的内存块;所述内存管理器用于对外提供动态内存管理。本发明在全局字节数组的基础上实现高效可靠的内存管理,支持复杂数据结构在嵌入式软件设计中的使用。

Description

一种基于全局字节数组的嵌入式内存管理方法及装置
技术领域
本发明属于嵌入式技术和物联网技术领域,具体涉及一种基于全局字节数组的嵌入式内存管理方法及装置。
背景技术
随着智能技术和物联网技术的快速发展,各种设备互联互通,嵌入式设备开始承担越来越多的功能,需要集成的模块越来越多,嵌入式软件开发的规模和复杂度也越来越高。为了应对软件功能的高复杂度,目前嵌入式软件都是基于嵌入式操作***(如FreeRTOS、DSP BIOS等)进行开发以实现各种并发功能,于是嵌入式操作***的内存管理成为了嵌入式软件开发中的一个重要方面,内存管理的实时性和稳定性对嵌入式软件的性能影响至关重要。
嵌入式***内存管理机制一般有静态分配和动态分配两种,静态分配在软件编译阶段将可执行程序所需的内存空间分配好,例如软件中的全局变量即是此种分配方法,此种方法缺点是不够灵活,不能动态支持内存申请与释放;动态分配一般是采用堆内存管理,嵌入式***在初始化时要分配好***堆的内存空间,该机制的管脚是要处理好内存碎片和内存回收,在内存频繁动态变化的场景下其性能对程序是一个潜在风险点。另外软件工程师在使用动态分配时容易遗忘内存释放造成内存泄露,该问题难以发现,是软件设计中一个痛点,故此在实际的嵌入式软件设计中都要求采用全局变量以避免内存泄露问题。
嵌入式软件一般是面向专业领域,应用场景具有专一性,故而在制定需求的时候都会对各项功能规划好技术指标,进而选用合适的硬件以减少成本,由此内存的总体使用量是可以进行预先估算的,内存动态分配的使用场景是少量且可控的。因此现有在嵌入式***的软件开发中大量使用基于全局变量的静态分配法,极力避免动态内存申请释放时引发内存不足或泄漏或潜在的性能问题,从而提高软件的可靠性,由此造成的后果是难以在软件设计中使用复杂的数据结构(如链表和哈希表),软件设计实现的复杂度和冗余度较高,可读性较差。
发明内容
为了解决现有基于全局变量的静态分配法存在复杂度和冗余度较高等技术问题,本发明提供了解决上述问题的一种基于全局字节数组的嵌入式内存管理装置,用于避开嵌入式操作***的内存动态管理器,在全局字节数组的基础上实现高效可靠的内存管理,支持复杂数据结构在嵌入式软件设计中的使用。
本发明通过下述技术方案实现:
一种基于全局字节数组的嵌入式内存管理装置,包括一个内存池和一个内存管理器;
所述内存池是通过在嵌入式***中定义一个全局字节数组创建,所述内存池划分为多个固定大小的内存块;
所述内存管理器包括内存池使用状态和一个单向链表,所述内存池使用状态用于指示内存块的使用情况,所述单向链表用于挂接内存池中空闲的内存块;
所述内存管理器用于对外提供动态内存管理。
优选的,本发明的内存池使用状态包括但不限于内存池首地址、内存池的大小、每个内存块的大小、内存块的总数量、内存块的使用数量和内存块的空闲数量。
优选的,本发明的单向链表是通过定义数组创建,数组大小和内存池中内存块总数量相同;所述单向链表的结点包括内存块的首地址或内存块相对于内存池首地址的偏移量。
另一方面,本发明还提出了基于本发明上述提出的一种基于全局字节数组的嵌入式内存管理装置的方法,包括以下步骤:
初始化所述内存管理器;
基于初始化后的内存管理器对外提供动态内存管理。
优选的,本发明的初始化过程包括:
根据内存池的大小和每个内存块的大小计算出内存池使用状态;
对全部内存块清零并挂接到所述单向链表中。
优选的,本发明的基于初始化后的内存管理器对外提供动态内存管理步骤包括但不限于内存动态申请管理、内存动态释放管理和重置接口;
具体的,本发明的内存动态申请管理过程包括:
根据当前内存池使用状态判断当前是否有空闲内存块,若有则返回单向链表第一个结点,将所述单向链表表头指向下一个结点并更新内存池使用状态;若无则直接返回空值。
具体的,本发明的内存动态释放管理过程包括:
将需要释放的内存块内存空间全部置零;
将置零后的内存块***所述单向链表的第一个结点位置;
更新内存池使用状态。
具体的,本发明的重置接口过程包括:
在内存池大小和内存块大小保持不变的情况下,进行初始化过程。
本发明具有如下的优点和有益效果:
与现有技术相比,本发明提供的一种基于全局字节数组的嵌入式内存管理装置采用全局字节数组作为内存池,支持固定尺寸内存块的动态申请与释放,其算法复杂度为O(1),具有极高的实时性和可靠性,从而有效支撑了复杂数据结构在嵌入式软件设计中的应用,简化了嵌入式软件的实现逻辑,降低了软件的复杂度,提高了软件的可靠性。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1为本发明定义的全局字节数组结构示意图。
图2为本发明的方法流程示意图。
图3为本发明的初始化状态示意图。
图4为本发明的计算机设备结构示意图。
图5为本发明的内存动态申请过程示意图。
图6为本发明的内存动态申请后状态示意图。
图7为本发明的内存动态释放过程示意图。
图8为本发明的内存动态释放后状态示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例1
相较于现有的基于全局变量的静态分配法存在难以在软件设计中使用复杂的数据结构,例如链表和哈希表,且软件设计实现的复杂度和冗余度较高,可读性较差等问题,本实施例提供了一种基于全局字节数组的嵌入式内存管理装置,该装置在全局字节数组的基础上实现高效可靠的内存管理,支持复杂数据结构在嵌入式软件设计中的使用。
本实施例的装置包括一个内存池和一个内存管理器;
内存池是通过在嵌入式***中定义一个全局字节数组创建,内存池划分为多个固定大小的内存块;
内存管理器包括内存池使用状态和一个单向链表,内存池使用状态用于指示内存块的使用情况,单向链表用于挂接内存池中空闲的内存块;
内存管理器用于对外提供动态内存管理。
本实施例定义的全局字节数组和单向链表结构如图1所示,本实施例构建了一个大小为M×N 的全局字节数组作为一个内存池,其中,N为内存块的大小,M为内存块的最大数量,则该内存池被划分为M个内存块B1、B2…BM,本实施例创建的单向链表包括M个单链表结点数组,其中,M和N的取值通常取决于具体应用需求。
本实施例的内存池使用状态包括但不限于内存池首地址、内存池的大小、每个内存块的大小、内存块的总数量、内存块的使用数量和内存块的空闲数量。
本实施例的单向链表是通过定义数组创建,数组大小和内存池中内存块总数量相同,单向链表的结点包括但不限于内存块的首地址或内存块相对于内存池首地址的偏移量。
本实施例基于上述构建的嵌入式内存管理装置实现嵌入式内存管理的方法,具体如图2所示,本实施例的方法包括以下步骤:
步骤一、初始化内存管理器;
步骤二、基于初始化的内存管理器对外提供动态内存管理。
本实施例的内存管理器的初始化过程是以内存池的大小和每个内存块的大小计算出全部使用状态,对全部内存块清零并将清零后的内存块挂接到单向链表中。
具体如图3所示的初始化状态图,本实施例的初始化过程主要包括以下步骤:
步骤1,将定义的 M×N的全局字节数组作为内存池全部清零;
步骤2,将定义的单链表结点数组依次挂载形成单向链表,并将每个结点指向每个内存块的首地址。即单向链表的结点和内存块之间一一映射,第1个结点指向第1个内存块,第2个结点指向第2个内存块,以此类推,第M个结点指向第M个内存块(即如图所示的Elm1-B1,Elm2-B2,Elm3-B3…ElmM-BM)。
本实施例基于内存管理器实现的动态内存管理包括内存动态申请、内存动态释放和接口重置等过程。
本实施例的内存动态申请管理过程包括:
根据当前内存池使用状态判断当前是否有空闲内存块,若有则返回单向链表第一个结点,将所述单向链表表头指向下一个结点并更新内存池使用状态;若无则直接返回空值。
本实施例的内存动态释放管理过程包括:
将需要释放的内存块内存空间全部置零;将置零后的内存块***所述单向链表的第一个结点位置;更新内存池使用状态。
本实施例的重置接口过程包括:
在内存池大小和内存块大小保持不变的情况下,其余过程进行初始化过程。
以链接法哈希表为例对本实施例提出的方法进行说明:
在雷达相关的设备平台中,雷达往往将发现的目标发送至其他嵌入式设备进行二次加工和处理,雷达发送探测目标的数量包通常是大小相同且内容固定的,数据更新频率大概在几十毫秒的量级,每个探测目标由批号唯一标识。在二次处理阶段往往采用数组方式对所有探测目标进行遍历,每个目标的批号和数组下标一一对应,由此探测目标的批号必须要限定在一个较小的范围内,此种方法灵活性差且性能低下,尤其在雷达探测能力强但目标实际数量较小的情况下每次数组遍历都要做很多无用功,如雷达最大探测目标为1000个,每个目标的数据内容为100字节,那么批号范围一般设定在1~1024,使用大小为1024数组进行目标存储和处理,在实际目标为10个的时候每次遍历1024次会造成极大的计算资源浪费。在此场景下,一个更好的方法是采用哈希表建立批号到数据的映射关系解决上述问题,在实际应用中哈希表通常采用链接法,需要高效的动态内存管理支持,而在嵌入式设备中往往难以满足,一方面是内存动态申请与释放的性能无法评估,由此也造成可移植性差,另一方面是潜在的内存泄露风险,采用本实施例提供的方法可有效解决上述问题,通过直接申请1024×100的全局字节数组作为内存池,提供固定大小为100字节的内存块动态申请与释放,以此为基础构建哈希表,进而依据实际的目标数量进行遍历及二次处理,避免了内存的耗尽,使用单向链表支持了复杂度为O(1)的内存申请和释放操作,在功能需求和内存分配上做到了较好的平衡。
本实施例还提出了一种计算机设备,用于执行本实施例的上述方法。
具体如图4所示,计算机设备包括处理器、存储器和***总线;存储器和处理器在内的各种设备组件连接到***总线上。处理器是一个用来通过计算机***中基本的算术和逻辑运算来执行计算机程序指令的硬件。存储器是一个用于临时或永久性存储计算程序或数据(例如,程序状态信息)的物理设备。***总线可以为以下几种类型的总线结构中的任意一种,包括存储器总线或存储控制器、外设总线和局部总线。处理器和存储器可以通过***总线进行数据通信。其中存储器包括只读存储器(ROM)或闪存(图中未示出),以及随机存取存储器(RAM),RAM通常是指加载了操作***和计算机程序的主存储器。
计算机设备一般包括一个存储设备。存储设备可以从多种计算机可读介质中选择,计算机可读介质是指可以通过计算机设备访问的任何可利用的介质,包括移动的和固定的两种介质。例如,计算机可读介质包括但不限于,闪速存储器(微型SD卡),CD-ROM,数字通用光盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁存储设备,或者可用于存储所需信息并可由计算机设备访问的任何其它介质。
计算机设备可在网络环境中与一个或者多个网络终端进行逻辑连接。网络终端可以是个人电脑、服务器、路由器、智能电话、平板电脑或者其它公共网络节点。计算机设备通过网络接口(局域网LAN接口)与网络终端相连接。局域网(LAN)是指在有限区域内,例如家庭、学校、计算机实验室、或者使用网络媒体的办公楼,互联组成的计算机网络。WiFi和双绞线布线以太网是最常用的构建局域网的两种技术。
应当指出的是,其它包括比计算机设备更多或更少的子***的计算机***也能适用于发明。
如上面详细描述的,适用于本实施例的计算机设备能执行基于全局字节数组的嵌入式内存管理装置的方法的指定操作。计算机设备通过处理器运行在计算机可读介质中的软件指令的形式来执行这些操作。这些软件指令可以从存储设备或者通过局域网接口从另一设备读入到存储器中。存储在存储器中的软件指令使得处理器执行上述的群成员信息的处理方法。此外,通过硬件电路或者硬件电路结合软件指令也能同样实现本发明。因此,实现本实施例并不限于任何特定硬件电路和软件的组合。
实施例2
本实施例基于上述实施例1提供的管理方法进行内存动态申请管理,具体如图5所示,本实施例的内存动态申请管理过程具体包括:
步骤S11,根据内存池使用状态的内存块空闲数量判断是否存在空闲内存块,若空闲数量大于零则有可用内存空间,执行步骤S12,若空闲数量等于零则无可用内存空间,直接返回空值。
步骤S12,暂存单向链表第一结点的首地址,并将单向链表表头指向下一个结点。
步骤S13,更新内存池使用状态:将内存池使用状态的空闲数量减一,使用数量加一;
步骤S14,将暂存的单向链表第一结点的首地址返回。
具体如图6所示的2次内存动态申请后的状态示意图(其中,填充有斜线的块表示表示为申请后的内存块,填充有方格的块表示为被使用的内存块),本实施例第1次内存申请返回的是第1个结点指向的第一个内存块首地址,第2次申请返回的是第2个结点指向的第二内存块首地址,每次申请均是直接返回单向链表表头head指向的结点,时间复杂度为常数。
实施例3
本实施例基于上述实施例1提供的管理方法进行内存动态释放管理,具体如图7所示,本实施例的内存动态释放管理过程具体包括:
步骤S21,将需要释放的内存块内存空间全部置零,便于下次直接使用;
步骤S22,将内存池使用状态的空闲数量加一,使用数量减一;
步骤S23,将需要释放的内存块***单向链表的第一个结点位置。
具体如图8所示的1次内存动态释放后的状态示意图(其中,填充有方格的块表示被使用的内存块),本实施例假设第1次释放的是第一个内存块,则对应单向链表结点的下标等于(内存块首地址-内存池首地址)/N=(B1-B1)/N =0,进而将第1个结点***单向链表的第1个位置,时间复杂度为常数。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种基于全局字节数组的嵌入式内存管理装置,其特征在于,包括一个内存池和一个内存管理器;
所述内存池是通过在嵌入式***中定义一个全局字节数组创建,所述内存池划分为多个固定大小的内存块;
所述内存管理器包括内存池使用状态和一个单向链表,所述内存池使用状态用于指示内存块的使用情况,所述单向链表用于挂接内存池中空闲的内存块;
所述内存管理器用于对外提供动态内存管理。
2.根据权利要求1所述的一种基于全局字节数组的嵌入式内存管理装置,其特征在于,所述内存池使用状态包括内存池首地址、内存池的大小、每个内存块的大小、内存块的总数量、内存块的使用数量和内存块的空闲数量。
3.根据权利要求1所述的一种基于全局字节数组的嵌入式内存管理装置,其特征在于,所述单向链表是通过定义数组创建,数组大小和内存池中内存块总数量相同;
所述单向链表的结点包括内存块的首地址或内存块相对于内存池首地址的偏移量。
4.基于权利要求1-3任一项所述的一种基于全局字节数组的嵌入式内存管理装置的方法,其特征在于,包括以下步骤:
初始化所述内存管理器;
基于初始化后的内存管理器对外提供动态内存管理。
5.根据权利要求4所述的方法,其特征在于,所述初始化过程包括:
根据内存池的大小和每个内存块的大小计算出内存池使用状态;
对全部内存块清零并挂接到所述单向链表中。
6.根据权利要求4所述的方法,其特征在于,所述基于初始化后的内存管理器对外提供动态内存管理步骤包括内存动态申请管理,具体过程包括:
根据当前内存池使用状态判断当前是否有空闲内存块,若有则返回单向链表第一个结点,将所述单向链表表头指向下一个结点并更新内存池使用状态;若无则直接返回空值。
7.根据权利要求4所述的方法,其特征在于,所述基于初始化后的内存管理器对外提供动态内存管理步骤包括内存动态释放管理,具体过程包括:
将需要释放的内存块内存空间全部置零;
将置零后的内存块***所述单向链表的第一个结点位置;
更新内存池使用状态。
8.根据权利要求4所述的方法,其特征在于,所述基于初始化后的内存管理器对外提供动态内存管理步骤包括重置接口,具体过程包括:
在内存池大小和内存块大小保持不变的情况下,进行初始化过程。
CN202110302248.3A 2021-03-22 2021-03-22 一种基于全局字节数组的嵌入式内存管理方法及装置 Pending CN112685188A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110302248.3A CN112685188A (zh) 2021-03-22 2021-03-22 一种基于全局字节数组的嵌入式内存管理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110302248.3A CN112685188A (zh) 2021-03-22 2021-03-22 一种基于全局字节数组的嵌入式内存管理方法及装置

Publications (1)

Publication Number Publication Date
CN112685188A true CN112685188A (zh) 2021-04-20

Family

ID=75455729

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110302248.3A Pending CN112685188A (zh) 2021-03-22 2021-03-22 一种基于全局字节数组的嵌入式内存管理方法及装置

Country Status (1)

Country Link
CN (1) CN112685188A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113419715A (zh) * 2021-06-17 2021-09-21 吕锦柏 一种基于链表的动态内存管理方法和设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1567249A (zh) * 2003-06-16 2005-01-19 华为技术有限公司 计算机***的内存管理方法
CN1722106A (zh) * 2004-07-13 2006-01-18 中兴通讯股份有限公司 一种嵌入式实时操作***中内存分配的方法
US20060069898A1 (en) * 2004-09-30 2006-03-30 Mehul Patel Memory manager for an embedded system
CN101093455A (zh) * 2006-06-21 2007-12-26 中兴通讯股份有限公司 一种嵌入式操作***的内存池分配方法
CN101140531A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 快速申请内存的方法
CN101266575A (zh) * 2007-03-13 2008-09-17 中兴通讯股份有限公司 一种提高内存池利用率的方法
CN102253897A (zh) * 2011-07-26 2011-11-23 大唐移动通信设备有限公司 一种内存池管理方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1567249A (zh) * 2003-06-16 2005-01-19 华为技术有限公司 计算机***的内存管理方法
CN1722106A (zh) * 2004-07-13 2006-01-18 中兴通讯股份有限公司 一种嵌入式实时操作***中内存分配的方法
US20060069898A1 (en) * 2004-09-30 2006-03-30 Mehul Patel Memory manager for an embedded system
CN101093455A (zh) * 2006-06-21 2007-12-26 中兴通讯股份有限公司 一种嵌入式操作***的内存池分配方法
CN101266575A (zh) * 2007-03-13 2008-09-17 中兴通讯股份有限公司 一种提高内存池利用率的方法
CN101140531A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 快速申请内存的方法
CN102253897A (zh) * 2011-07-26 2011-11-23 大唐移动通信设备有限公司 一种内存池管理方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113419715A (zh) * 2021-06-17 2021-09-21 吕锦柏 一种基于链表的动态内存管理方法和设备
CN113419715B (zh) * 2021-06-17 2024-06-25 吕锦柏 一种基于链表的动态内存管理方法和设备

Similar Documents

Publication Publication Date Title
US10705965B2 (en) Metadata loading in storage systems
CN113287286B (zh) 通过rdma进行分布式存储节点中的输入/输出处理
US20200081902A1 (en) Synchronization cache seeding
US9189271B2 (en) Operation transfer from an origin virtual machine to a destination virtual machine while continue the execution of the operation on the origin virtual machine
CN107665095B (zh) 存储器空间管理的设备、方法及可读存储介质
US10963377B2 (en) Compressed pages having data and compression metadata
CN113204407B (zh) 一种内存超配管理方法及装置
US11954362B2 (en) Flash registry with on-disk hashing
US7849272B2 (en) Dynamic memory management in an RDMA context
CN112256457A (zh) 一种基于共享内存的数据载入加速方法、装置、电子设备及存储介质
CN111104347B (zh) 堆内存块查找方法、装置、设备及存储介质
US20130185536A1 (en) Hash-based managing of storage identifiers
US20200371827A1 (en) Method, Apparatus, Device and Medium for Processing Data
CN115756962A (zh) 内存备份加速方法、装置、设备及计算机可读存储介质
CN112685188A (zh) 一种基于全局字节数组的嵌入式内存管理方法及装置
CN111061652B (zh) 一种基于mpi-io中间件的非易失内存管理方法与***
US20170046270A1 (en) Sharing data structures between processes by semi-invasive hybrid approach
CN113986134B (zh) 存储数据的方法、读取数据的方法和装置
CN108984132A (zh) 一种基于持久性内存文件***的io调度方法及装置
CN117170722B (zh) 地址不连续固件升级方法、装置及***
EP3834090B1 (en) Fast initialization of complex in-memory data structures
WO2023030173A1 (zh) 一种管理动态库的方法及相应装置
CN117873694A (zh) 堆空间分配方法、装置、电子设备和存储介质
CN114398368A (zh) 一种散列表创建方法、装置、设备及存储介质
CN117806776A (zh) 一种数据迁移方法、装置及电子设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20210420

RJ01 Rejection of invention patent application after publication