CN103077017A - 一种嵌入式内存复用方法 - Google Patents
一种嵌入式内存复用方法 Download PDFInfo
- Publication number
- CN103077017A CN103077017A CN2012105773844A CN201210577384A CN103077017A CN 103077017 A CN103077017 A CN 103077017A CN 2012105773844 A CN2012105773844 A CN 2012105773844A CN 201210577384 A CN201210577384 A CN 201210577384A CN 103077017 A CN103077017 A CN 103077017A
- Authority
- CN
- China
- Prior art keywords
- memory
- array
- multiplexing
- global variable
- variable
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种嵌入式内存复用方法,利用指针操作及分时复用,将存放在内存中不同文件的程序代码中的部分全局变量、数组和结构体进行合并。本发明相对于现有技术,具有如下的优点和有益效果:(1)本发明方法可在任何平台和任何开发阶段引入,并且只是在原来的代码基础上做比较小的改动;(2)通过指针操作和内存复用的方法,可以对内存进行优化,解决很多技术开发和工程项目中存在的内存不足的难题。
Description
技术领域
本发明涉及软件的内存管理领域,特别涉及一种嵌入式内存复用方法。
背景技术
随着电子技术的发展,嵌入式开发已是一个热门的行业。其开发由浅入深分为不同的层次,各层次对人才的要求也有所不同,但嵌入式开发的入行门槛不高以及新旧人才更替周期短等原因,导致一个项目开发团队里出现人才水平的良莠不齐。正因如此,我们一直倡导的高质量编程在实际操作中客观存在许多困难,因为真正意义上的高质量软件需要一种贯穿整个软件开发过程的潜移默化的规范,这对开发团队的要求不言而喻。而这种潜移默化往往是经验堆成的,并且软件工程师的任何逻辑性及规范性的疏忽都会被完整地保留在软件里面。为了弥补各种人为因素造成的软件质量不高,近二三十年来行业内涌现出许多评估代码质量的工具,如MISRA、PCLing、Understand、SourceMonitor等等,这些工具对于软件开发过程有一定的参考及辅助作用,工具的出现本身就承认了人为的负面因素是不可避免的。但是,不同的工具只是从不同的角度去诠释代码的质量,可以说都是对的,但其反映的结果都不是绝对的,这是因为工具的实现依赖于人为定义的规范、简单的规则及其组合,其规范定义得越详细,工具的设计及使用也会越复杂,而且执行成本也越高。大部份嵌入式产品的安全级别并不高,且更新换代快,导致了开发压力大,这跟高成本高质量开发过程是个矛盾的关系。这种矛盾关系迫使我们在质量与成本之间做了个折中的选择,正是这个折中的关系纵容了各种不良因素的存在,包括人才选择、过程控制、质量评审、交接管理等各个环节,并且这些不良因素造成的影响会在传递与继承过程中不断积累。这就是一个软件平台不可抗拒的腐化过程。
内存管理是软件质量的一个重要组成部份,软件的腐化过程也是内存管理冗余的积累过程。嵌入式产品中内存的管理质量有了更重要的意义,它与硬件成本直接挂钩,因为嵌入式产品对内存用量的可预测性较强,所以设计时出于成本考虑无不是精打细算。但内存管理上的腐化过程同样是不可杜绝的,实质产品开发中可能到了后期才发现内存不够用,这不是前预估得不好,而是开发过程中不合理调度造成的浪费过多,如有分配了大量使用频率极低甚至是一次性消费的内存。这有可能会使项目陷入困境,不得不花费大量时间对代码进行优化甚至重构,从风险控制角度来看是极不可取的,甚至有些项目临时追加功能导致了内存用量超出了预估,不得不从硬件上增加内存或者重新立项,这无疑增加了项目的开发成本。
发明内容
基于上述现有技术存在的缺陷和不足,本发明提供了一种嵌入式内存复用方法。本发明的目的通过下述方案实现:一种嵌入式内存复用方法,利用指针操作及分时复用,将存放在内存中不同文件的程序代码中的部分全局变量、数组和结构体进行合并,其包括以下步骤:
(1)在所述程序代码中收集可用于复用的不同文件中的全局变量、数组和结构体,修改代码从而将所述收集到的全局变量、数组和结构体定义到第一文件中并连续放置,并将所述收集到的全局变量、数组和结构体原来定义的地方作外部声明;对所述第一文件的程序代码进行编译后,所述收集到的全局变量、数组和结构体在内存区域X中连续分布;
(2)对与所述收集到的全局变量、数组和结构体复用的变量、数组和结构体中的一个或多个进行指针操作,以将其内存地址映射到所述内存区域X。
进一步的,所述收集到的全局变量、数组和结构体与所述复用的变量、数组和结构体中的一个或多个的有效时间域不重叠。
进一步的,所述内存区域X的内存空间大于所述复用的变量、数组和结构体中的一个或多个所需的内存空间。
本发明相对于现有技术,具有如下的优点和有益效果:
(1)本发明方法可在任何平台和任何开发阶段引入,并且只是在原来的代码基础上做比较小的改动;
(2)通过指针操作和内存复用的方法,可以对内存进行优化,解决很多技术开发和工程项目中存在的内存不足的难题。
附图说明
图1是本发明一种嵌入式内存复用方法的内存复用示意图。
图2是本发明一种嵌入式内存复用方法的内存在复用前后的对比图。
图3是本发明一种嵌入式内存复用方法的指针操作示意图。
图4是本发明一种嵌入式内存复用方法的一优选实施例的示意图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细说明,但本发明的实施方式不限于此。
本发明是利用指针操作及分时复用的方法,将代码里一部份的全局变量、数组、结构体进行合并,达到高效利用资源的目的,节约物理内存的消耗。其方法为:步骤一,在程序源代码中收集可用于复用的全局变量、数组和结构体,修改代码从而将这些收集到的全局变量、数组和结构体定义到一第一文件中并连续放置,同时将所述收集到的全局变量、数组和结构体原来定义的地方作外部声明。其中,根据情况可能收集到多个全局变量、数组和结构体,也可能仅收集到全局变量、数组和结构体中的一个或几个。在一实施例中,如图1所示,收集到可用于复用的全局变量a、数组b和结构体c,然后在Visual C中对文件A、文件B和文件C修改源程序代码从而将所述收集到的全局变量A、数组B和结构体C定义到同一个文件D中并连续放置,将所述收集到的全局变量a、数组b和结构体c在原来定义的地方作外部声明。对文件D进行编译后,全局变量a、数组b和结构体c在内存区域X中连续分布,如图2所示,。
步骤二,对与上述收集到的全局变量、数组和结构体复用的变量、数组和结构体中的一个或多个进行指针操作,以将其内存地址映射到内存区域X。本实施例中,如图3所示,上述的全局变量a、数组b和结构体c组成了被复用的内存区域X,而与其复用的变量、数组和结构体中的一个或多个需要通过指针操作将地址映射到复用区域。假设与之复用的是两个char型数组 e[3] 和 f[3] ,那么只要将这两个数组的定义:unsigned char e[3]; unsigned char f[3];改成指针的定义及赋值就可以了:unsigned char *e = &a[0]; unsigned char *f = &a[0]+3; 。
其它代码可以原封不动,因为指针赋了值以后可以当数组使用,而指针所指向的内存区域X是一块连续可用的区域。出于数据安全考虑,必须保证上述 a、b、c构成的区域X要大于e[3] 和 f[3]所需求内存空间的大小,以免溢出覆盖到其它正常数据。同时,要在数据有效时间结束时将该区域清空,如果条件允许,最好是复位。
本发明的另一优选实施例中,如图4所示,某产品系统中连接有USB模块及蓝牙(BT)模块,USB和BT都是独立的模块,各自都有独立运行的程序。现要实现一个新功能:通过U盘实现BT软件的在线更新功能。这个思路就是USB模块读取U盘里的更新文件,然后将数据发送到MCU进行数据格式转换,然后再发送到BT模块。其最主要解决的便是MCU的内存不足。在数据下载期间,消耗MCU内存的动作主要是数据同步、收发缓存及校验缓存。假设以512 byte为一帧数据,那么这将要耗掉MCU接近3K的内存,当然这个数据不是绝对的。对其进行可行性分析,软件更新是个小概率动作,其对内存的使用可以说是一次性占用。出于下载速度及软件安全考虑,下载过程中停止一切响应。这样一来,可以选择与之复用的内存资源非常丰富,只要不是下载过程IIC及UART需要用到的内存基本都可以。具体,其内存复用的操作包括以下三个步骤。
(1)收集变量:在可选的情况下,一般都选择较大的数组或结构体,这样可减少变量的个数,利于安全的控制,收集变量的多少需要先经过计算。其实际收集到的数据及结构体并将其定义堆放到一起的代码为:
UWord8 mBluetoothTPBuffer[170]={0x00};
UWord8 mCallTPBuffer[81]={0x00};
BTPhoneBookItem mPNBookBuffer[PhoneBookBufferItem*4]={0};
BluetoothCallLogNumber mBluetoothCallLogList[PhoneCallLogMaxItem]={0};
UWord8 mTpCDMP3FolderListTextBuffer[218]={0}; 。
(2)指针映射:这里四个512字节的内存被复用,只要将内存的首地址指向共用区域对应的地址就可以使用了,如下代码所示的,其中&mBluetoothTPBuffer[0]是共用区的首地址。
uint8 *BTDownLoadPacket = &mBluetoothTPBuffer[0];
uint8 *dfuDownLoadPacket = &mBluetoothTPBuffer[0]+512
uint8 *send_buffer = &mBluetoothTPBuffer[0]+512*2
uint8 *receive_buffer = &mBluetoothTPBuffer[0]+512*3
映射完成后就等同于定义了四个新的数组:
uint8 BTDownLoadPacket [512];
uint8 dfuDownLoadPacket[512];
uint8 send_buffer [512];
uint8 receive_buffer[512] ;。
(3)下载完毕后复位:这种情况,复位是不二的选择,即可清空共用区域的数据,又可令系统中各模块重新初始化避免因停顿造成的各种可能的错误。
经过以上步骤,内存不足的问题就得到了解决。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (3)
1.一种嵌入式内存复用方法,其特征在于利用指针操作及分时复用,将存放在内存中不同文件的程序代码中的部分全局变量、数组和结构体进行合并,其包括以下步骤:
(1)在所述程序代码中收集可用于复用的不同文件中的全局变量、数组和结构体,修改代码从而将所述收集到的全局变量、数组和结构体定义到第一文件中并连续放置,并将所述收集到的全局变量、数组和结构体原来定义的地方作外部声明;对所述第一文件的程序代码进行编译后,所述收集到的全局变量、数组和结构体在内存区域X中连续分布;
(2)对与所述收集到的全局变量、数组和结构体复用的变量、数组和结构体中的一个或多个进行指针操作,以将其内存地址映射到所述内存区域X。
2.根据权利要求1所述的一种嵌入式内存复用方法,其特征在于:所述收集到的全局变量、数组和结构体与所述复用的变量、数组和结构体中的一个或多个的有效时间域不重叠。
3.根据权利要求1所述的一种嵌入式内存复用方法,其特征在于:所述内存区域X的内存空间大于所述复用的变量、数组和结构体中的一个或多个所需的内存空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210577384.4A CN103077017B (zh) | 2012-12-27 | 2012-12-27 | 一种嵌入式内存复用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210577384.4A CN103077017B (zh) | 2012-12-27 | 2012-12-27 | 一种嵌入式内存复用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103077017A true CN103077017A (zh) | 2013-05-01 |
CN103077017B CN103077017B (zh) | 2016-09-28 |
Family
ID=48153555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210577384.4A Active CN103077017B (zh) | 2012-12-27 | 2012-12-27 | 一种嵌入式内存复用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103077017B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104360834A (zh) * | 2014-10-10 | 2015-02-18 | 惠州市德赛西威汽车电子有限公司 | 一种车载嵌入式系统复用第三方插件的方法 |
CN106406857A (zh) * | 2016-08-30 | 2017-02-15 | 惠州学院 | 一种动态链接库的内存复用方法和装置 |
CN106776016A (zh) * | 2016-11-28 | 2017-05-31 | 硅谷数模半导体(北京)有限公司 | 应用程序处理方法和装置 |
CN107423038A (zh) * | 2017-03-16 | 2017-12-01 | 深圳市广和通无线通信软件有限公司 | 不依赖文件系统的差分包合并方法与系统 |
CN113032291A (zh) * | 2021-03-31 | 2021-06-25 | 四川长虹空调有限公司 | 优化数据内存分配的方法、及查找数据与改写数据的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060112155A1 (en) * | 2004-11-24 | 2006-05-25 | Agami Systems, Inc. | System and method for managing quality of service for a storage system |
-
2012
- 2012-12-27 CN CN201210577384.4A patent/CN103077017B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060112155A1 (en) * | 2004-11-24 | 2006-05-25 | Agami Systems, Inc. | System and method for managing quality of service for a storage system |
Non-Patent Citations (2)
Title |
---|
王卡风 等: "《MTK内存复用技术》", 《MTK内存复用技术》 * |
王卡风 等: "MTK手机平台内存使用技术概述", 《中国新技术新产品》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104360834A (zh) * | 2014-10-10 | 2015-02-18 | 惠州市德赛西威汽车电子有限公司 | 一种车载嵌入式系统复用第三方插件的方法 |
CN104360834B (zh) * | 2014-10-10 | 2018-01-26 | 惠州市德赛西威汽车电子股份有限公司 | 一种车载嵌入式系统复用第三方插件的方法 |
CN106406857A (zh) * | 2016-08-30 | 2017-02-15 | 惠州学院 | 一种动态链接库的内存复用方法和装置 |
CN106406857B (zh) * | 2016-08-30 | 2021-04-13 | 惠州学院 | 一种动态链接库的内存复用方法和装置 |
CN106776016A (zh) * | 2016-11-28 | 2017-05-31 | 硅谷数模半导体(北京)有限公司 | 应用程序处理方法和装置 |
CN107423038A (zh) * | 2017-03-16 | 2017-12-01 | 深圳市广和通无线通信软件有限公司 | 不依赖文件系统的差分包合并方法与系统 |
CN107423038B (zh) * | 2017-03-16 | 2020-09-29 | 深圳市广和通无线通信软件有限公司 | 不依赖文件系统的差分包合并方法与系统 |
CN113032291A (zh) * | 2021-03-31 | 2021-06-25 | 四川长虹空调有限公司 | 优化数据内存分配的方法、及查找数据与改写数据的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103077017B (zh) | 2016-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113688006B (zh) | 一种日志数据的校验方法及装置 | |
CN103077017A (zh) | 一种嵌入式内存复用方法 | |
CN103399840B (zh) | 一种计算机配置文件的带外修改方法及计算机 | |
CN104657194B (zh) | 用于计算网络中动作的影响的方法和系统 | |
CN103279353B (zh) | 一种应用优化策略确定方法、装置及系统 | |
CN105353989B (zh) | 存储数据访问方法及相关的控制器、设备、主机和系统 | |
US9728976B2 (en) | Method and system for allocating energy | |
CN111861412B (zh) | 面向完成时间优化的科学工作流调度方法及系统 | |
CN109643243A (zh) | 动态虚拟cpu核分配 | |
CN110290021B (zh) | 基于动态规划算法的跨链共识时延优化方法 | |
CN103745225A (zh) | 分布式ctr预测模型训练的方法和系统 | |
DE602005018056D1 (de) | Sensor-fehlerdiagnose und -prognose unter verwendualer entwicklungen | |
CN103797436A (zh) | 用于计算装置的动态电力优化 | |
CN107145343A (zh) | 一种动态适配外围设备的系统及方法 | |
US10867084B2 (en) | Methods and systems architecture to virtualize energy functions and processes into a cloud based model | |
CN105607952A (zh) | 一种虚拟化资源的调度方法及装置 | |
CN104331270B (zh) | 一种流数据处理的方法、装置及系统 | |
CN104077280A (zh) | 社区发现并行化方法和系统、主节点和运算节点设备 | |
CN101963911B (zh) | 补丁生成方法和装置 | |
CN105045601A (zh) | 一种基于云平台的产品发布及部署系统 | |
CN112598135A (zh) | 模型训练处理方法、装置、计算机设备及介质 | |
CN107562520A (zh) | 扩容虚拟机的内存的方法和装置 | |
CN103677841A (zh) | 基于元素级模板的ietm的代码生成方法及装置 | |
CN103677845A (zh) | 一种网站应用部署方法 | |
CN114064012B (zh) | 一种动静结合的接口代码生成方法、系统及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 516006 Guangdong province Huizhou City Zhongkai high tech Zone and five West Road No. 103 Applicant after: HUIZHOU DESAY SV AUTOMOTIVE CO., LTD. Address before: 516006 Guangdong province Huizhou City Zhongkai high tech Zone and five West Road No. 103 Applicant before: Huizhou Desay SV Auto. Electronics Co., Ltd. |
|
COR | Change of bibliographic data | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |