Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
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

List of 40 messages in thread
TopicAuthorDate
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      

Back to Subject List