IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0; void core0_main(void) { …… IfxCpu_emitEvent(&g_cpuSyncEvent); IfxCpu_waitEvent(&g_cpuSyncEvent, 0xFFFFFFFF); …… } void core1_main(void) { …… IfxCpu_emitEvent(&g_cpuSyncEvent); IfxCpu_waitEvent(&g_cpuSyncEvent, 0xFFFFFFFF); …… } #define IFX_CFG_SSW_ENABLE_TRICORE0 (1U) #define IFX_CFG_SSW_ENABLE_TRICORE1 (1U) #define IFX_CFG_SSW_ENABLE_TRICORE2 (0U) #define IFX_CFG_SSW_ENABLE_TRICORE3 (0U) #define IFX_CFG_SSW_ENABLE_TRICORE4 (0U) #define IFX_CFG_SSW_ENABLE_TRICORE5 (0U)
使能了TC397的core0和core1, 运行发现程序卡在IfxCpu_waitEvent()函数的超时等待中,发现是因为core0执行该函数IfxCpu_emitEvent(&g_cpuSyncEvent)生效了,bit0被置位了,但是core1没有生效,g_cpuSyncEvent的值一直是0x01, 从而导致两个核都一直在等待同步。但是,单步调试运行两个core都能执行成功,g_cpuSyncEvent=0x03,有同学知道是啥原因吗?
看map文件g_cpuSyncEvent变量在DSPR0中,正好在最开头,地址是0x7000 0000。