工具与软件:
大家好!
我正在处理 M4内核与 A53内核之间的 IPC。 我使用 MCU+SDK v10为 M4内核开发 IPC + SPI 应用。 在集成这两个应用(这两个应用都已单独测试并发现正常工作)的同时、我发现给定的 DDR 大小不足以满足要求、因此我必须将其增加。
我找到了以下文档、但在 进行建议的修改后无法解决该问题。
由于涉及到 IPC、A53侧是否也应进行任何更改? 附加 sysfs 和链接器文件(不工作、上面链接建议的更改已完成)以供参考。
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.
工具与软件:
大家好!
我正在处理 M4内核与 A53内核之间的 IPC。 我使用 MCU+SDK v10为 M4内核开发 IPC + SPI 应用。 在集成这两个应用(这两个应用都已单独测试并发现正常工作)的同时、我发现给定的 DDR 大小不足以满足要求、因此我必须将其增加。
我找到了以下文档、但在 进行建议的修改后无法解决该问题。
由于涉及到 IPC、A53侧是否也应进行任何更改? 附加 sysfs 和链接器文件(不工作、上面链接建议的更改已完成)以供参考。


/*确保下面的 retain 位于您的链接器命令文件中、它将矢量表保留在最终的二进制文件中*/
--retain="*(.vectors )"
/*这是在 main ()中运行的代码所使用的堆栈。
*在 NORTOS 的情况下,
*-这意味着 ISR 之外的所有代码都使用这个堆栈
*对于 FreeRTOS
*-这意味着在 main ()中调用 vTaskStartScheduler ()之前的所有代码
*使用此堆栈。
*-在 vTaskStartScheduler ()之后,在 FreeRTOS 中创建的每个任务都有自己的堆栈
*/
-- stack_size=16384.
/*这是 NORTOS 和 FreeRTOS 中 malloc () API 的堆大小
*这也是 FreeRTOS 中由 pvPortMalloc 使用的堆
*/
-- heap_size=32768
部分中)
{
/*这有 M4F 入口点和矢量表、必须位于0x0 */
.vectors:{}palign (8)> M4F_VECS
.text:{}palign (8)> M4F_IRAM /*这是代码所在的位置*/
.bss:{}palign (8)> DDR_1 /*这是未初始化的全局变量 Go */的位置
RUN_START (__BSS_START)
RUN_END (__BSS_END)
.data:{}palign (8)> DDR_1 /*这是初始化全局变量和静态 go */的位置
.rodata:{}palign (8)> M4F_IRAM /*这是 const 的 go 的位置*/
.sysmem:{}palign (8)> M4F_IRAM /*这是 malloc 堆进入的位置*/
.stack:{}palign (8)> M4F_IRAM /*这是 main ()栈的位置*/
组{
/*这是 Linux 用来知道 IPC"VRINGs"所在位置的资源表*/
.resource_table:{}palign (4096)
}> DDR_IPC_resource_table_linux
/* C++项目所需的部分*/
.arm.exidx:{}palign (8)> M4F_IRAM /* C++异常处理需要*/
.init_array:{}palign (8)> M4F_IRAM /*包含在 main 之前调用的函数指针*/
fini_array:{}palign (8)> M4F_IRAM /*包含在 main 之后调用的函数指针*/
/*仅在启用 IPC RPMessage 时使用、否则不使用*/
.bss.ipc_vring_mem (NoLoad):{}> DDR_IPC_VLING_RTOS
}
小程序
{
M4F_VECS : origin = 0x00000000 , length = 0x00000200
M4F_IRAM : origin = 0x00000200 , length = 0x0002FE00
m4f_dram:origin = 0x00030000、length = 0x00010000
/*当使用多核应用程序时、即多个 R5F/M4F 处于活动状态、请确保
*该存储器不与 R5F 重叠
*/
/*当 M4内核使用 Linux 提前引导时、资源表必须置于 DDR_IPC_resource_table_linux 的开头*/
DDR_IPC_resource_table_linux:origin = 0x9CC00000、length = 0x1000
DDR_1:origin = 0x9CB00000、length = 0x100000
DDR_IPC_VLING_RTOS:origin = 0x9C800000、length = 0x00300000
}
您好!
我很抱歉这么晚才答复。 该应用至少需要2MB 的 DDR。
我们在尝试构建代码时收到以下错误:
说明资源路径位置类型
#10099-D 程序将无法装入可用内存中、或者该段包含的调用站点需要无法为此段生成 trampoline。 针对段".stack"大小0x4000运行带对齐的放置失败。 可用的存储器范围:linker.cmd /ipc_rpmsg_echo_linux_am62x-sk_m4fss0-0_freertos_ti-arm-clang line 32 C/C++问题
说明资源路径位置类型
#10099-D 程序将无法装入可用内存中、或者该段包含的调用站点需要无法为此段生成 trampoline。 针对段".sysmem"大小0x8000运行带对齐的放置失败。 可用的存储器范围:linker.cmd /ipc_rpmsg_echo_linux_am62x-sk_m4fss0-0_freertos_ti-arm-clang 行31 C/C++问题
目前、我们正在将.bss 和.stack 段移至 IRAM 来构建程序。 但我们计划在代码中添加更多特性、这些特性可能需要比给定的更多的存储器。
希望得到响应、
亚伦
大家好、Aaron:
您可以根据内存布局指南增大内存大小。
请参阅 https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/latest/exports/docs/api_guide_am62x/MEMORY_MAP.html 以了解存储器信息。
您可以将以下区域用于代码、该区域配置了3MB 的 DDR 存储器、足以满足上述要求。
DDR_2 : ORIGIN = 0x9CC01000 , LENGTH = 0x300000
请告知我们上述解决方案是否有效。
此致、
Tushar