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

发布时间:2021-09-1 阅读量:745 来源: 我爱方案网 作者: 我爱方案网整理

在FPGA中使用软核做嵌入式开发,有时我们会非常在意其编译后的代码体积大小,毕竟通常情况下,Microblaze都不是直接运行在DDR当中,而是运行在FPGA内部的LocalBRAM里面的,而BRAM通常是FPGA里面比较宝贵的资源,我们不希望在这上面有太多的浪费。那么有没有什么手段,可以在不改变c代码的前提下,减小编译后的体积呢?下面就给大家教几招,如果大家碰到这类问题,可以尝试一下。

 

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


1. 确保build configuration里面,你选择的是release,而不是debug
Debug会加入额外的很多调试相关代码,而增大最终elf的体积,Release就不会这么做。

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

3. 确认下在IP Integrator里面,Microblaze的配置都打开了哪些选项
假如某些特定的硬件feature没有打开,也就是Microblaze缺失了这些硬件配置,那么当你的代码里面存在对应类型的操作时,编译工具就会产生更多的代码去用软件模拟这一操作,这样会增大代码的面积。
比如,假如你没有勾选barrelshifter选项,而你的代码中又有移位操作的运算,那么编译器就会插入多个single bit shift 指令去替代,而这原本只用一条barrelshifter指令就可以完成。


为了减小软件代码的体积,请尽量打开尽可能多的硬件feature,当然这里面肯定有一个权衡。这些feature包括:
- barrelshifter
- hardwaredivider(假如你使用除法操作)
- multiplication
- patterncompare instruction
- floatingpoint(假如你使用浮点运算)
当然,在SDK中也要勾选对应的选项,以告诉编译器使用这些硬件特性。

4. 确保linker不连接那些没有被引用到的函数和数据
在Compiler阶段,要使用(-ffunction-sections,-fdata-sections)选项,明确告诉编译器,为每个function和data item分配独立的section:

然后在linker阶段,使用(-Wl,--gc-sections)选项,可以告诉链接器移除没有被引用的function和dataitem section:使用这个选项组合,对代码体积会有比较明显的影响!


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


相关资讯
无源晶振YSX321SL应用于高精度HUD平视显示系统YXC3225

在现代汽车行业中,HUD平视显示系统正日益成为驾驶员的得力助手,为驾驶员提供实时导航、车辆信息和警示等功能,使驾驶更加安全和便捷。在HUD平视显示系统中,高精度的晶振是确保系统稳定运行的关键要素。YSX321SL是一款优质的3225无源晶振,拥有多项卓越特性,使其成为HUD平视显示系统的首选。

拥有卓越性能的高精度超薄低功耗心电贴—YSX211SL

随着医疗技术的进步,心电监护设备在日常生活和医疗领域中起到了至关重要的作用。而无源晶振 YSX211SL 作为一种先进的心电贴产品,以其独特的优势在市场上备受瞩目。

可编程晶振选型应该注意事项

对于可编程晶振选型的话,需要根据企业的需求选择。在选择可编程晶振的时候注重晶振外观、晶振的频率、晶振的输出模式、晶振的型号等等,这些都是要注意的,尤其是晶振的频率和晶振输出模式以及晶振的型号都是需要注意的。

性能高的服务器—宽电压有源晶振YSO110TR 25MHZ,多种精度选择支持±10PPM—±30PPM

在现代科技发展中,服务器扮演着越来越重要的角色,为各种应用提供强大的计算和数据存储能力。而高品质的服务器组件是确保服务器稳定运行的关键。YSO110TR宽电压有源晶振,作为服务器的重要组成部分,具备多项优势,成为业界必备的可靠之选。

差分晶振怎么测量

其实对于差分晶振怎么测量方式有很多种,主要还是要看自己选择什么样的方式了,因为选择不同的测量方式步骤和操作方式是不同的。关于差分晶振怎么测量的方式,小扬给大家详细的分享一些吧!