| ??? 04/21/07 00:00 Read: times |
#137681 - atomicity Responding to: ???'s previous message |
I don't think this falls into the atomic category. (Although it blew up in my face.)
As I understand it, "atomic operations" ensure that nothing can change a variable as you're operating on it. The is important if you're accessing a 16-bit variable on an 8-bit machine. For instance, something like: unsigned int foo, bar;
void main(void) {
foo = 2;
bar = foo;
} // mainThe issue here is that there's no simple one-step move operation that copies bletch into snafu. Both variables require more than one access (one to get the lower-order byte and copy it, one to get the higher-order byte and do same). If an interrupt came along and modified foo during the copy operation, you'd get a wrong answer.
We know the solution to this is to disable interrupts around the copy. But I'm not sure if my example is really "atomic." Maybe it's semantic hair-splitting. I guess that disabling interrupts in the isUartEOL() function would have solved the problem. -a |
| Topic | Author | Date |
| lesson learned | 01/01/70 00:00 | |
| "atomic" | 01/01/70 00:00 | |
| atomicity | 01/01/70 00:00 | |
| if thatb is so | 01/01/70 00:00 | |
| Indeed | 01/01/70 00:00 | |
| Bit test and clear | 01/01/70 00:00 | |
| JBC | 01/01/70 00:00 | |
| favourite atomic test-and-set instructions | 01/01/70 00:00 | |
| SDCC also | 01/01/70 00:00 | |
| Classic atomic problem | 01/01/70 00:00 | |
| and/or ... | 01/01/70 00:00 | |
another example | 01/01/70 00:00 |



