工具/软件:
您好:
我们使用的是 MCU PLUS SDK 09.02、因为工业通信 SDK 也使用这个 SDK。 我们当前使用的工业通信 SDK 版本是09.02.00.15。
在 George 的帮助下,我发现了如何用我们自己的实现"覆盖"SDK.functions : https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1383392/mcu-plus-sdk-am243x-not-stripping-symbol-x-because-it-is-named-in-a-relocation/5313715?tisearch=e2e-sitesearch&keymatch=%2525252525252520user%252525252525253A453845#5313715
这一直都很好。 因此、一般来说、我们使用自己的实现覆盖了中止处理程序。 具体的工作方式是在我们的应用程序构建中另外提供实现和 SDK 文件(复制的)。 在链接 SDK 时(在本例中为 SDK 的 FreeRTOS 库)、使用了我们的中止处理程序。 我们的实现将调用 c++-code、因此会放在.cpp-file 内(用 extern "C"包围)。
在 SDK 中如下图所示:

如下所示: 
其中"TIABORTImplTIFREERTOS.cpp"包含 Hwip_armv7r_handers_freertos.c-file 的复制代码 (extern "C"周围、并调用 C++代码)。
将.text.hwi 段放置在 TCMA 中、如下所示:
GROUP
{
.text.hwi: palign(8)
} > MCU1_0_TCMA
如前所述、这种方法效果非常好。 但我们注意到、一旦我们直接链接链接链接器脚本中的 FreeRTOS 库、如下所示:
GROUP
{
.code:
{
-l "freertos.am243x.r5f.ti-arm-clang.debug.lib"(.text),
}
} > MCU1_0_SRAM_DATA
整个.text 段也将移动到这里、并且不会放在 TCMA 中、并且我们完整的中止处理程序实现方案也不存在。 它使用 FreeRTOS 库中的一个。 这在映射文件中也很常见。
我们像这样进行了尝试:
GROUP
{
.text.hwi:
{
*(.text.hwi),
} palign(8)
} > MCU1_0_TCMA
但这也不起作用。
只有当我们明确地将其放置如下时、它才会起作用:
GROUP
{
.text.hwi:
{
-l "libti-implementation-mcu1_0.a"(.text.hwi),
} palign(8)
} > MCU1_0_TCMA
我们确保最后按照链接顺序链接 freertos.am243x.r5f.ti-arm-clang.debug.lib。
此行为的解释是什么、是否有方法可以防止在链接器脚本中再次显式链接库? 重点是、包括 SDK 和我们的实现的整个软件包会被多个工程使用、如果 freeRTOS 库明确放置在某个位置、我们不希望修改每个工程中的每个链接器脚本。 我们还尝试尽量减少对 SDK 文件的修改、而是在软件包中提供自己的实现。
此致
Felix
