【发布时间】:2010-12-10 21:18:02
【问题描述】:
我希望这个语句(在 if 语句的主体内)是原子的:
if(I2C1STATbits.P || cmd_buffer_ptr >= CMD_BUFFER_SIZE - 1)
cmd_buff_full = 1; // should be atomic
我的处理器 (dsPIC33F) 支持原子位设置和清除。它还支持对 16 位寄存器和内存位置的原子写入;这些是单周期。我如何确定操作将以原子方式实现 - 有没有办法强制编译器执行此操作?在我的情况下,我相当肯定它会编译为原子的,但我不希望它在将来发生变化,例如,如果我更改一些其他代码并重新组织事物,或者如果我更新编译器。例如,是否有 atomic 关键字?
我正在使用 GCC v3.23 - 更具体地说,是 MPLAB C30,它是 GCC 的一个修改后的闭源版本。我正在研究一个只有中断的微控制器;没有线程的概念。原子性唯一可能的问题是,如果可能的话,可能会在两个周期的写入过程中触发中断。
【问题讨论】:
标签: atomic