Memory 在C中通过void指针传递结构

Memory 在C中通过void指针传递结构,memory,pointers,struct,allocation,void,Memory,Pointers,Struct,Allocation,Void,我正在尝试实现ARM/DSP共享内存通信。ARM端将一个数据块放在共享内存中(我们将其命名为array[]),并将该数据块的地址和大小发送给DSP端,DSP端只读取这些数据块。 在DSP方面 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[

我正在尝试实现ARM/DSP共享内存通信。ARM端将一个数据块放在共享内存中(我们将其命名为array[]),并将该数据块的地址和大小发送给DSP端,DSP端只读取这些数据块。 在DSP方面

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]
    :
    :
    :
看起来似乎length变量覆盖了数组的第一个单元格(这有点奇怪),或者我用错了void指针。
有什么建议吗?

我认为,数据结构是:

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

您必须为长度+1保留buf

您能显示proc吗,您将数据发送到哪里?如何发送地址、长度和阵列单元的大小?很难描述该过程,因为它是使用内置API的整个DSP/BIOS链接实现。ARM端使用Pool_writeback()函数发送数据,地址从Pool_translAddr()从一个地址空间转换到另一个地址空间。发送到DSP的是块的起始地址及其长度,它们分别存储为buf和length。该链接似乎工作正常(测试为“intbuf”)。使用void是否可以接受?如果buf[1]的值正确,而buf[0]的变量直接分配在buf之后,这可能是我的C代码中的错误吗?在你的代码“buf[3]=array[0]”中,这是错误(buf[3]=array[2])还是错误?如果是关于分配内存,那么我可能会在数组的结尾而不是正确的开头出现问题?Buf应该指向数组,而不是长度变量。发送的内存块是struct{int rows int cols int array[200]}datastr的结构,其长度为202个整数。808字节。由于datastr的地址存储到buf,因此不应该buf[0]=rows buf[1]=cols buf[3]=array[0]。。。而不是buf[0]=buf[1]=cols?