System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于GD32单片机的动态链接方法技术_技高网

一种基于GD32单片机的动态链接方法技术

技术编号:43852406 阅读:7 留言:0更新日期:2024-12-31 18:44
本发明专利技术公开了一种基于GD32单片机的动态链接方法,包括以下步骤:S1:在集成IDE中基于GD32H737进行工程创建;S2:在配置文件中配置LR_IROM1装载域;S3:在IDE开发环境多功能控件Misc controls配置参数:base_platform,entry=dl_main,no_comment_section‑‑no_debug,export_dynamic;S4:使用ARMCC编译器指令__attribute__((visibility("default")))将配置参数编译成动态符号,上层应用编译成可动态加载的axf文件;S5:在系统启动前,通过汇编指令将axf文件从flash加载到内存。本发明专利技术通过使用集成IDE生成具有重定位节区的.axf文件,并在单片机上对此文件进行动态链接与运行,实现函数的动态链接,提高单片机程序的运行效率。

【技术实现步骤摘要】

本专利技术属于计算机控制,涉及一种基于gd32单片机的动态链接方法。


技术介绍

1、程序链接分为静态链接和动态链接,静态链接由链接器在链接时将库的内容加入到可执行程序中。而动态链接的链接过程在可执行文件装载时或运行时,由操作系统的装载程序加载库。

2、静态链接对运行环境依赖小,具有较好的兼容性。同时生成的程序较大,需要更多的系统资源,且在装入内存中消耗更多时间,一旦库函数有了更新,必须重新编译应用程序。

3、动态链接不会像静态链接那样同一个库在内存中存在多份副本,而是这多个程序在执行时共享同一份副本;此外动态链接更新时只需要替换原来的目标文件,而无需将所有的程序再重新链接一遍。当程序下一次运行时,新版本的目标文件会被自动加载到内存并且链接起来,程序就完成了升级的目标。但是动态链接的缺点是,因为把链接推迟到了程序运行时,所以每次执行程序都需要进行链接,所以性能会有一定损失。


技术实现思路

1、(一)要解决的技术问题

2、单片机由于资源限制通常采用静态链接方式,但是静态链接方式由于包含了所有的静态链接库,因此最终的执行文件比较大,同时内存使用效率低,多个模块静态链接了相同的库,每个模块在内存中都会拷贝其副本,大大占用了内存资源,此外对于静态链接库更新时需要整体进行编译,而动态链接只需要更新库即可。因此对于资源少、性能低的单片机,动态链接是个很好的选择。

3、(二)技术方案

4、为了解决上述技术问题,本专利技术提供基于gd32单片机的动态链接方法,其包括以下步骤:

5、s1:在集成ide中基于gd32h737进行工程创建;

6、s2:在配置文件中配置lr_irom1装载域;

7、s3:在ide开发环境多功能控件misc controls配置参数:base_platform,entry=dl_main,no_comment_section--no_debug,export_dynamic;

8、s4:使用armcc编译器指令__attribute__((visibility("default")))将配置参数编译成动态符号,上层应用编译成可动态加载的axf文件;

9、s5:在系统启动前,通过汇编指令将axf文件从flash加载到内存。

10、步骤s1中,在工程目录下创建后缀名为.sct的分散加载文件dllgen.sct,并在工程配置选项中将分散加载文件dllgen.sct进行加载操作。分散加载文件dllgen.sct将所有代码和变量分配到对应的物理地址。

11、步骤s2中,lr_irom1装载域起始地址为0x00000000,包含两个运行域:er_irom1和rw_iram1。配置好加载文件后,作为armlink的参数来使用,生成的axf文件按照配置文件进行代码和数据的分配。

12、步骤s3中,参数base_platform开启链接器基础平台模型,让生成的.axf具有动态信息,即具有重定位节区。参数entry=dl_main用于指定映像文件的初始入口点,保证动态的上层有固定的入口地址;凡是上层调用的底层接口,在编译阶段函数体指针都赋为空指令保证编译,后续再指向底层的真实地址。参数no_comment_section--no_debug,用于缩小生成axf文件的大小。参数export_dynamic用于导出动态符号,开启后axf文件中增加由字符串和偏移地址组成的动态节区。

13、步骤s5包括以下过程:

14、(1)在程序中定义句柄dl_handler,类型为无符号指针类型;

15、(2)使用动态加载函数dlopen将axf文件进行加载操作,并将返回值赋值到句柄dl_handler中,判断dl_handler不为空;

16、(3)加载成功后,使用dl_sym通过函数名获得库中对应函数的地址,通过函数指针方式动态运行;

17、(4)使用dlclose将卸载掉动态库,传入参数为句柄dl_handler。

18、(三)有益效果

19、上述技术方案所提供的基于gd32单片机的动态链接方法,通过使用集成ide生成具有重定位节区的.axf文件,并在单片机上对此文件进行动态链接与运行,实现了函数的动态链接,提高了单片机程序的运行效率。

本文档来自技高网...

【技术保护点】

1.一种基于GD32单片机的动态链接方法,其特征在于,包括以下步骤:

2.如权利要求1所述的基于GD32单片机的动态链接方法,其特征在于,步骤S1中,在工程目录下创建后缀名为.sct的分散加载文件dllgen.sct,并在工程配置选项中将分散加载文件dllgen.sct进行加载操作。

3.如权利要求2所述的基于GD32单片机的动态链接方法,其特征在于,步骤S1中,分散加载文件dllgen.sct将所有代码和变量分配到对应的物理地址。

4.如权利要求3所述的基于GD32单片机的动态链接方法,其特征在于,步骤S2中,LR_IROM1装载域起始地址为0x00000000,包含两个运行域:ER_IROM1和RW_IRAM1。

5.如权利要求4所述的基于GD32单片机的动态链接方法,其特征在于,步骤S2中,配置好加载文件后,作为armlink的参数来使用,生成的AXF文件按照配置文件进行代码和数据的分配。

6.如权利要求5所述的基于GD32单片机的动态链接方法,其特征在于,步骤S3中,参数base_platform开启链接器基础平台模型,让生成的.axf具有动态信息,即具有重定位节区。

7.如权利要求6所述的基于GD32单片机的动态链接方法,其特征在于,步骤S3中,参数entry=dl_main用于指定映像文件的初始入口点,保证动态的上层有固定的入口地址;凡是上层调用的底层接口,在编译阶段函数体指针都赋为空指令保证编译,后续再指向底层的真实地址。

8.如权利要求7所述的基于GD32单片机的动态链接方法,其特征在于,步骤S3中,参数no_comment_section--no_debug,用于缩小生成axf文件的大小。

9.如权利要求8所述的基于GD32单片机的动态链接方法,其特征在于,步骤S3中,参数export_dynamic用于导出动态符号,开启后axf文件中增加由字符串和偏移地址组成的动态节区。

10.如权利要求9所述的基于GD32单片机的动态链接方法,其特征在于,步骤S5包括以下过程:

...

【技术特征摘要】

1.一种基于gd32单片机的动态链接方法,其特征在于,包括以下步骤:

2.如权利要求1所述的基于gd32单片机的动态链接方法,其特征在于,步骤s1中,在工程目录下创建后缀名为.sct的分散加载文件dllgen.sct,并在工程配置选项中将分散加载文件dllgen.sct进行加载操作。

3.如权利要求2所述的基于gd32单片机的动态链接方法,其特征在于,步骤s1中,分散加载文件dllgen.sct将所有代码和变量分配到对应的物理地址。

4.如权利要求3所述的基于gd32单片机的动态链接方法,其特征在于,步骤s2中,lr_irom1装载域起始地址为0x00000000,包含两个运行域:er_irom1和rw_iram1。

5.如权利要求4所述的基于gd32单片机的动态链接方法,其特征在于,步骤s2中,配置好加载文件后,作为armlink的参数来使用,生成的axf文件按照配置文件进行代码和数据的分配。

6.如权利要求5所述的基于gd32单片机的...

【专利技术属性】
技术研发人员:王雨龙
申请(专利权)人:天津津航计算技术研究所
类型:发明
国别省市:

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

1