This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Part Number: LAUNCHXL-CC26X2R1
Other 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文件大小?

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

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

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

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

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

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

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

    CCS有没有具体优化选项?

  • 使用micro lib 其他没有了

  • 能详细介绍下么?

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

  • 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文件大小提供一定的思路,谢谢。

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

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

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

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

    进行循环展开。

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

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

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

  • 您这边的问题是修改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 built
    tiarmclang: error: unable to remove file: permission denied
    tiarmclang: 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 1
    gmake: *** [all] Error 2
    makefile:179: recipe for target 'all' failed

    **** Build Finished ****

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

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

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

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

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

  • 好的,谢谢!

  • 这个修改是否还能有效?

    e2echina.ti.com/.../95333

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