??? 01/08/07 16:03 Read: times |
#130432 - C extensions Responding to: ???'s previous message |
Dan Henry said:
Same as assembly, sometimes we take care of it without disabling interrupts by recognizing when an ISR has modified the multibyte variable. There are several ways to do this depending on how the variable changes, but one generic method is to associate a 'dirty' bit with the variable. The ISR always sets the dirty bit when it modifies the variable. The non-ISR code clears the dirty bit, reads the variable, then checks the dirty bit and if set, repeats until it gets a clean read. Good point, thanks. Of course, there are many ways... As Erik mentioned above, sometimes it is easier to avoid the problem altogether. On the other hand, the "atomicity" problem may exhibit itself also in a different - and more subtle, whence more dangerous - way: if two or more distinct variables (all of which are modified in an atomic way) have to . The typical problem is with values within (ring) buffer and the pointer pointing to them... These cannot be detected generally. However, the multibyte variable _can_be treated at least up to a warning - and I think it's worth add at this level of "built-in intelligence" to a tool which is supposed to _help_ ... :-) Standard C does not provide any means for what you are asking. Some extended Cs might. I doubt a warning would violate any C standard. Of course the automatic "treatment" would, but, anyway, any '51- (and also any other mcu-) specific C compiler is NOT adhering perfectly to the standards by definition, in order to be of any use... JW |