Novos EFB: Extended Foreground/Background Operating Environment
The Novos EFB Environment takes the simple but proven Foreground/Background organization of the classic Super Loop design and extends it. Along with the Deferred Interrupt Handlers and Event Action Routines found in the Novos FB Environment, we have added high priority Foreground tasks and allow pre-emptive scheduling amongst all Foreground execution entities. The Super Loop is still retained as the sole Background entity.
Foreground tasks have no context that requires saving and restoring, except during a pre-emption, thereby minimizing scheduling latency. Between their run-to-completion execution model, their prioritization and their efficient scheduling, you have everything working in your favor.
You can assign all Foreground tasks to a single priority and the Scheduler will select them First Come, First Served. Or have all Foreground tasks at a single priority but have one very high priority task that can pre-empt the others. Or, you can have different Foreground tasks at different priorities. In all cases, the Scheduler sorts out which Foreground entity gets CPU control, giving you the responsiveness you want. Lots of possibilities with the Novos EFB Environment.
However you choose to organize your application, you have at your disposal an efficient design supported by a set of highly flexible services for prioritized Foreground operations and Background handling of external or internal events and data movement. And it’s all done with a single stack for use with tight RAM budgets.
Why Use the Novos EFB Environment?
You can do a lot with Super Loop design but the availability of Foreground tasks in the Novos EFB Environment means that you can handle even more complex applications. Running a DSP algorithm? The FG tasks are ideal for it. Need to build a Finite State Machine? Again, the Foreground tasks are just the ticket. Need real-time responses to external events or interrupts? Couple the event to a Foreground task and get the responsiveness you need.
For example, the Novos EFB Environment can yield FG task schedulability with provable hard real-time performance when used in conjunction with Rate Monotonic Analysis for priority assignments. The figure below shows Time Triggered Rate Monotonic Scheduling used with Novos FG tasks at different priorities. And that’s just one way to use the Novos EFB Operating Environment.
The Novos EFB Environment makes it easy to get the job done quickly and efficiently by:
- Providing a standard model for interrupt servicing that simplifies device driver design
- Recognizing and synchronizing application code with external or internal events
- Pre-emptive scheduling of Foreground execution entities
- Passing data between the execution entities, including interrupt service routines
- Handling time-based operations
- Requiring only one stack for both Foreground and Super Loop operations
Developing your own custom environment with the capabilities of the Novos EFB Environment may succeed but often at an unacceptable cost in time, reliability and product management. The Novos EFB Environment can cut those costs, improve the application development schedule and help make a more maintainable product. If you are considering such an operating environment for your next application, take a look at the Novos EFB Operating Environment before you decide to “Make” rather than “Buy”.
And with the Novos EFB Environment, there is very little to buy because the Novos source code is FREE. To improve your experience with the Novos EFB Environment, we also offer two separately available volumes of related product documentation for a small fee. A User Guide explains the Novos EFB design, its classes and how to use it. A Services Reference Guide gives a complete description of each Novos EFB API. Download the source code, get the documents and see how all of it can help on your next application. Quickly.
Most embedded applications need to service peripheral devices from time to time. Polling the devices is one way but a costly one in terms of cycles, power and performance. Interrupts are usually a better solution and the Novos EFB Environment is especially well suited to the job of servicing them rapidly and predictably.
The Novos EFB Environment uses two-level interrupt service model that is common to all Novos operating environments, providing a robust design and ease of handling interrupts. The highest level services the immediate needs of the interrupting device and schedules the second level handler, the Deferred Interrupt Handler (DIH). As a high priority Foreground execution entity, the DIH has full access to the Novos EFB API set, allowing it to communicate with other DIHs as well as FG tasks or the Super Loop about the device’s input or output data.
Synchronizing with Events
It is a common requirement in almost all embedded systems that the various execution entities know when an event takes place in order to synchronize with it. That is part of the essence of a real-time system. The Novos EFB Environment supports Event Action Routines (EARs) for specific types of class-related events.
By employing EARs, it is easy to respond to events in a timely manner, further enhancing the innate real-time capability of the Novos EFB Environment.
Novos EFB Entities and Service Classes
The Novos EFB environment supports 53 services distributed amongst eight classes, which include:
A Deferred Interrupt Handler (DIH) is a Foreground execution entity that runs as the result of an interrupt. A DIH can invoke Novos EFB services that pass data between the DIH and other entities. Events caused by those services can schedule Event Action Routines.
An Event Action Routine (EAR) is a micro-task that executes when a Novos EFB service invoked from any execution entity detects an event for which there is an associated EAR. The scheduled EAR always runs as a Foreground entity, meaning that it will pre-empt any Super Loop or Foreground task operation. The association between an object, the event conditions and an Event Action Routine is user-defined. An EAR can invoke all services available to any Foreground execution entity.
Foreground Tasks (FG tasks) execute at priorities below that of an Event Action Routine but above that of the Super Loop in the Background. FG tasks are interruptible as well as pre-emptible by Event Action Routines and higher priority FG tasks. They can also schedule other FG tasks and may invoke Novos EFB services available to any FG task.
The Alarm and Counter classes provide services to handle time-based operations in all execution entities, including the Super Loop. A single system time-base can support any number of application-defined alarms, which can be either one-shot or cyclic in nature.
The Event Group class services provide execution entities ways to use groups of bit-level flags to set and detect one or more events in a simple and efficient way with AND/OR Boolean logic.
The Queue class provides services to move data to/from the execution entities, including the Super Loop, DIH, EAR and FG task entities. Support exists for both First-In-First-Out (FIFO) and Last-In-First-Out (LIFO) queueing.
The Semaphore class supports a full counting model that permits execution entities to signal and/or detect the occurrence of a related event. The degenerate case of the counting semaphore model is the binary semaphore, which is also supported for simple exclusive access to resources.
The Memory Pool class allows RAM to be divided into pools of user-defined, fixed size blocks that all execution entities can allocate, use and release. Contiguous and non-contiguous RAM blocks are permissible, allowing a versatile means to manage a precious resource.