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.
美好的一天
我有两个应用程序运行在内核0-0 (main)和1-0 (substable)上,并且彼此通信。
从主内核0-0停止内核1-0 (卫星)应用程序的正确方法是什么?
假设在内核1-0停止后、主内核将执行必要的作业、并且整个系统将重新启动。
谢谢!
您好、Volodymyr:
由于两个内核独立运行;我认为没有办法可以从 R5F_0_0中停止 R5F_1_0。 正确的方法是使用 IPC 在两个内核之间同步。 如果 R5F_0_0想要停止/重新启动 R5F_1_0、只需发送 IPC 消息/通知。 R5F_1_0将执行 R5F_0_0要求它执行的任何操作。
请参考 IPC 示例: ipc_notify_echo_am263x-cc_system_freertos_nortos 和
以了解详细信息。
此致、
明
感谢您的答复、但问题不是关于 IPC 的。 启动并运行 IPC。 我没有看到显式 API 在 SDK 中停止内核。
我的问题是应该执行哪些操作来正确地停止内核?
您好、Volodymyr:
停止内核意味着什么? 您可以执行 while 循环或 WFI (等待中断)
您可以通过 IPC 执行以上任一操作、对吧?
此致、
明
你好 Ming
我认为如果 SDK 具有 unhalt API SOC_rcmCoreR5FUnhalt (),那么应该是反向的,以便停止内核。
我的目标是停止在卫星核心上执行并实现0消耗-我不确定我是否能获得与 while (1)循环相同的结果
或者将卫星内核恢复到初始状态-我理解引导加载程序会采取一些操作来准备多核应用程序以在不同的内核上运行,或者我漏掉了一些内容?
您好、Volodymyr:
根据 AM263x TRM、您可以通过将 R5SS*_CORE*_HALT 寄存器设置为0x7来停止 R5F 内核:
您当然可以尝试它。
此致、
明
你好 Ming
我尝试了这种方法、但没有任何效果。 此外、AM263x TRM 文档指出该寄存器只能写入一次。
不管怎样、我现在决定继续使用依赖于 IPC 消息的解决方案、以通知特定内核停止并执行命令序列:
Hwip_disable ();
_isb();
_dsb();
while (true)__ asm__ volatile ("wfi");
WFI 命令会在 while 循环内保持 、以防止在调试活动期间发生转义。
我已将您的上述建议标记为解决方案。 如果您在我的实施过程中发现任何问题、请随时发表评论。
谢谢!
我试过这种方法,但没有任何效果。 此外、AM263x TRM 文档还指出此寄存器只能写入一次。
您是否检查了寄存器是否已解锁? 您可以使用 SDK API 来执行此操作-
SoC_controlModuleUnlockMMR (SOC_DOMAIN_ID_MAIN、TOP_RCM_PARTIION0);
希望它有所帮助。
此致、
Aakash
您好,Aakash
感谢您的建议。 它确实对写入寄存器有帮助、但我没有注意到任何 其他影响(至少在连接调试器时)。
我假设在内核暂停后在调试器中获取内核状态。 我看到内核在 while (true/true)__asm_volatile ("wfi");语句上运行、而不是在该语句中运行。
下一个问题是、内核停止的情况下、我可以重复使用卫星内核 RAM 空间吗?
谢谢!
您好、Volodymyr:
当另一个内核处于 WFI 中时、它可以由包括 IPC 中断在内的任何中断唤醒。 我的建议是、您可以使用 IPC Notify 将其唤醒。
此致、
明
你好 Ming
您没有回答上述问题-我的目标是正确停止卫星核心并重复使用其 RAM 区域。 我将在进入 WFI 循环之前禁用中断(上面的代码片段)
谢谢!
尊敬的 Volodymr:
您应该能够使用以下地址从 R5F0_0访问 R5F0_1中的 TCMA 和 B。
此致、
明