2012-05-22 141 views
0

我试图实现ARM/DSP共享内存通信。 ARM端在共享内存上放置一个数据块(let'sa将其命名为array []),并将该块的地址和大小发送到DSP端,然后再读取它们。 在DSP侧,C中的void指针传递结构

void * buf //address of block on shared memory 
int length //size of block 

但是当我尝试阅读我所得到的居然是:

buf[0] = length 
buf[1] = array[1] 
buf[2] = array[2] 
buf[3] = array[3] 
    : 
    : 
    : 

看起来好像长度可变overights数组的第一个单元格(这是有点奇怪),或者我错误地使用了void指针。 有什么建议吗?

+0

可以显示PROC,您发送这些数据?你如何发送阵列单元的地址,长度和最大尺寸? – theWalker

+0

由于它是一个使用内置API的整个DSP/BIOS LINK实现,因此很难描述该过程。 ARM端使用Pool_writeback()函数发送数据,并将地址从POOL_translAddr()从一个地址空间转换为另一个地址空间。发送给DSP的是块的起始地址,它的长度和它们分别存储到buf和长度。链接似乎工作正常(测试“int buf”)。这种使用虚空是否可以接受?如果buf [1]具有正确的值,并且buf [0]具有在buf后面直接分配的变量,那么可能是我的C代码中的错误? – user1410966

+0

你的代码“buf [3] = array [0]”是错误的(buf [3] = array [2])还是不是? – theWalker

回答

0

我认为,该数据结构是:

buf[0] = length 
buf[1] = array[0] 
buf[2] = array[1] 
: 
buf[length] = array[lenght-1] 

,你必须预留缓冲区,用于lenght + 1

+0

如果是关于分配内存,那么我可能会遇到数组尾部的问题,而不是开始吧? Buf应该指向数组而不是长度变量。 发送的存储器块是 结构{ INT行 INT COLS int数组[200] } datastr ,其具有202个整数的长度的结构。 808字节。 而且,由于datastr的地址被存储到BUF 不应buf绝对[0] =行 BUF [1] = COLS BUF [3] =阵列[0] ... 代替BUF [0] = <与行不相关的东西> buf [1] = cols ... ? – user1410966

+0

我认为我的想法是在代码领域的答案 – theWalker