所以我有一个ARM处理器和一个DSP处理器。一些数据将使用共享内存在这两个处理器之间共享。数据可以包含数据结构,例如C ++的结构和类。哪些事情对于使应用程序使用这种共享内存非常重要。想到的一件事就是字节序,即处理器应该是小端或大端。还有什么其他的东西,这对确保正确的共享内存访问也是必要的吗?
答案 0 :(得分:2)
除了Endianness之外,以下内容可能很重要,
标准API的实施可能会有所不同,并可能对共享数据产生负面影响,例如: ARM上的memcpy()是以一种独特的方式在内部实现的,至少我还记得在将一个RTOS移植到ARM时遇到的困难。我不记得确切的细节,但通过一点搜索肯定能找到。
严格使用由工具链对齐的类型和结构。因为每个体系结构的对齐和填充可能完全不同。因此,如果尝试使用指针/数组索引对结构内的值进行索引,那么您会感到惊讶。
答案 1 :(得分:2)
除了Fayyazki的答案之外,你所描述的安排还有几个额外的障碍。
到目前为止,实现两个处理器之间通信的最简单方法是使用ring buffer,其中写头和尾指针是内存的自然字大小,由写处理器和读取器维护处理器分别。在将数据写入缓冲区并更新磁头指针之后,您将需要屏障(存储器和指令顺序),以确保在更新磁头指针之前由内存观察写入缓冲区。读取工作相反。
答案 2 :(得分:2)
此外,如果两个处理器具有相同内存的不同视图(àla Raspberry Pi),那么在共享数据中使用指针可能很有趣* ...
*用于“fun”的某些给定值