Assume that several ISRs or tasks share a variable. If there is a variable currently running under a task and there is an interrupt and some other task will be taking the control of that variable. Since the variable is already used by other task, so there comes a shared data problem.
The bugs encountered in the above process can be eliminated by means of following techniques
- use of volatile modifier – this declaration warns the compiler that certain variables can modify because the ISR does not consider the fact that the variable is also shared with a calling function
- reentrant function – part of a function that needs its complete execution before it can be interrupted. This part is called the critical section.
- put a shared variable in a circular queue – a function that requires the value of this variable always delete it from the queue front and another function which inserts the value of this variable,a lways does so at the queue back.
- Disabling the interrupts before a critical section starts executing and enable the interrupts on its completion. In this method, the high priority task or ISRs will be waiting because of the disabling of the interrupts
- Semaphores- which is a nice option for shared data problems and it is efficient also