还剩2页未读,继续阅读
文本内容:
SDK-如何减小Microblaze的代码体积在FPGA中使用软核做嵌入式开发,有时我们会非常在意其编译后的代码体积大小,毕竟通常情况下,Microblaze都不是直接运行在DDR当中,而是运行在FPGA内部的LocalBRAM里面的,而BRAM通常是FPGA里面比较宝贵的资源,我们不希望在这上面有太多的浪费那么有没有什么手段,可以在不改变c代码的前提下,减小编译后的体积呢下面就给大家教几招,如果大家碰到这类问题,可以尝试一下
1.确保build configuration里面,你选择的是release,而不是debugDebug会加入额外的很多调试相关代码,而增大最终elf的体积,Release就不会这么做Make^argets」»lpherdls;”-design»jlizing InteTuptsIndex以BinaiBuild ConfigurationsSet ActiveQ1Debug»磁InduManage...Show inRemote Systemsview eDebi ProfilingTools RunAs BuildAll—cC standalcDebug AsClean AllBuildSelectedtype filter text SettingsResourceBuilders;X MicroBlaze gcc assemblerOptimization LevelNone・O0,C/C++Build Build心GeneralNone-00Variables Otheroptimization flagsMicroBlaze gcccompiler Optimize-O1EnvironmentOptimize more-02管SymbolsLogging Settings国WarningsTool Chain Editor■OptimizationC/C++General但Project ReferencesDebugging会Run/Debug SettingsProfiling而Directories自Miscellaneous囹・Inferred Options
2.确保代码编译的优化选项,选择-OsOptimizefor size
3.确认下在IP Integrator里面,Microblaze的配置都打开了哪些选项假如某些特定的硬件feature没有打开,也就是Microblaze缺失了这些硬件配置,那么当你的代码里面存在对应类型的操作时,编译工具就会产生更多的代码去用软件模拟这一操作,这样会增大代码的面积比如,假如你没有勾选barrelshifter选项,而你的代码中又有移位操作的运算,那么编译器就会插入多个single bitshift指令去替代,而这原本只用一条barrelshifter指令就可以完成为了减小软件代码的体积,请尽量打开尽可能多的硬件feature,当然这里面肯定有一个权衡这些feature包括-barrelshifter-hardwaredivider(假如你使用除法操作)-multiplication-patterncompare instruction-floatingpoint(假如你使用浮点运算)当然,在SDK中也要勾选对应的选项,以告诉编译器使用这些硬件特性type filtertext SettingsResourceBuilders・C/C*・BuildBuild VariablesConfiguration:Debu9Active]EnvironmentLogging SettingsTool ChainEditor制C/C♦♦General Tool Settings jA Build Steps IButld®Bizry Error ParsersProject References笆0MicroB^azc gccas5emblef]Do notgenerate swapinstrvcbon-mno-xi-reorderRun/Debug SettingsGeneral,Produce liWeendian code-miittie-endian困・9MkroBdze gcccompiler MUse BarrelShifter-mxl barrel-shift百Symboh WarningsV]Use PatternCompare•1¥»!pattern compare口■Optimization Use hardware divider-mno-xl-soh-div疹DebuggingMicroBlazc Verskn卢96ProfilingHardware MultiplierFPU3Directories HardMultiplier.32bit result-mrK-xi*soft-mulF Miscellaneous・段Inferred OptionsSoftwarePlatform送;Processor Options,
⑥MicroBlazegcc.inker在Compiler设置中在linker设置中:type fikeftext SettingsResourceBuilders・Build Configuration:Debug[Active]Build VariablesEnvironmentLogging9T0°lSettingsBuild StepfBuild ArtifactBinary Parsecs❶ErrorP9rMfSettingsTool ChainEditorh/l Producelittle endiandrtifacH-muttle-endianjC/C*♦General Project・®MicroBiaze gccCnker✓!Use BarrelShiher-mxl-barrel-shfftReferences gGeneralRun/Debug Setting%,处Libraries|1/Use PatternCompare・mxbpattern-compareW Miscellaneous]Usehardwaredivider•mno-xbsoft-div3Linker ScriptMicroBlazeVersion
9.6■Inferred Option1,、、■::…,1Hardware MultiplierHard・tipi erg-L.W ProcessorOptions HUNo FPUHL3•♦-C;..
4.确保linker不连接那些没有被引用到的函数和数据在Compiler阶段,要使用-ffunct ion-sect ions,-fdata-sections选项,明确告诉编译器,为每个function和data item分配独立的section typefiltertextSettingsI ResourceBuilder■C/C++Build BuildConfigurationDebugActive VariablesEnvironmentloggingSettingsToolChainEditor也.®Tool SettingsBuildSteps|Build Artifactj BinaryParsers|Q ErrocParsers.C/C..General ProjectRe4erefce4,零台MicroBlazegccassembler Otherflags*c*fmes5age-length=0Run/Debug SettingsGeneralF1Verbose-v■当MicfoBlaze gcccompiler iSupport ANSIprograms-ansi空Symbols JSWarnings JINo relaxation-WI,--no-relax*0pbm»2«tion Debugging匕[:Eruabk garbagecoflector・tfunction・^ectkg・fda•sectionProfiling•S DirectoriesMiscellaneous然后在linker阶段,使用-Wl,—gc-sections选项,可以告诉链接器移除没有被引用的function和dataitem section使用这个选项组合,对代码体积会有比较明显的影响!
5.如果没有使用中断,请创建空的中断处理函数,dummyvoid_interrupt_handler。
个人认证
优秀文档
获得点赞 0