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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/17/05 12:23
Read: times


 
#89860 - Atomic Operations
Responding to: ???'s previous message
Craig Steiner said:
If the variables are single-byte then it's possible that there won't be a problem, but it ultimately depends on whether you read/write the variable in the interrupt, read/write it in the other function, and exactly what you're doing with it in both locations. And, of course, it ultimately depends on the code that the compiler generates in both places.

What we are talking about here are atomic operations i.e. an instruction that cannot be interrupted. This is not usually a problem for the ISR as it is doing the interrupting, but the main code may be interrupted halfway thru using the data e.g.

mov a, mydatabyte
sub a, #OFFSET
mov mydatabyte,a

This just subtracts an offset from the value. If the interrupt happens to occur during the mov a,mydatabyte instruction then it may put a new value in mydata byte. When the ISR returns this gets overwritten. This is not an atomic operation because several instructions are involved in the operation on the variable. The only operations that are save in this situatiion are atomic ones i.e single instructions of which there are only a few that can do useful operations in this context.

Ian

List of 38 messages in thread
TopicAuthorDate
DS5250 Lockup in ISR's With Priority            01/01/70 00:00      
   Update:            01/01/70 00:00      
      Software Bug            01/01/70 00:00      
      using what            01/01/70 00:00      
         register banks            01/01/70 00:00      
            Shared Data Problem            01/01/70 00:00      
            What stops?            01/01/70 00:00      
               timer isr stops            01/01/70 00:00      
                  Hunting down the ghost            01/01/70 00:00      
   Using different banks            01/01/70 00:00      
      Can't be            01/01/70 00:00      
         stack            01/01/70 00:00      
            more on ISRs            01/01/70 00:00      
         DS5240 has a 1k stack.            01/01/70 00:00      
            but are you using it            01/01/70 00:00      
               Stack            01/01/70 00:00      
   ISRs with Own Register Banks.            01/01/70 00:00      
      Good Questions on ISR's            01/01/70 00:00      
         Shared Data            01/01/70 00:00      
         Not a given            01/01/70 00:00      
            Variable in isr            01/01/70 00:00      
               Sometimes true            01/01/70 00:00      
                  Atomic Operations            01/01/70 00:00      
                     re explosive bytes            01/01/70 00:00      
                        Common Solutions            01/01/70 00:00      
                           Stop's the timer            01/01/70 00:00      
                              Code            01/01/70 00:00      
                        Explosions everywhere            01/01/70 00:00      
                           atomic explosions            01/01/70 00:00      
                              Unreal Time Explosions            01/01/70 00:00      
               Look at the ASM            01/01/70 00:00      
         I have had a very similar problem            01/01/70 00:00      
      ASM instructions & USING            01/01/70 00:00      
         Please do tell us....            01/01/70 00:00      
            Do I really have to?            01/01/70 00:00      
            Brian, Michael            01/01/70 00:00      
               ASM instructions & USING            01/01/70 00:00      
         probably not the case here            01/01/70 00:00      

Back to Subject List