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.

[参考译文] AM263P4:多核项目问题

Guru**** 2689775 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1590030/am263p4-multi-core-project-questions

器件型号: AM263P4
主题: SysConfig 中讨论的其他器件

您好、

我有几个关于多核项目的问题。

  1. AM263 MCU+ SDK 中的“空“示例对四个 R5 内核中的每一个使用相同的源代码 (main.c 和 empty.c)。 这一切都很好;但是 main.c 会调用多个板初始化函数、如 System_init () 和 Board_init ()。 对我来说,这意味着 System_init () 和 Board_init () 由每个 R5 内核调用,这意味着 System_init 将被调用四次。 这是有意的吗?
  2. 在多核 SysConfig 视图中、似乎有多个地方可以设置 MPPA。 第一个位置是在 DPL->MPU ARMv7 中、您可以在其中创建 MPU 区域并为这些区域设置 MPPA。 第二个位置是内存配置器->内存区域、您可以在其中设置给定内存区域内的属性 (MPPA)。 我的问题是、其中哪些优先? 例如、如果我在存储器配置程序中声明一个存储器区域、起始地址为 0x0、长度为 0x40 和 RWX 权限、并且我在 MPU ARMv7 中声明一个起始地址为 0x0、长度为 32 B、以及“Supervisor Block、User Block“权限、那么哪个权限设置优先? 我可以写入和读取 0x0 吗?
  3. 对于 MPU 区域、当不同的内核创建具有不同权限的重叠 MPU 区域时会发生什么情况? 我的理解是、MPU 通过传输的权限 ID 来区分不同的启动器(内核);这是否意味着 SysConfig 中的 MPU 区域特定于内核? 另外、似乎可以在同一内核中为具有不同权限的 MPU 区域创建重叠。 例如、我可以创建起始地址为 0x0、长度为 32B 且具有用户/主管 RW 权限的“CONFIG_MPU_REGION_0"。“。 然后、我可以创建起始地址和长度相同但无 RW 权限的“CONFIG_MPU_REGION_1"。“。 在这种情况下、哪个区域优先? TRM 指出:“换句话说、最终权限是任何命中范围内每种类型的权限中最低的。“ 这是否意味着如果 SysConfig MPU 区域重叠、则具有最低权限的区域将优先?
  4. TRM 指出“该器件中 MPU 的粒度为 1KB“;但是、SysConfig 允许粒度低至 32B。TI 如何处理这种不一致情况? 如果我创建了一个 32 B MPU 区域、我实际上是在幕后创建一个 1KB 区域、还是我误解了 TRM?

感谢您的帮助、

Jared Weyer

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

    有任何输入?

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

    您好 Jared。

    对延迟响应表示歉意。

    AM263 MCU+ SDK 中的“空“示例针对四个 R5 内核中的每一个使用相同的源代码 (main.c 和 empty.c)。 这一切都很好;但是 main.c 会调用多个板初始化函数、如 System_init () 和 Board_init ()。 对我来说,这意味着 System_init () 和 Board_init () 由每个 R5 内核调用,这意味着 System_init 将被调用四次。 这是否有意?

    是的、所有内核都将从自己的 main.c 文件中调用 System_init () 和 Board_init () API。 没有真正的重复重新配置线程、因为 SYSCFG 主要会阻止您以重复方式使用资源。 一个建议是始终从系统工程中打开 example.syscfg 文件、而不是专门打开它的内核、以便 syscfg 可以突出显示重复的资源使用情况。

    对于 MPU configs 等其他资源、它们是特定于内核的。 您执行的 MPU ARMv7 配置对应于 R5F 内核。

    在多核 SysConfig 视图中、似乎有多个位置可以设置 MPPA。 第一个位置是在 DPL->MPU ARMv7 中、您可以在其中创建 MPU 区域并为这些区域设置 MPPA。 第二个位置是内存配置器->内存区域、您可以在其中设置给定内存区域内的属性 (MPPA)。 我的问题是、其中哪些优先? 例如、如果我在存储器配置程序中声明一个存储器区域、起始地址为 0x0、长度为 0x40 和 RWX 权限、并且我在 MPU ARMv7 中声明一个起始地址为 0x0、长度为 32 B、以及“Supervisor Block、User Block“权限、那么哪个权限设置优先? 我可以写入和读取 0x0 吗?

    您设置的 ARMv7 MPU 属性用于实际的 R5F 配置并将优先使用、存储器配置器只是一个自动生成 linker.cmd 的工具  

    TRM 规定:“此器件中 MPU 的粒度为 1KB“;但是、SysConfig 允许的粒度低至 32 B。TI 如何处理这种不一致问题? 如果我创建了一个 32 B MPU 区域、我实际上是在幕后创建一个 1KB 区域、还是我误解了 TRM?

    在 syscfg 中配置的 MPU 是 R5F 内核的 ARM MPU 设置。 TRM 所指的 MPU 是 SoC 支持的 AM263Px 系统 MPU。 两者完全不同。 对于系统 MPU、最小粒度为 1KB。 ARM R5F TRM 没有提到有关 R5F 内核的这一点(您可以在 ARM R5F 手册中阅读有关 ARM MPU 设置的更多信息)

    关于 MPU 区域、当不同的内核创建具有不同权限的重叠 MPU 区域时会发生什么情况? 我的理解是、MPU 通过传输的权限 ID 来区分不同的启动器(内核);这是否意味着 SysConfig 中的 MPU 区域特定于内核? 另外、似乎可以在同一内核中为具有不同权限的 MPU 区域创建重叠。 例如、我可以创建起始地址为 0x0、长度为 32B 且具有用户/主管 RW 权限的“CONFIG_MPU_REGION_0"。“。 然后、我可以创建起始地址和长度相同但无 RW 权限的“CONFIG_MPU_REGION_1"。“。 在这种情况下、哪个区域优先? TRM 中指出、“换句话说、最终

    从 syscfg 配置的 ARM MPU 将允许您创建重叠区域、但最后一个修改重叠区域的区域将发生。 例如、如果三个 MPU CONFIG 修改了同一区域、则最后一个配置将生效。 由 syscfg 生成的 MPU 配置由 MppuP_armv7r.c 文件中的 MpuP_init () 函数应用:

    如果问题与 AM263x 的系统 MPU 有关、该权限将使用权限 ID 并为内核配置它(如 TRM 所述)、对于系统 MPU、如果区域重叠、则会发生权限最受限的区域。

    在实践中、通常最好尽可能避免权限冲突的区域重叠

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    感谢您提供的所有信息、这真的很有帮助!

    是否有任何有关 SoC 级 MPU 配置的资源/示例? 我的目标是在 ocsram 的组 5 中添加一个只读 1KB 存储器区域、对于 SoC 中的所有 R5 内核都是只读的。

    谢谢、

    Jared

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

    您可以按如下方式执行此操作:

    1.在 syscfg 中创建一个 ARM MPUv7 区域、例如从 0x70004000 到 0x70004400。 将其标记为只读(主管 RD、用户 RD)。 将此标记为可共享。

    2.接下来,因为您要声明此数组并将其添加到特定的内存位置(可能使用的是类似的 arm 属性)  

    __attribute__(段(“.data_buffer")“)、对齐 (8));
    我们还将在存储器配置器中创建该部分。 因此添加一个新的存储器区域、使该区域的起始地址和大小与点 1 中配置的地址和大小保持一致。
    添加一个新段、  并添加一个输出段(如“data_buffer")“)、然后可以在应用中引用该输出段、以便将缓冲区放置在特定地址的特定存储器中。
    总之、点 1 决定 ARM MPU 配置为只读、点 2 确保我们将其准确地放置在该存储器段中。
    此致、
    Shaunak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很棒! 感谢您的帮助!