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.

[参考译文] AM2434:在 R5 内核之间共享代码/单映像

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1525929/am2434-code-sharing-across-r5-cores-single-image

器件型号:AM2434

工具/软件:

您好、专家、

我们目前正在为 Sitara AM2434 开发多核应用。

由于硬件空间限制、我们使用不带外部 DRAM 的较小封装型号。 据我所知、控制器不支持直接从闪存执行代码、因此每个内核的所有代码和数据都必须驻留在 2MB 片上 SRAM 内。

这使得 RAM 的使用成为我们的一个关键问题。

我们观察到、每个 R5 内核都会构建并加载自己的单独二进制文件、从而将相同代码的多个副本存储在存储器中。  printf() 函数就是一个典型的示例、它包含在每个内核的图像中。

TI 是否支持跨内核共享代码段以避免这种冗余? 从宏观角度来看、全局链接器或构建系统检测和合并共享代码似乎是可行的。

本文档中描述的“单一图像“方法似乎提供了如下建议:
https://www.ti.com/lit/an/sprab27b/sprab27b.pdf?ts = 1749582866208

TI 开发团队对于该主题的任何见解或建议、我将不胜感激。

此致、
Stefan

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

    您好、Stefan:

    控制器不支持直接从闪存执行代码

    我假设您指的是 XIP?

    [引述 userid=“648235" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1525929/am2434-code-sharing-across-r5-cores-single-image

    我们观察到、每个 R5 内核都会构建并加载自己的单独二进制文件、从而将相同代码的多个副本存储在存储器中。  printf() 函数就是一个典型的示例、它包含在每个内核的图像中。

    TI 是否支持跨内核共享代码段以避免这种冗余? 从宏观角度来看、全局链接器或构建系统检测和合并共享代码似乎是可行的。

    [/报价]

    允许其他专家对相同内容进行评论。

    此致、

    Vaibhav

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

    您好、Stefan:

    我们已经观察到每个 R5 内核都会构建并加载自己的二进制文件、从而在存储器中存储多个相同代码的副本。  printf() 函数就是一个典型的示例、它包含在每个内核的图像中。

    我认为内核的应用映像之间的隔离/冗余很重要、因为您可能不希望其中一个内核覆盖其他内核功能。

    假设您在不同的实现中具有相同的函数名称、则可能不希望您的函数被其他内核的功能覆盖。 生成的组合/多核 appimage 将对每个内核使用不同的存储器区域以确保隔离。

    此致、

    Tushar

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

    尊敬的 Vaibhav 和 Tushar:

    感谢您的反馈!

    我完全理解核心映像之间隔离的重要性,尤其是在防止意外覆盖或冲突的情况下 — 尤其是在同名功能在内核之间实现不同的情况下。

    话虽如此、我想在功能完全相同且不依赖于内核特定的存储器或外设的情况下、是否有优化空间。 更高级的链接器可能会分析此类函数、并允许它们在内核之间全局链接。 这有助于消除冗余代码(如的多个副本) printf()、并显著减少内存使用。

    有趣的是、在旧的 TI 芯片上、这种方法似乎是可行的。 指的是  《2012 多核编程指南》第 7.3 章 ,我在我的原始帖子链接. 这表明在某些条件下可以使用共享代码段。

    想听听您对是否可以在当前器件上实施或支持类似功能的想法。

    此致、
    Stefan

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

    您好、Stefan:

    只要每个内核的多核 appimage 的存储器区域不同、出于上述原因、编译器就不会执行任何优化来删除类似函数的冗余定义。

    您能否尝试将类似函数保留在共享存储器位置并更新结果?

    此致、

    Tushar