omapl138双核通信_OMAPL138双核通信中遇到共享内存访问问题;

项目中设计了一个简单的双核通信机制: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后才触发中断的。而且

在硬件生这块共享内存应该没有显示吧?还请各位给予解答,谢谢!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值