??? 03/25/05 21:39 Read: times |
#90429 - Shared Data Problem Responding to: ???'s previous message |
Andy Neil said:
In many cases, interrupts would be useless if they didn't transfer data to the rest of the code - eg, interrupt-driven serial IO - but there's no problem doing it in 'C'
Please explain! We have discussed this in other threads but in essence the shared data problem can occur whenever two pieces of code share common data and one piece of code can interrupt the other while it is in the middle of using the data. The result is at least corrupt data and often worse. The most common form of code interrupting other code is of course in interrupt routines . Anytime a code fragment reads a multibyte value set by and ISR or writes a multibyte value used by an ISR, it is possible for the ISR to occur part way through the read or write and either corrupt the value being read or use a partly set value. This is the shared data problem. To avoid it the read or write operation must not be interruptable. This is called an atomic operation and the code fragment where the problem might occur is known as a critical section. People think provided the use unsigned chars they will not get the problem. This is not the case for several reasons: 1. Compilers often promote chars to ints internally. 2. The operation needs to be atomic so if you read a char, operate on it then save back where you got it from, the operation is not atomic. 3. The problem can apply not only to the data but to shared pointers. A common solution is to disable interrupts just before the critical section and enable them just after. Ian |
Topic | Author | Date |
8051 in C or assembly? | 01/01/70 00:00 | |
Probably C | 01/01/70 00:00 | |
Always C | 01/01/70 00:00 | |
Mostly 'C' | 01/01/70 00:00 | |
No magic wand | 01/01/70 00:00 | |
Assembler when? | 01/01/70 00:00 | |
Shared data problem?? | 01/01/70 00:00 | |
Shared Data Problem | 01/01/70 00:00 | |
I see | 01/01/70 00:00 | |
Sared Data | 01/01/70 00:00 | |
addendum | 01/01/70 00:00 | |
Shared Data | 01/01/70 00:00 | |
Knowledge, not language. | 01/01/70 00:00 | |
Knowledge | 01/01/70 00:00 | |
Knowledge | 01/01/70 00:00 | |
Promotion | 01/01/70 00:00 | |
Promotion | 01/01/70 00:00 | |
Promotion | 01/01/70 00:00 | |
Traps for the unwary | 01/01/70 00:00 | |
Preaching | 01/01/70 00:00 | |
Ditto | 01/01/70 00:00 | |
red rag.... | 01/01/70 00:00 | |
Bend over then...![]() | 01/01/70 00:00 | |
hauling assembler | 01/01/70 00:00 | |
Clarification | 01/01/70 00:00 | |
Keil Allows this to be disabled | 01/01/70 00:00 | |
Know your tools | 01/01/70 00:00 | |
It means 8 bit may be 16 bits | 01/01/70 00:00 | |
More knowledge! | 01/01/70 00:00 | |
not really | 01/01/70 00:00 | |
So which... | 01/01/70 00:00 | |
Calculations in C | 01/01/70 00:00 | |
ibid | 01/01/70 00:00 | |
Not always.. | 01/01/70 00:00 | |
Example | 01/01/70 00:00 | |
Better?? | 01/01/70 00:00 | |
assembly | 01/01/70 00:00 | |
YMMV | 01/01/70 00:00 | |
assembly | 01/01/70 00:00 | |
Hitting the Wall | 01/01/70 00:00 |