System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() MCU的空间复用方法及系统技术方案_技高网

MCU的空间复用方法及系统技术方案

技术编号:41537966 阅读:4 留言:0更新日期:2024-06-03 23:16
本发明专利技术提供了一种MCU的空间复用方法及系统,所述方法应用于有Boot程序和App程序的MCU,所述Boot程序和App程序之间存在可复用内容,所述复用内容同时包含在Boot程序和App程序中,具体内容指:可复用库、可复用函数和可复用变量,所述MCU空间复用方法是将复用内容提取到App程序和Boot程序的外部做为独立程序存在在MCU中,不占用Boot程序或App程序的空间,并被其他程序共同调用。使用本方法减少Boot程序和App程序之间重复代码,减少可执行文件大小,提高MCU空间利用率,不会改变原有调用复用内容的方式,不复杂化开发和编译流程,保持开发效率。

【技术实现步骤摘要】

本专利技术涉及mcu内存空间优化的,具体地,涉及mcu的空间复用方法及系统,尤其涉及一种小容量mcu的空间复用方法。


技术介绍

1、小容量mcu开发时,mcu内存容易不足,如何高效利用内存空间一直是个重要议题。部署在产品上的mcu的程序往往包含bootloader和app程序,两个程序会在mcu启动或升级过程中的不同阶段单独运行,但这两部分程序通常具有相同的功能代码,比如驱动封装代码,协议栈代码,工具代码等,这些内容可能占用了程序不小的空间。在内存紧张的mcu开发中,这部分内存优化显得十分有意义。

2、因此,需要提出一种新的技术方案以改善上述技术问题。


技术实现思路

1、针对现有技术中的缺陷,本专利技术的目的是提供一种mcu的空间复用方法及系统。

2、根据本专利技术提供的一种mcu的空间复用方法,所述方法包括如下步骤:

3、步骤s1:将复用内容从boot和app程序分离独立出来,使boot和app程序中不包含复用内容的实现内容;

4、步骤s2:在mcu内存空间中分别指定boot程序、app程序和复用内容程序的内存空间大小和起始地址;

5、步骤s3:复用内容的代码独立编译链接生成可执行文件,可执行文件作为固件烧录在指定mcu内存空间,且烧录位置也独立于app程序和boot程序;

6、步骤s4:复用内容的可执行文件包含复用函数和复用变量的符号与地址,通过所述符号与地址得到相应的复用内容的复用函数或复用变量在mcu内存的具体位置发布,将所述符号与地址一块放入链接脚本文件,提供外部链接时使用;

7、步骤s5:app/boot代码编译生成app/boot目标文件;

8、步骤s6:app/boot目标文件在链接时,根据所述链接脚本中复用内容的符号地址,链接到复用内容的实现,使app/boot可执行文件生成并且能够正常使用复用内容。

9、优选地,所述方法应用于有boot引导装载程序和app应用程序的mcu,所述boot程序和app程序之间存在可复用内容,所述可复用内容包括可复用库、可复用函数和可复用变量,同时包含在两个或多个独立程序内部,占用独立程序部分空间,所述mcu空间复用方法是将可复用内容提取到独立程序的外部,不占用各个独立程序的空间,并被各个独立程序共同调用;所述复用内容代码以及其他所述独立程序分别独立编译生成目标文件、可执行文件,分别烧录在指定mcu内存空间。

10、优选地,所述通过复用内容的可执行文件获取复用函数和复用变量的符号与地址,将所述符号与地址一块放入链接脚本文件;所述boot程序和app程序通过所述链接脚本链接程序中调用的复用内容来生成可执行程序。

11、优选地,所述复用内容通过中间函数替代依赖app程序和boot程序的函数,所述中间函数在复用内容程序中实现,内容是执行一个函数指针变量,所述函数指针变量的符号与地址通过所述复用内容的目标文件知晓,并同样写入所述链接脚本中,供调用方链接使用,所述外部程序为app程序或boot程序,所述功能函数在外部程序中实现,外部程序通过所述函数指针变量提供功能函数的地址,所述复用函数依赖外部功能函数时,通过调用中间函数执行具有外部程序的功能函数地址的函数指针变量,等效于调用功能函数。

12、优选地,所述boot程序和app程序切换运行时初始化复用内容的bss段和数据段,即初始化复用内容的全局变量和静态变量。

13、优选地,当复用内容存在需要回调外部程序或基于外部程序的函数实现功能情况,即复用内容存在有依赖外部功能函数的复用函数,使用中间函数方法,所述中间函数在复用内容程序中实现,在形式上能替代原功能函数被复用函数调用,即中间函数的命名符号以及传参和返回内容和功能函数一样,但内容是执行一个指向功能函数的函数指针;

14、所述函数指针变量的符号与地址通过所述复用内容的目标文件知晓,并同样写入所述链接脚本中,供外部程序链接和传值。

15、优选地,所述外部程序是app程序或boot程序,将调用复用内容复用函数,包括其中需要依赖外部的复用函数;

16、所述功能函数在外部程序中实现,外部程序运行时直接取得功能函数的函数地址值,外部程序在运行初始化时或在调用复用函数前,需要向函数指针变量提供对应的功能函数的地址。

17、优选地,所述依赖外部的复用函数通过调用中间函数执行函数指针变量,该指针是指向外部程序的功能函数地址,使得复用函数调用中间函数基本等效于调用功能函数;

18、复用内容被app程序和boo程序使用时,复用内容的数据内容被修改过使得下个程序无法直接使用,采取初始化复用内容bss段和数据段的方法;

19、复用内容作为独立的程序,在mcu内存空间中有复用内容的内存区域bss段和数据段,所述bss段存放复用内容程序中所有初始值为0的全局变量,所述数据段存放复用内容中所有初始值非0的全局变量。

20、优选地,在链接时时获取复用内容的bss段数据段的地址值长度值,并放入指定的内存位置;app/boot程序能够从所述指定的内存位置获取复用内容的bss段和数据段的地址和长度,然后初始化bss段和数据段,即初始化全局变量和静态变量;

21、通过对所述复用内容的bss段做清0操作,把复用内容程序中所有最开始初始值为0的全局变量初始化回数值0,通过将复用内容rom中数据段的全局变量数值复制到ram中数据段上,使得ram中数据段上变量初始化回初始数值内容;

22、在app/boot代码初始化时通过所述初始化复用内容bss段和数据段,使接下来app/boot程序能够正常使用复用内容。

23、本专利技术还提供一种mcu的空间复用系统,所述系统包括如下模块:

24、模块m1:将复用内容从boot和app程序分离独立出来,使boot和app程序中不包含复用内容的实现内容;

25、模块m2:在mcu内存空间中分别指定boot程序、app程序和复用内容程序的内存空间大小和起始地址;

26、模块m3:复用内容的代码独立编译链接生成可执行文件,可执行文件作为固件烧录在指定mcu内存空间,且烧录位置也独立于app程序和boot程序;

27、模块m4:复用内容的可执行文件包含复用函数和复用变量的符号与地址,通过所述符号与地址得到相应的复用内容的复用函数或复用变量在mcu内存的具体位置发布,将所述符号与地址一块放入链接脚本文件,提供外部链接时使用;

28、模块m5:app/boot代码编译生成app/boot目标文件;

29、模块m6:app/boot目标文件在链接时,根据所述链接脚本中复用内容的符号地址,链接到复用内容的实现,使app/boot可执行文件生成并且能够正常使用复用内容。

30、与现有技术相比,本专利技术具有如下的有益效果:

31、1、相比于传统方式,本发本文档来自技高网...

【技术保护点】

1.一种MCU的空间复用方法,其特征在于,所述方法包括如下步骤:

2.根据权利要求1所述的MCU的空间复用方法,其特征在于,所述方法应用于有Boot引导装载程序和App应用程序的MCU,所述Boot程序和App程序之间存在可复用内容,所述可复用内容包括可复用库、可复用函数和可复用变量,同时包含在两个或多个独立程序内部,占用独立程序部分空间,所述MCU空间复用方法是将可复用内容提取到独立程序的外部,不占用各个独立程序的空间,并被各个独立程序共同调用;所述复用内容代码以及其他所述独立程序分别独立编译生成目标文件、可执行文件,分别烧录在指定MCU内存空间。

3.根据权利要求1所述的MCU的空间复用方法,其特征在于,所述通过复用内容的可执行文件获取复用函数和复用变量的符号与地址,将所述符号与地址一块放入链接脚本文件;所述Boot程序和App程序通过所述链接脚本链接程序中调用的复用内容来生成可执行程序。

4.根据权利要求1所述的MCU的空间复用方法,其特征在于,所述复用内容通过中间函数替代依赖App程序和Boot程序的函数,所述中间函数在复用内容程序中实现,内容是执行一个函数指针变量,所述函数指针变量的符号与地址通过所述复用内容的目标文件知晓,并同样写入所述链接脚本中,供调用方链接使用,所述外部程序为App程序或Boot程序,所述功能函数在外部程序中实现,外部程序通过所述函数指针变量提供功能函数的地址,所述复用函数依赖外部功能函数时,通过调用中间函数执行具有外部程序的功能函数地址的函数指针变量,等效于调用功能函数。

5.根据权利要求1所述的MCU的空间复用方法,其特征在于,所述Boot程序和App程序切换运行时初始化复用内容的bss段和数据段,即初始化复用内容的全局变量和静态变量。

6.根据权利要求1所述的MCU的空间复用方法,其特征在于,当复用内容存在需要回调外部程序或基于外部程序的函数实现功能情况,即复用内容存在有依赖外部功能函数的复用函数,使用中间函数方法,所述中间函数在复用内容程序中实现,在形式上能替代原功能函数被复用函数调用,即中间函数的命名符号以及传参和返回内容和功能函数一样,但内容是执行一个指向功能函数的函数指针;

7.根据权利要求6所述的MCU的空间复用方法,其特征在于,所述外部程序是App程序或Boot程序,将调用复用内容复用函数,包括其中需要依赖外部的复用函数;

8.根据权利要求7所述的MCU的空间复用方法,其特征在于,所述依赖外部的复用函数通过调用中间函数执行函数指针变量,该指针是指向外部程序的功能函数地址,使得复用函数调用中间函数基本等效于调用功能函数;

9.根据权利要求8所述的MCU的空间复用方法,其特征在于,在链接时时获取复用内容的bss段数据段的地址值长度值,并放入指定的内存位置;App/Boot程序能够从所述指定的内存位置获取复用内容的BSS段和数据段的地址和长度,然后初始化bss段和数据段,即初始化全局变量和静态变量;

10.一种MCU的空间复用系统,其特征在于,所述系统包括如下模块:

...

【技术特征摘要】

1.一种mcu的空间复用方法,其特征在于,所述方法包括如下步骤:

2.根据权利要求1所述的mcu的空间复用方法,其特征在于,所述方法应用于有boot引导装载程序和app应用程序的mcu,所述boot程序和app程序之间存在可复用内容,所述可复用内容包括可复用库、可复用函数和可复用变量,同时包含在两个或多个独立程序内部,占用独立程序部分空间,所述mcu空间复用方法是将可复用内容提取到独立程序的外部,不占用各个独立程序的空间,并被各个独立程序共同调用;所述复用内容代码以及其他所述独立程序分别独立编译生成目标文件、可执行文件,分别烧录在指定mcu内存空间。

3.根据权利要求1所述的mcu的空间复用方法,其特征在于,所述通过复用内容的可执行文件获取复用函数和复用变量的符号与地址,将所述符号与地址一块放入链接脚本文件;所述boot程序和app程序通过所述链接脚本链接程序中调用的复用内容来生成可执行程序。

4.根据权利要求1所述的mcu的空间复用方法,其特征在于,所述复用内容通过中间函数替代依赖app程序和boot程序的函数,所述中间函数在复用内容程序中实现,内容是执行一个函数指针变量,所述函数指针变量的符号与地址通过所述复用内容的目标文件知晓,并同样写入所述链接脚本中,供调用方链接使用,所述外部程序为app程序或boot程序,所述功能函数在外部程序中实现,外部程序通过所述函数指针变量提供功能函数的地址,所述复用函数依赖外部功能函数时,通过调用中间函数执行具有外部程序的功能函数地址的函数...

【专利技术属性】
技术研发人员:魏志耿李子男利文浩
申请(专利权)人:上海瓶钵信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1