TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
Susan Yang:根据您的说明,您现在是可以在CPU2运行程序的?
双核的话,需要给CPU2引导命令。
#ifdef _STANDALONE
#ifdef _FLASH
// Send boot command to allow the CPU02 application to begin execution
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
#else
// Send boot command to allow the CPU02 application to begin execution
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM);
#endif
#endif
另外您现在变量是放在哪里?能否给出cmd文件?还有其他什么问题?
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
user5924858:
回复 Susan Yang:
您好,CPU2可以运行程序,设置断点的话可以运行到指定地方,我把变量放在中断中执行了,我的CMD文件是加密的,是想从CMD查什么东西吗,谢谢!
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
Susan Yang:
回复 user5924858:
您CPU2变量是否在RAMGSx 中(地址0xC000 – 0x1BFFF)?如果是这样,您需要通过CPU1写入GSxMSEL寄存器来提供CPU2的主控权。
有关详细信息,请参见TRM的3.11.1.3 Global Shared RAM (GSx RAM)
www.ti.com/…/spruhm8h.pdf
When a particular GSx RAM block is owned by the CPU1 subsystem, CPU1 and CPU1.DMA have full access to that RAM block, whereas CPU2 and CPU2.DMA have only read access to it (no fetch/write access).
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
user5924858:
回复 Susan Yang:
您好,我先按您说的执行检查,根据您好的有两个问题:1.怎么确定我定义的量是否在RAMGSx中?2.如何通过CPU1写入GSxMSEL寄存器?谢谢!
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
Susan Yang:
回复 user5924858:
所以要看一下您的cmd文件
关于问题2,您可以看一下 GSxMSEL寄存器
3.15.18.18 GSxMSEL Register (Offset = 44h) [reset = 0h]
Master select and access protection configuration for each GSx RAM block can be individually locked by the user to prevent further update to these bit fields. The user can also choose to permanently lock the configuration to individual bit fields by setting the specific bit fields in the GSxCOMMIT register (refer to the register description for more details). Once configuration is committed for a particular GSx RAM block,
it can not be changed further until CPUx.SYSRS is issued. Only the CPU1 SW can change the master select configuration by writing into the GSxMSEL register, mapped on the CPU1. The GSxMSEL register, which is mapped to the CPU2 subsystem, is a status register which can only be used by CPU2 SW to know the master ownership for each GSx RAM block.
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
user5924858:
回复 Susan Yang:
您好,根据您的指导,我确定了该变量在全局RAM中的位置,并且对寄存器GSxMSEL进行了修改(赋值为1),但结果仍然不对,请看图片
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
user5924858:
回复 Susan Yang:
您好,我把GSxMSEL寄存器的低16位全部置为1,然后问题解决了,谢谢您的指导,但还有一点疑问:RM的3.11.1.3 Global Shared RAM (GSx RAM)里面有这样一句话:Emulation/Debugger access is allowed from both the CPUs, irrespective of the GSxMSEL
setting.我理解的是在仿真模式下,两个cpu均可以对GSxRAM进行读写操作,我现在就是在仿真模式下,为啥还得对GSxMSEL寄存器进行操作?谢谢!
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
user5924858:
回复 Susan Yang:
您好,谢谢您的及时回复指导,问题貌似解决了。
TI工程师您好,遇到一个棘手的问题:双核工程,两套CPU共用一套源代码,当运行CPU2时,运行结果不正确,举个简单的例子,CPU2给一变量赋一初值,但运行结果显示该变量一直为0,另外单步运行也可以运行到赋值处,请指点!
Susan Yang:
回复 user5924858:
很高兴能帮到您