我正在寻找在 WindRiver C 编译器(AKA Diab C (?))中禁止指令重新排序的正确且可接受的方法。问题是我必须在同一个函数中多次写入硬件寄存器,并且我不希望优化器重新排序序列或更糟,将多个写入收集到一个中。请不要推荐“volatile”,因为我不想依赖这个无形且不可靠的先决条件(主要是因为定义可能不在我的控制之下)。我目前正在使用一个空的内联汇编语句:
asm volatile (" ");
作为代理,因为编译器文档说这将防止重新排序,OTOH 也许有一种更常见的方式,每个 WindRiver C 的体面用户都应该知道。
提前致谢