工具与软件:
您好!
我们使用的是 MCU PLUS SDK 09.01、CCS 12.5和 tiarmclang LTS 3.2.0、我也使用 LTS 3.2.2尝试此功能、因为存在这个问题: https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1341376/mcu-plus-sdk-am243x-combination-of-__attribute__-weak-and-section-produces-two-symbols/5151847?tisearch=e2e-sitesearch&keymatch=%252520user%25253A453845#5151847
因此、想法是仅使用我们自己的中断处理程序、而不是 SDK 的中断处理程序。 我的第一个尝试是声明 sdk-abort-handler 为 weak。 过去或现在都存在问题、我们在上面的链接中处理了该问题。 toolchain-update 没有解决此问题。 遗憾的是、弱符号没有以某种方式被覆盖、具体取决于 project-link-order。 我们的解决方案是删除这些中止处理程序符号。 这是不可能的、如此处的相关主题中所述。
替代方法是重命名它们、但它们将保留在编译中。 但到目前为止、我们的异常中断处理程序被调用了。 我们将其重命名为中止处理程序的名称+"_unused"。
我们按以下方式对符号进行了重命名:
tiarmobjcopy --redefine-sym HwiP_reserved_handler=HwiP_reserved_handler_unused --redefine-sym HwiP_undefined_handler=HwiP_undefined_handler_unused --redefine-sym HwiP_prefetch_abort_handler=HwiP_prefetch_abort_handler_unused --redefine-sym HwiP_data_abort_handler_c=HwiP_data_abort_handler_c_unused <path_to_sdk_libs>/freertos.am243x.r5f.ti-arm-clang.release.lib
我们仅使用静态编译的 SDK-library 来重命名符号。 这是唯一链接到我们目标的库、因此任何符号都不可能以某种方式重新出现。
CCS 仍然存在问题:
CCS 显示旧的和新的异常中断处理程序:
我们的目标是以":"开头的目标。 请注意、错误地址为0xA52! 这一点很重要。
但这没有任何意义。 只有中止处理程序符号出现在映射文件和 readelf 中。 也会出现"_unused"符号:
在映射文件中:
但地址0x00000A52处的任何符号都没有定义。 仍然、如果我单击这里、它将打开 sdk-c-file:
另一方面、如果您看一下分解、对于该0xA52-address、它会正确显示未使用的符号?!
我们还注意到、当我们从闪存启动并运行中止时、CCS 会准确显示这个"错误"函数、它在编译中不是可用的符号。 我们对这种情况如何发生感到困惑。
在 SDK 中删除处理程序并在 CCS 中正确显示处理程序的正确方法是什么? 还是从一开始就出现了问题?
此致
Felix