我的工作是mips32,gcc编译器与微mips优化.每个核心都有自己的缓存内存。核心A操作系统- ThreadX,核心B os - rtos。我希望将指针和大小从核心A传递到核心B。让我们看看下面的流程:
1. Core A(ThreadX): pass pointer and size to Core B
2. Core B(RTOS): write to pointer size bytes
3. Core B(RTOS): flush(pointer)
4. Core A(ThreadX): pointer cacheInvalidate(pointer)
5. Core A(RTOS): copy from pointer to buffer我工作的地址不对齐,似乎引起了一些意想不到的问题。在传递对齐地址后,我未能再现这些问题。我必须使用对齐地址吗?为什么?如果我将传递未对齐地址,我应该期望什么行为?
发布于 2018-01-03 08:29:14
如果您关心便携C,不要在这么低的级别进行推理。如果不这样做,请查看编译器生成的汇编程序代码(例如,将gcc -O -fverbose-asm -S与GCC结合使用)。
如果你关心一个特定的实现,你应该提到它(编译器和版本,优化标志,操作系统,处理器和品牌)。但要当心未定义行为,做UB的惊慌。
如果使用C:使用C99编写代码,则需要操作系统的支持,例如线程(7) (它使用futex(7))。所以读一个线程教程。使用符合C11的实现(请参阅n1570),您可以使用原子运算和
我必须使用对齐地址吗?
也许是的。您的硬件访问对齐数据的方式与非对齐数据不同(而且更快、更“原子”)。缓存一致性在细节上是特定于特定处理器的。
https://stackoverflow.com/questions/48073612
复制相似问题