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

在fpga中使用软核做嵌入式开发,有时我们会非常在意其编译后的代码体积大小,毕竟通常情况下,microblaze都不是直接运行在ddr当中,而是运行在fpga内部的localbram里面的,而bram通常是fpga里面比较宝贵的资源,我们不希望在这上面有太多的浪费。
那么有没有什么手段,可以在不改变c代码的前提下,减小编译后的体积呢?下面就给大家教几招,如果大家碰到这类问题,可以尝试一下。
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中也要勾选对应的选项,以告诉编译器使用这些硬件特性。
在complier设置中:
在linker设置中:
4. 确保linker不连接那些没有被引用到的函数和数据
在compiler阶段,要使用(-ffunction-sections,-fdata-sections)选项,明确告诉编译器,为每个function和data item分配独立的section:
然后在linker阶段,使用(-wl,--gc-sections)选项,可以告诉链接器移除没有被引用的function和dataitem section:
使用这个选项组合,对代码体积会有比较明显的影响!
5. 如果没有使用中断,请创建空的中断处理函数,dummyvoid_interrupt_handler

恒温晶体振荡器的性能参数和应用场景分析
30款数码相机电池寿命大比拼!
指纹识别技术优缺点
D系列两通道数字功率放大器
电压偏移的原因以及改善电能质量的方法介绍
SDK– 如何减小Microblaze的代码体积
借助差分接口优化射频收发器设计性能
中兴ZM9000通过中国电信入库测试 中兴5G模组迈入新阶段
什么是固态继电器?固态继电器的原理图解
聚合物锂离子电池原理图
移动端区块链IM即时通讯直播平台系统APP开发的技术特征
stm32单片机用什么软件编程
电子芯闻早报:新诺基亚回归,优势在哪儿
中国科协创新服务中心主任到华进调研
区块链技术的难点及发展机遇
精简型Sigma-Delta A/D转换器电路的特此安及应用分析
《质量效应:仙女座》制作人表示暂时不推VR版
数码管的基本概念、分类、技术发展及市场趋势
健身房中的智能显示屏,开启智慧健身的新模式
中分召开2021年度自动化规划工作动员会