项目中设计了一个简单的双核通信机制:DSP->ARM的通信;
1、在共享内存地址0x80000000的地址分配给一个事件通知的结构体:
typedef struct tagCoreInterCNotify_t
{
uint8_t bAckFlag; // ACK enable or disable and as interrupt flag. EN_NOTIFY_ACK
uint8_t bEvent; // Event number. if the event have no data,please do not care next config
uint16_t wDataLen; // Data len<=2000(byte). fill "0" if this event have no data
void* pDataAddr;
}CoreInterCNotify_t;
2、然后在0x80000020开始的2K地址范围内用来传输数据;
3、当DSP需要发送数据给ARM时,先通过中断SYSCFG_CHIPSIG_CHIPSIG0通知ARM,并将CoreInterCNotify_t结构体中bAckFlag的标志置位;
4、ARM 端读取数据(通过内存映射读取0x80000000的CoreInterCNotify_t结构体获取事件等相关信息,让后再将0x80000020处的数据拷贝出来);
5、ARM 端读取完数据后将CoreInterCNotify_t结构体中bAckFlag的标志清除;
问题:如果当DSP需要发送数据给ARM时不检查bAckFlag的标志是否被清除,工作正常。但是只要检查bAckFlag标志,ARM 端能收到中断但是读出
CoreInterCNotify_t结构体中的数据就不正确。
感觉像是是要DSP端和ARM端都读取这段数据就不行!!!按道理DSP端读取和ARM读取不是同时的,都是先查询标志OK后才触发中断的。而且
在硬件生这块共享内存应该没有显示吧?还请各位给予解答,谢谢!!