刚接手一个程序,现象是:每次仿真器下载程序之后,程序没有运行起来;但断电再上电之后,正确运行。
于是我就在线仿真查看,为什么下载程序后运行不起来?
有了如下发现:
我在cpu1的初始化语句中执行IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH),这个函数里面有句话:

经测试程序在红色框中死循环,函数原型为蓝色框中,也就是说IPC_BOOTSTS一直是0,不是C2_BOOTROM_READY(这个宏定义官方值为2)
现在卡死原因知道了,查阅手册说:

也就是IPC_BOOTSTS是由cpu2定义的,我就查cpu2的初始化语句,发现在cpu2初始化时IPC_BOOTSTS被初始化为0,除此之外再无任何其他对IPC_BOOTSTS的操作
我有如下疑问:
(1)我可以在cpu2初始化时将IPC_BOOTSTS赋为2,从而避免cpu1在while中死循环,程序也跑起来了,但这样总觉得显得有点“为了解决问题而进行的临时措施的意味”。
我想知道,IPCBootCPU2的本意是由cpu1控制cpu2的boot,但如果我通过gpio已经单独控制了cpu2的boot,是否就必须 在cpu2初始化时将IPC_BOOTSTS赋为2从而避免死循环呢?
(2)我想知道本身的程序,也就是cpu2初始化时IPC_BOOTSTS被初始化为0时,为何断电再上电,程序能正常跑起来呢?为什么进入while死循环的条件达成却没有进入死循环呢?而下载程序后死循环了?
(3)C2_BOOTROM_READY,这个宏定义官方值为2,这个2是从何而来的呢?为什么不是1,3?
谢谢。
