我想这个说法(if语句的主体中)是原子的:有没有一种方法可以确保C中的操作的原子性?
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闭源版本。我正在研究一种只有中断的微控制器;没有线程的概念。原子性唯一可能的问题是,如果可能的话,在两个周期的写入过程中可能会触发中断。
我不确定我的微控制器库是否提供了这个功能。 – 2010-12-10 21:40:19
所以你应该检查它是否。 – 2010-12-10 21:43:15
我不这么认为。它不支持信号或线程。 – 2010-12-11 01:09:47