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.

[参考译文] CC2630:将诸如 SYSBIOS 之类的操作系统组件放置在已知闪存位置

Guru**** 1127450 points
Other Parts Discussed in Thread: SYSBIOS, TIMAC, CC2630, Z-STACK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1259502/cc2630-placing-os-components-like-sysbios-at-known-flash-locations

器件型号:CC2630
Thread 中讨论的其他器件:SysBiosTIMAC、、Z-stack

我是为一个无法在 ROM 中使用 SYSBIOS 的应用程序编写的、因此我必须在闪存中放置大量的代码。 不幸的是、这给我带来了资源方面的难题、此时我没有足够的空间来以无线更新的方式写入我的应用程序。 一个主要因素是 SYSBIOS 和其他 IAR 组件占用的空间大小。

我是从将堆栈映像放置到闪存的末尾开始的、应用程序会始终引用它、这有用但还不够。 查看映射文件:

    Module                      ro code  ro data  rw data
    ------                      -------  -------  -------
driverlib.lib: [6]
    aon_batmon.o                     40
    chipinfo.o                       36
    cpu.o                            24
    ddi.o                           162
    driverlib_ver.o                                     1
    flash.o                          32
    osc.o                           528                20
    setup.o                       1 168
    sys_ctrl.o                      492                 8
    -----------------------------------------------------
    Total:                        2 482                29
    
drivers_cc26xxware.arm3: [7]
    I2C.orm3                         80        2        4
    I2CCC26XX.orm3                1 128       20       20
    PINCC26XX.orm3                  956               220
    UART.orm3                        80
    UARTCC26XX.orm3               1 812       40       16
    -----------------------------------------------------
    Total:                        4 056       62      260

m7M_tl.a: [8]
    DblAdd.o                        232
    DblCmpEq.o                       32
    DblCmpGe.o                       46
    DblCmpLe.o                       46
    DblDiv.o                        598
    DblMul.o                        418
    DblSub.o                        384
    DblToI32.o                       88
    I32ToDbl.o                       48
    pow.o                         2 128
    xdint.o                         122
    xdnorm.o                         66
    xdscale.o                       268
    xdtest.o                         50
    xexp.o                          700
    xlog.o                          172
    -----------------------------------------------------
    Total:                        5 398

rt7M_tl.a: [9]
    ABImemclr.o                       6
    ABImemclr4.o                      6
    ABImemcpy_unaligned.o           118
    ABImemset.o                     102
    ABImemset48.o                    58
    I64DivMod.o                     238
    I64DivZer.o                       2
    XXexit.o                         12
    data_init.o                      40
    lz77_init.o                     450
    memcmp_unaligned.o               98
    strchr.o                         22
    strlen.o                         54
    zero_init3.o                     64
    -----------------------------------------------------
    Total:                        1 270

sysbios.arm3: [10]
    BIOS.o                       10 548                28
    m3_Hwi_asm_iar.obj              272
    m3_Hwi_asm_switch_iar.obj       104
    m3_TaskSupport_asm_iar.obj      108
    -----------------------------------------------------
    Total:                       11 032                28

由于这些库不再积极开发、我认为可以通过将其中一些库放置在应用外部来节省一些空间。 是否可以通过任何方法将这些代码中的某些代码移动到闪存中的固定位置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel、您好!

    我目前没有太多的建议。  您可以尝试将 drivers_cc26xxware (i2CCC26XX.c/h、PINCC26XX.c/h、uart.c/h (来自 tirtos_cc13xx_cc26xx_2_21_01_08\products\tidrivers_cc13xx_cc26xx_2_21_01_01\packages\ti\drivers_  我尚未对此进行进一步的测试、因为 CC2630 TIMAC/Z-Stack 解决方案已被弃用。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这比我意识到的要容易得多、并且比 TIMAC/TIRTOS 的解决方案更像是一个 IAR 解决方案。 IAR 链接器在链接器配置(.ICF)文件中支持以下语法:

    place in REGION { readonly object BIOS.o };

    这对于长期项目来说可能行不通、尤其是当链接器正在利用这些对象优化函数、而我的应用中的新代码可能会更改这些对象时。 如果情况变成了这种情况、答案就返回到修改源代码、如此处的 https://www.iar.com/knowledge/support/technical-notes/linker/how-do-i-place-a-group-of-functions-or-variables-in-a-specific-section/所述。

    在任一种情况下、连接器通过修改代码并手动放置每个函数或者通过在链接时逐个文件放置它们来支持此功能(即使是 IAR 提供的.A 文件也是如此)。