SDK– 如何减小Microblaze的代码体积

来源:本站
导读:目前正在解读《SDK– 如何减小Microblaze的代码体积》的相关信息,《SDK– 如何减小Microblaze的代码体积》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《SDK– 如何减小Microblaze的代码体积》的详细说明。
简介:那么有没有什么手段,可以在不改变c代码的前提下,减小编译后的体积呢?下面就给大家教几招,如果大家碰到这类问题,可以尝试一下。

在FPGA中使用软核做嵌入式开发,有时我们会非常在意其编译后的代码体积大小,毕竟通常情况下,Microblaze都不是直接运行在DDR当中,而是运行在FPGA内部的LocalBRAM里面的,而BRAM通常是FPGA里面比较宝贵的资源,我们不希望在这上面有太多的浪费。

那么有没有什么手段,可以在不改变c代码的前提下,减小编译后的体积呢?下面就给大家教几招,如果大家碰到这类问题,可以尝试一下。

1.确保build configuration里面,你选择的是release,而不是debug

Debug会加入额外的很多调试相关代码,而增大最终elf的体积,Release就不会这么做。

SDK– 如何减小Microblaze的代码体积

2.确保代码编译的优化选项,选择-Os:Optimizefor size

SDK– 如何减小Microblaze的代码体积

3.确认下在IP Integrator里面,Microblaze的配置都打开了哪些选项

假如某些特定的硬件feature没有打开,也就是Microblaze缺失了这些硬件配置,那么当你的代码里面存在对应类型的操作时,编译工具就会产生更多的代码去用软件模拟这一操作,这样会增大代码的面积。

比如,假如你没有勾选barrelshifter选项,而你的代码中又有移位操作的运算,那么编译器就会插入多个single bit shift 指令去替代,而这原本只用一条barrelshifter指令就可以完成。

为了减小软件代码的体积,请尽量打开尽可能多的硬件feature,当然这里面肯定有一个权衡。这些feature包括:

-barrelshifter

-hardwarepider(假如你使用除法操作)

-multiplication

-patterncompare instruction

-floatingpoint(假如你使用浮点运算)

当然,在SDK中也要勾选对应的选项,以告诉编译器使用这些硬件特性。

在Complier设置中:

SDK– 如何减小Microblaze的代码体积

在linker设置中:

SDK– 如何减小Microblaze的代码体积

4.确保linker不连接那些没有被引用到的函数和数据

在Compiler阶段,要使用(-ffunction-sections,-fdata-sections)选项,明确告诉编译器,为每个function和data item分配独立的section:

SDK– 如何减小Microblaze的代码体积

然后在linker阶段,使用(-Wl,--gc-sections)选项,可以告诉链接器移除没有被引用的function和dataitem section:

使用这个选项组合,对代码体积会有比较明显的影响!

5.如果没有使用中断,请创建空的中断处理函数,dummyvoid_interrupt_handler

提醒:《SDK– 如何减小Microblaze的代码体积》最后刷新时间 2024-03-14 00:54:11,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《SDK– 如何减小Microblaze的代码体积》该内容的真实性请自行鉴别。