发布时间:2021-09-1 阅读量:1072 来源: 我爱方案网 作者: 我爱方案网整理
在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中也要勾选对应的选项,以告诉编译器使用这些硬件特性。
4. 确保linker不连接那些没有被引用到的函数和数据
在Compiler阶段,要使用(-ffunction-sections,-fdata-sections)选项,明确告诉编译器,为每个function和data item分配独立的section:
然后在linker阶段,使用(-Wl,--gc-sections)选项,可以告诉链接器移除没有被引用的function和dataitem section:使用这个选项组合,对代码体积会有比较明显的影响!
5. 如果没有使用中断,请创建空的中断处理函数,dummyvoid_interrupt_handler
晶振的启动时间,通常是指其通电后进入稳定振荡状态所需的时间。若启动时间过长,可从以下五个常见的影响因素方面进行优化。
RTC(Real-Time Clock,实时时钟)芯片作为一种独立的专用计时器件,其核心功能包括提供稳定的日历时钟、在主电源断电后持续运行、支持定时中断以及输出高精度时间戳,为各类嵌入式系统提供可靠的时间基准。
时钟系统是保障微控制器(MCU)稳定运行的核心,而晶振作为关键时钟源,主要分为无源晶振与有源晶振两种类型。下面将围绕工作原理、硬件接口、电气特性及其在MCU中的适配场景等维度,系统解析这两类晶振与MCU之间的关联逻辑。
恒温晶振(Oven Controlled Crystal Oscillator,简称OCXO)是高精度频率源的核心组件,选用切型更优(如SC切、AT切高精度型)、封装应力极小的高Q值晶片,通过恒温槽的超精密控温,让晶振始终工作在零温度系数点,几乎消除温度引发的频率漂移。
晶振倍频干扰(即高次谐波辐射)是电磁兼容(EMC)设计中非常棘手的问题,通常表现为基频25MHz的5次、7次谐波(如125MHz、175MHz等)处辐射超标。该问题源于晶振输出方波信号包含丰富的高次谐波成分,若PCB布局不当,晶振及其走线极易构成高效辐射天线,导致电磁干扰增强。