TI中文支持网
TI专业的中文技术问题搜集分享网站

arm和dsp内存访问冲突问题?

Arm和运行linux系统,dsp核运行ti-rtos系统,系统中有一块共享的内存如:0x95800000,范围1MB。DSP对此内存启用了cache。假设有如下结构体:

 typedef union
 {
  struct
  {
   volatile UINT32 ptrSender;//64~1M
   volatile UINT32 ptrReader;//64~1M
  };
  volatile UINT32 CtrlHdr[16];
 } AmMsgCtrl;

定义在内存0x95800000位置。

权限定义:

1、ARM对ptrReader有读、写权限,对ptrSender只有读权限;

2、DSP对ptrSender有读、写权限,对ptrReader只有读权限;

消息通讯:

1、DSP有新消息发给ARM时,修改ptrSender指针,同时对ptrSender和消息存放区使用cache_writeback函数,然后使用MsgQ通知ARM有新数据;

2、ARM接收到MsgQ通知后,读取ptrSender、ptrReader指针(打印此两指针的值),然后判断这两个指针来处理消息,当消息处理完成后,ARM修改(递增)ptrReader(通过打印消息看,ptrReader已经修改了),然后等待新的MsgQ通知。

出现的问题:

1、ARM接收到MsgQ通知后,打印ptrSender、ptrReader指针的值,出现ptrReader值回退现象,明明上次递增后打印的ptrReader已经改变,但是此时打印的ptrReader比上次打印的值小;而ptrSender值是一直正常递增的。

请问怎么确保ARM修改的值真实的写到内存?怎么解决这个异常问题?

2、DSP发送的消息比较频繁时,以上错误出现的几率比较大。难道是DSP使用cache_writeback时对ptrSender(dsp不会修改此指针)指针有影响?

Kevin Le82:

使用的是AM5728,ccs6.13

Kevin Le82:

回复 Kevin Le82:

各位专家请教一下:关于cache的操作,比如cache line是64字节的,我只修改了里面的int整形的4个字节,如果这时候调用cache写回,cpu写回时是将整个cache line的64字节写回还是只写回修改的4字节

Kevin Le82:

回复 Shine:

cache line是一次性写回,所以多核操作是需要小心

赞(0)
未经允许不得转载:TI中文支持网 » arm和dsp内存访问冲突问题?
分享到: 更多 (0)