Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Embedded Control Systems Design/Asynchronous activities

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

This chapter explains how to exchange data between two activities that run in parallel, or to synchronize their executions. interrupts and ISRs Interrupts and ISRs (interrupt service routines) are the lowest level of asynchronous activity. All higher levels are built on this foundation. In some cases, the RTOS will handle all the low-level details for you. We discuss interrupt and ISRs in more detail in other chapters -- ../Operating_systems#Interrupts ../Real Time Operating systems#Interrupt servicing ../Design Patterns#Interrupts threads sharing memory Exchanging data between two threads sharing memory ... medium level interprocess communication high level (= Interprocess Communication via asynchronous message passing between processes in separate protected memory areas). computer to computer communication RPC (remote procedure calls) ... Software problems When implementing the software code in a robot, there can be problems with synchronous threads. This section gives some bad programming examples in multithreaded systems. It is illustrated in C-code. They are concerned because it is a first step to understand problems which occur do to concurrent engineering on a higher level. When a program has a global variable and synchronous threads, thread 1 might be interrupted before the global variable is written and thread 2 might work on old data. This might still be acceptable, but the outcome of the program isn't what the programmer wants. Image:old_information.jpg When the global variable changes from a positive to a negative value between lines 4 and 8, none of the conditions are true. There's no function call and this can lead to problems. Image:no_execution.jpg When two threads use the same resources, the principle of mutual exclusion can be used. This can be implemented with a global variable counter. When the counter is negative one thread is blocked before entering the critical section while the other thread is still executing code within this critical section. The first thread sets the global_variable and the second one uses it to do a calculation. Image:deadlock.jpg If the first thread decrements the counter and is then preempted, the second thread also decrements the counter and evaluates it afterwards. Both threads can't continue since the counter is at -1 now. There is a deadlock situation in the executed program. This problem can also arise at a higher level of abstraction. The deadlock situation in petri nets will be described in the following section. further reading Embedded Control Systems Design/Real Time Operating systems#Interrupt servicing Embedded Systems/Interrupts Operating System Design/Processes/Interrupt