【发布时间】:2012-05-22 18:58:16
【问题描述】:
我正在尝试实现 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]
:
:
:
看起来好像长度变量覆盖了数组的第一个单元格(这有点奇怪),或者我以错误的方式使用了 void 指针。 有什么建议吗?
【问题讨论】:
-
你能显示 proc,你把这些数据发送到哪里?你如何发送地址、长度、数组单元格的大小?
-
这个过程很难描述,因为它是一个使用内置 API 的完整 DSP/BIOS LINK 实现。 ARM 端使用 Pool_writeback() 函数发送数据,并将地址从 POOL_translAddr() 从一个地址空间转换到另一个地址空间。发送到 DSP 的是块的起始地址和长度,它们分别存储在 buf 和 length 中。该链接似乎工作正常(针对 "int buf" 进行了测试)。这种使用 void 可以接受吗?如果 buf[1] 具有正确的值并且 buf[0] 具有直接在 buf 之后分配的变量,那可能是我的 C 代码中的错误吗?
-
在你的代码“buf[3] = array[0]”中它是不是错误(buf[3] = array[2])?
标签: memory pointers struct allocation void