TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL-CC26X2R1: 怎么优化simple_peripheral_oad_onchip编译出来的Bin文件大小?

Part Number:LAUNCHXL-CC26X2R1Other Parts Discussed in Thread:SYSBIOS, CC2650

SDK:       simplelink_cc13xx_cc26xx_sdk_7_10_00_98

Project:simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang

怎么优化simple_peripheral_oad_onchip编译出来的Bin文件大小?

Alex Zhang:

您好,关于bin文件的编译生成大小,您这边只能手动修改。我为您提供以下思路:

删除不必要的功能和模块:检查代码中是否存在不必要的功能和模块,可以将其删除以减小文件大小。

优化代码:通过使用更高效的算法和数据结构,以及优化代码逻辑,可以减小编译生成的Bin文件大小。

压缩数据:对于包含大量数据的文件,可以考虑使用压缩算法进行数据压缩,以减小文件大小。

优化编译选项:在编译时,可以使用一些优化选项来减小生成的Bin文件大小,如调整优化级别、启用代码大小优化等。

移除调试信息:在发布版本中,可以移除调试信息以减小文件大小。

,

疾风亦有归途:

Alex Zhang said:优化编译选项:在编译时,可以使用一些优化选项来减小生成的Bin文件大小,如调整优化级别、启用代码大小优化等

CCS有没有具体优化选项?

,

Alex Zhang:

使用micro lib 其他没有了

,

疾风亦有归途:

能详细介绍下么?

Alex Zhang said:使用mircro lib

,

Alex Zhang:

您好,我又进行了查看,这个方法,不能实际减小bin文件大小,bin文件大小还是需要您这边手动去修改,谢谢。

,

Alex Zhang:

https://blog.csdn.net/baowxz/article/details/131323542?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168994604516782427480495%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168994604516782427480495&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-131323542-null-null.142^v90^control_2,239^v3^insert_chatgpt&utm_term=ccs%E7%94%9F%E6%88%90bin%E6%96%87%E4%BB%B6%E5%A4%AA%E5%A4%A7&spm=1018.2226.3001.4187

我找到了一个这样的内容,希望可以为您修改bin文件大小提供一定的思路,谢谢。

,

疾风亦有归途:

修改这个有用吗?我应该选择那个参数?

,

Alex Zhang:

O0:简化控制流图。分配变量到寄存器。进行循环换转。删除未使用的代码。简化表达式和语句。内联声明为inline的函数。

O1:执行O0的优化功能。施行局部复制/常量传递。删除未使用的赋值语句。删除局部共有的表达式。

O2:执行O1的优化功能。进行软件流水。进行循环优化。删除全局共有子表达式。删除全局未使用的赋值语句。把循环中的数组的引用转变为递增的指针形式。

进行循环展开。

O3:执行O2的优化功能。删除未使用的所有函数。当函数的返回值没有用到时,简化函数返回形式。内联小的函数。重新对函数声明进行排序。这样优化代码时,被调用函数的属性是已知的。当所有调用都传递一个相同的参数时,把这个参数直接放到函数体中去,不再通过寄存器的方式传递这个参数。识别文件级变量的特征。

4、总结最好的方法就是每个选项一次一次试一下,当发现本次优化状态代码运行不对,那么就返回上个优化状态,这样Opt Level下的优化已经到了极限。

开编译器优化可能导致跟踪函数的变量时值是错的。编译优化的好处是加快代码运行速度,但缺点就是只能把函数当做黑盒,函数内部的bebug结果是不可靠的。所以一般将算法和流程编到不同的文件中去,因为算法文件一般都是验证完了的,不怎么需要调试,所以算法文件开适当的优化,流程文件不开优化。这样既能提高运行效率又可以不影响流程的调试。

,

Alex Zhang:

您这边的问题是修改bin文件大小,建议手动去进行修改,您这边也可以试着参考以上我给您提供的链接,有从代码侧做修改的,谢谢。

,

疾风亦有归途:

经过测试-z的尺寸是最小的,有的选项还会出现编译不过的现象(-O3),原因是超过160k

"E:/ti_tool/ccs/tools/compiler/ti-cgt-armllvm_3.0.0.STS/bin/tiarmclang.exe" @"E:/TiSdk71/TiSdk71/simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Debug/syscfg/ti_ble_app_config.opt" @"E:/TiSdk71/TiSdk71/simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Debug/syscfg/ti_build_config.opt" @"E:/TiSdk71/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/ble5stack/config/build_components.opt" @"E:/TiSdk71/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source/ti/ble5stack/config/factory_config.opt" -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mlittle-endian -mthumb -O3 -DSECURITY -DOAD_ONCHIP -DOAD_IMG_B -DDeviceFamily_CC26X2 -DFLASH_ROM_BUILD -DNVOCMP_NWSAMEITEM=1 -DHEAPMGR_CONFIG=0x80 -DHEAPMGR_SIZE=0x0 -gdwarf-3 -march=armv7e-m -Wl,-m"simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang.map" -Wl,-i"E:/TiSdk71/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/source" -Wl,-i"E:/TiSdk71/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/kernel/tirtos7/packages" -Wl,-i"E:/TiSdk71/TiSdk71/simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Debug/syscfg" -Wl,-i"E:/ti_tool/ccs/tools/compiler/ti-cgt-armllvm_3.0.0.STS/lib" -Wl,–reread_libs -Wl,–define=OAD_IMG_B=1 -Wl,–define=SECURITY -Wl,–define=FLASH_ROM_BUILD=2 -Wl,–diag_suppress=16002-D -Wl,–diag_suppress=10247-D -Wl,–diag_suppress=10325-D -Wl,–diag_suppress=10229-D -Wl,–diag_suppress=16032-D -Wl,–diag_wrap=off -Wl,–display_error_number -Wl,–warn_sections -Wl,–xml_link_info="simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang_linkInfo.xml" -Wl,–rom_model -o "simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang.out" "./syscfg/ti_ble_config.o" "./syscfg/ti_radio_config.o" "./syscfg/ti_drivers_config.o" "./syscfg/ti_sysbios_config.o" "./Application/Print.o" "./Application/bim_util.o" "./Application/board_key.o" "./Application/rcosc_calibration.o" "./Application/simple_peripheral_oad_onchip.o" "./Application/simple_peripheral_oad_onchip_menu.o" "./Application/two_btn_menu.o" "./Application/util.o" "./Drivers/ECC/ECCROMCC26XX.o" "./Drivers/NV/crc.o" "./Drivers/NV/nvocmp.o" "./OAD/crc32.o" "./OAD/flash_interface_int_rtos_NVS.o" "./OAD/oad.o" "./OAD/oad_image_header_app.o" "./OAD/oad_reset_service.o" "./Profiles/devinfoservice.o" "./Profiles/simple_gatt_profile.o" "./Startup/main.o" "./Startup/osal_icall_ble.o" "./Startup/rom_init.o" "./iCall/icall.o" "./iCall/icall_cc2650.o" "./iCall/icall_user_config.o" "./iCallBLE/ble_user_config.o" "./iCallBLE/ble_user_config_stack.o" "./iCallBLE/icall_api_lite.o" "../cc13x2_cc26x2_app_tirtos7.cmd" -Wl,-lti_utils_build_linker.cmd.genlibs -Wl,-l"ti/devices/cc13x2_cc26x2/driverlib/bin/ticlang/driverlib.lib" -Wl,-llibc.a makefile:183: recipe for target 'simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang.out' failed"../cc13x2_cc26x2_app_tirtos7.cmd", line 260: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment fails for section "GROUP_3" size 0x2b39e. Available memory ranges: FLASH size: 0x27f30 unused: 0x27f30 max hole: 0x27f30 error #10010: errors encountered during linking; "simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang.out" not builttiarmclang: error: unable to remove file: permission deniedtiarmclang: error: tiarmlnk command failed with exit code 1 (use -v to see invocation)gmake[1]: *** [simple_peripheral_oad_onchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang.out] Error 1gmake: *** [all] Error 2makefile:179: recipe for target 'all' failed

**** Build Finished ****

,

Alex Zhang:

疾风亦有归途 said:经过测试-z的尺寸是最小的,有的选项还会出现编译不过的现象(-O3),原因是超过160k

目前来说 软件侧就是这个方法了,通不过的编译选项即是最佳选项了,不可以再去进行更深度的优化了。

,

Alex Zhang:

Alex Zhang said:

4、总结最好的方法就是每个选项一次一次试一下,当发现本次优化状态代码运行不对,那么就返回上个优化状态,这样Opt Level下的优化已经到了极限。

开编译器优化可能导致跟踪函数的变量时值是错的。编译优化的好处是加快代码运行速度,但缺点就是只能把函数当做黑盒,函数内部的bebug结果是不可靠的。所以一般将算法和流程编到不同的文件中去,因为算法文件一般都是验证完了的,不怎么需要调试,所以算法文件开适当的优化,流程文件不开优化。这样既能提高运行效率又可以不影响流程的调试。

您这边在程序允许的情况下,去使用,尽量不要出现以上问题,谢谢。

,

疾风亦有归途:

好的,谢谢!

,

疾风亦有归途:

这个修改是否还能有效?

e2echina.ti.com/…/95333

,

Alex Zhang:

10年前了,不确定现在ti的sdk版本以及编译器升级多少次了。您可以尝试一下。

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-CC26X2R1: 怎么优化simple_peripheral_oad_onchip编译出来的Bin文件大小?
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1