工具与软件:
尊敬的 Fellas:
我为 F28388D 实现了多核引导加载程序。
每个内核都有自己的引导加载程序。 CPU1是主引导加载程序。 它通过使用 Device_Boot U2()和 Device_Boot (452)激活其他核心引导加载程序、使其与 IP_Sync()同步
IPC 机制交换数据。
我修改了 Matlab C2000 Blockset 使用的链接器脚本、然后通过引导加载程序写入该程序的特定闪存内核。
我尝试测试一些可能的 scneario。
-> CPU1、CPU2和 CM 有引导加载程序。CPU1、CPU2和 CM Matlab 应用程序扇区为空。 我成功地将 Matlab 生成的程序写入 CPU1扇区、然后 CPU1引导加载程序跳过
CPU1 Matlab 程序入口点。 它运行没有任何问题。 假设用户无意中删除 CPU2引导加载程序、在上电/下电周期后。
CPU1 Matlab 程序无法正常运行。 我还删除了 CPU1上的 IPC_SYNC (IPC_CPU1_L_CPU2_R、IPC_FLAG31)、但此设置不起作用。
1) CPU1 Matlab 程序无法正常运行的问题是什么?
2)如何从 CPU1端确定 CPU2特定扇区是否有程序?
此致。
CPU1引导加载程序:扇区0-1.
CPU1 Matlab Application : Sector 2-13.
CPU2引导加载程序:扇区12-13.
CPU2 Matlab 应用程序:扇区0-11.
CPU1引导加载程序端 ı 使用。
// Boot CPU2和 INITIALIZE
DEVICE_BOOTCPU2 (BOOTMODE_BOOT_TO_FLASH_SECTOR13);
IPC_clearFlagLtoR (IPC_CPU1_L_CPU2_R、IPC_FLAG_ALL);
IPC_SYNC (IPC_CPU1_L_CPU2_R、IPC_FLAG31);
//在跳过 CPU1 Matlab 入口点之前。 复位内核、然后跳转。
SYSCTL_controlCPU2Reset (SYSCTL_CORE_ACTIVE);
while (sysctl_isCPU2Reset ()!= 0x1U);
(* Jump_Entry_Point)();