BEC601_MOD-2-NOTES
BEC601_MOD-2-NOTES
Prepared by:
SINDHU R
Assistant Professor
Department of ECE.
Akshaya Institute of Technology
Tumakuru
Module – 2
Embedded System Design Concepts
Embedded systems possess certain specific characteristics. These characteristics are unique
to each embedded system.
Some of the important characteristics of an embedded system are:
1. Application and domain specific
2. Reactive and Real Time
3. Operates in harsh environments
4. Distributed
5. Small size and weight
6. Power concerns
Each embedded system has certain functions to perform and they are developed in such a
manner to do the intended functions only.
They cannot be used for any other purpose.
For example, the embedded control unit of a microwave oven cannot be replaced with an
air conditioner's embedded control unit, because the embedded control units of
microwave oven and air conditioner are specifically designed to perform certain specific
tasks.
Also, an embedded control unit developed for a particular domain, say telecom, cannot be
replaced with another control unit designed to serve another domain like consumer
electronics.
Embedded systems are in constant interaction with the real world through sensors and
user-defined input devices which are connected to the input port of the system.
Any changes happening in the real world (which is called an Event) are captured by the
sensors or input devices in Real Time and the control algorithm running inside the unit
reacts in a designed manner to bring the controlled output variables to the desired level.
Embedded systems produce changes in output in response to the changes in the input. So,
they are generally referred as Reactive Systems.
Real Time System operation means the timing behaviour of the system should be
deterministic.
The system should respond to requests or tasks in a known amount of time.
A Real Time system should not miss any deadlines for tasks or operations.
It is not necessary that all embedded systems should be Real Time in operations.
Embedded applications or systems which are mission critical, like flight control systems,
Antilock Brake Systems (ABS), etc. are examples of Real Time systems.
The environment in which the embedded system deployed may be a dusty one or a high
temperature zone or an area subject to vibrations and shock.
Systems placed in such areas should be capable to withstand all these adverse operating
conditions.
The design should take care of the operating conditions of the area where the system is
going to implement.
For example, if the system needs to be deployed in a high temperature zone, then all the
components used in the system should be of high temperature grade. Also, proper shock
absorption techniques should be provided to systems which are going to be commissioned
in places subject to high shock.
Power supply fluctuations, corrosion and component aging, etc. are the other factors that
need to be taken into consideration for embedded systems to work in harsh environments.
Distributed
The term distributed means that embedded systems may be a part of larger systems.
Many numbers of such distributed embedded systems form a single large embedded
control unit.
For example, an automatic vending machine. It contains a card reader (for pre-paid
vending systems), a vending unit, etc. Each of them is independent embedded units but
they work together to perform the overall vending function.
Another example is the Automatic Teller Machine (ATM). It contains a card reader
embedded unit, responsible for reading and validating the user's ATM card, transaction
unit for performing transactions, a currency counter for dispatching/vending currency to
the authorised person and a printer unit for printing the transaction details.
We can visualise these as independent embedded systems, but they work together to
achieve a common goal.
Another typical example of a distributed embedded system is the Supervisory Control And
Data Acquisition (SCADA) system used in Control & Instrumentation applications, which
contains physically distributed individual embedded control units connected to a
supervisory module.
Power Concerns
The operational quality attributes represent the relevant quality attributes related to the
embedded system when it is in the operational mode or 'online' mode.
The important operational quality attributes are:
1. Response
2. Throughput
3. Reliability
4. Maintainability
5. Security
6. Safety
Response
Reliability
Reliability is a measure of how much percentage you can rely upon the proper functioning
of the system or what is the percentage susceptibility of the system to failures.
System reliability is defined using two terms:
Mean Time Between Failures (MTBF): Gives the frequency of failures in
hours/weeks/months.
Mean Time To Repair (MTTR): Specifies how long the system is allowed to be out of
order following a failure. For an embedded system with critical application need, it should
be of the order of minutes.
Maintainability
Maintainability deals with support and maintenance to the end user or client in case of
technical issues and product failures or on the basis of a routine system check-up.
Reliability and maintainability are considered as two complementary disciplines.
A more reliable system means a system with less corrective maintainability requirements
and vice versa.
Maintainability can be broadly classified into two categories:
Scheduled or Periodic Maintenance (preventive maintenance): For example,
replacing the cartridge of a printer after each 'n' number of printouts to get quality
prints.
Maintenance to unexpected failures (corrective maintenance): For example,
repairing the printer if the paper feeding part fails.
Maintainability is also an indication of the availability of the product for use.
In any embedded system design, the ideal value for availability is expressed as
17EC62
Security
Confidentiality, Integrity, and Availability are the three major measures of information
security.
Confidentiality deals with the protection of data and application from unauthorised
disclosure.
Integrity deals with the protection of data and application from unauthorised modification.
Availability deals with protection of data and application from unauthorized users.
A very good example of the 'Security' aspect in an embedded product is a Personal Digital
Assistant (PDA). The PDA can be either a shared resource (e.g. PDAs used in LAB setups)
or an individual one.
If it is a shared one there should be some mechanism in the form of a user name and
password to access into a particular person's profile—This is an example of 'Availability’.
Also, all data and applications present in the PDA need not be accessible to all users.
Some of them are specifically accessible to administrators only.
For achieving this, Administrator and user levels of security should be implemented —An
example of Confidentiality.
Some data present in the PDA may be visible to all users but there may not be necessary
permissions to alter the data by the users.
That is Read Only access is allocated to all users—An example of Integrity.
Safety
Safety deals with the possible damages that can happen to the operators, public and the
environment due to the breakdown of an embedded system or due to the emission of
radioactive or hazardous materials from the embedded products.
The breakdown of an embedded system may occur due to a hardware failure or a firmware
failure.
Safety analysis is a must in product engineering to evaluate the anticipated damages and
determine the best course of action to bring down the consequences of the damages to an
acceptable level.
Some of the safety threats are sudden (like product breakdown) and some of them are
gradual (like hazardous emissions from the product).
100
Non-Operational Quality Attributes
The quality attributes that needs to be addressed for the product 'not’ on the basis of
operational aspects are grouped under this category.
The important non-operational quality attributes are:
1. Testability & Debug-ability
2. Evolvability
3. Portability
4. Time-to-prototype and market
5. Per unit and total cost
Testability deals with how easily one can test his/her design, application and by which
means he/she can test it.
For an embedded product, testability is applicable to both the embedded hardware
and firmware.
Embedded hardware testing ensures that the peripherals and the total hardware
functions in the desired manner, whereas firmware testing ensures that the firmware
is functioning in the expected way.
Debug-ability is a means of debugging the product as such for figuring out the probable
sources that create unexpected behaviour in the total system.
Debug-ability has two aspects in the embedded system development context, namely,
hardware level debugging and firmware level debugging.
Hardware debugging is used for figuring out the issues created by hardware problems
whereas firmware debugging is employed to figure out the probable errors that appear
as a result of flaws in the firmware.
Evolvability
17EC62
For an embedded system, the quality attribute 'Evolvability’ refers to the ease with which
the embedded product (including firmware and hardware) can be modified to take
advantage of new firmware or hardware technologies.
Portability
Time-to-market is the time elapsed between the conceptualisation of a product and the
time at which the product is ready for selling (for commercial product) or use (for non-
commercial products).
The commercial embedded product market is highly competitive and time-to-market the
product is a critical factor in the success of a commercial embedded product.
Competitor might release their product before you do.
The technology used might have superseded with a new technology.
Product prototyping helps a lot in reducing time-to-market.
Prototyping is an informal kind of rapid product development in which the important
features of the product under consideration are developed.
The time-to-prototype is also another critical factor.
• If the prototype is developed faster, the actual estimated development time can be
brought down significantly.
• In order to shorten the time to prototype, make use of all possible options like the
use of off-the-shelf components, re-usable assets, etc.
Cost is a factor which is closely monitored by both end user and product manufacturer.
Cost is a highly sensitive factor for commercial products.
Any failure to position the cost of a commercial product at a nominal rate, may lead to the
failure of the product in the market.
Proper market study and cost benefit analysis should be carried out before taking a decision
on the per-unit cost of the embedded product.
The budget and total system cost should be properly balanced to provide a marginal profit.
102
The product life cycle of every embedded product has different phases:
Design and Development Phase:
The product idea generation, prototyping, Roadmap definition, actual product design and
development are the activities carried out during this phase. There is only investment and
no returns.
Product Introduction Phase:
Once the product is ready to sell, it is introduced to the market. During the initial period
the sales and revenue will be low. There won't be much competition and the product sales
and revenue increases with time.
Growth Phase
The product grabs high market share.
Maturity Phase:
The growth and sales will be steady and the revenue reaches at its peak.
Product Retirement/Decline Phase:
Drop in sales volume, market share and revenue.
The decline happens due to various reasons like competition from similar product with
enhanced features or technology changes, etc.
At some point of the decline stage, the manufacturer announces discontinuing of the
product.
The different stages of the embedded products life cycle—revenue, unit cost and profit in
each stage are represented in the following Product Life-cycle graph
From the graph, it is clear that the total revenue increases from the product introduction
stage to the product maturity stage.
The revenue peaks at the maturity stage and starts falling in the decline/retirement Stage.
The unit cost is very high during the introductory stage. A typical example is cell phone; if
you buy a new model of cell phone during its launch time, the price will be high and you
will get the same model with a very reduced price after three or four months of its
launching).
The profit increases with increase in sales and attains a steady value and then falls with a
dip in sales.
You can see a negative value for profit during the initial period.
It is because during the product development phase there is only investment and no
returns.
17EC62
Profit occurs only when the total returns exceed the investment and operating cost.
The actuator part of the washing machine consists of a motorised agitator, tumble tub,
water drawing pump and inlet valve to control the flow of water into the unit.
The sensor part consists of the water temperature sensor, level sensor, etc. The control
part contains a microprocessor/controller based board with interfaces to the sensors and
actuators.
The sensor data is fed back to the control unit and the control unit generates the necessary
actuator outputs.
The control unit also provides connectivity to user interfaces like keypad for setting the
washing time, selecting the type of material to be washed like light, medium, heavy duty,
etc. User feedback is reflected through the display unit and LEDs connected to the control
board.
Washing machine comes in two models, namely, top loading and front loading machines.
In top loading models the agitator of the machine twists back and forth and pulls the cloth
down to the bottom of the tub.
On reaching the bottom of the tub the clothes work their way back upto the top of the
tub where the agitator grabs them again and repeats the mechanism.
In the front loading machines, the clothes are tumbled and plunged into the water over
and over again.
This is the first phase of washing.
104
In the second phase of washing, water is pumped out from the tub and the inner tub uses
centrifugal force to wring out more water from the clothes by spinning at several hundred
Rotations Per Minute (RPM).
This is called a 'Spin Phase’.
The inner tub of the machine contains a number of holes and during the spin cycle the
inner tub spins, and forces the water out through these holes to the stationary outer tub
from which it is drained off through the outlet pipe.
The design of washing machines may vary from manufacturer to manufacturer, but the
general principle underlying in the working of the washing machine remains the same.
The basic controls consist of a timer, cycle selector mechanism, water temperature selector,
load size selector and start button.
The mechanism includes the motor, transmission, clutch, pump, agitator, inner tub, outer
tub and water inlet valve.
Water inlet valve connects to the water supply line using at home and regulates the flow
of water into the tub.
The integrated control panel consists of a microprocessor/controller based board with
I/O interfaces and a control algorithm running in it.
Input interface includes the keyboard which consists of wash type selector namely Wash,
Spin and Rinse, cloth type selector namely Light, Medium, Heavy duty and washing time
setting, etc.
The output interface consists of LED/LCD displays, status indication LEDs, etc.
connected to the I/O bus of the controller.
The other types of I/O interfaces which are invisible to the end user are different kinds of
sensor interfaces, namely, water temperature sensor, water level sensor, etc. and actuator
interface including motor control for agitator and tub movement control, inlet water flow
control, etc.
The major application domains of embedded systems are consumer, industrial, automotive,
telecom, etc.
Figure below gives an overview of the various types of electronic control units employed
automotive applications.
17EC62
Automotive embedded systems are the one where electronics take control over the
mechanical systems.
The presence of automotive embedded system in a vehicle varies from simple mirror and
wiper controls to complex air bag controller and antilock brake systems (ABS).
Automotive embedded systems are normally built around microcontrollers or DSPs or a
hybrid of the two and are generally known as Electronic Control Units (ECUs).
The number of embedded controllers in an ordinary vehicle varies from 20 to 40 whereas
a luxury vehicle like Mercedes S and BMW 7 may contain 75 to 100 numbers of embedded
controllers.
The first embedded system used in automotive application was the microprocessor based
fuel injection system introduced by Volkswagen 1600 in 1968.
The electronic control units (ECUs) used in the automotive embedded industry can be
broadly classified into two:
High-speed Electronic Control Units (HECUs):
These are deployed in critical control units requiring fast response.
They include fuel injection systems, antilock brake systems, engine control, electronic
throttle, steering controls, transmission control unit and central control unit.
Low-speed Electronic Control Units (LECUs):
These are deployed in applications where response time is not so critical.
They generally are built around low cost microprocessors/microcontrollers and digital
signal processors.
Audio controllers, passenger and driver door locks, door glass controls (power
windows), wiper control, mirror control, seat control systems, head lamp and tail lamp
controls, sun roof control unit etc. are examples of LECUs.
Automotive applications make use of serial buses for communication, which greatly
reduces the amount of wiring required inside a vehicle.
Different types of serial interface buses are:
• Controller Area Network (CAN) Bus
106
• Local Interconnect Network (LIN) Bus
• Media-Oriented System Transport (MOST) Bus
Controller Area Network (CAN) Bus
• CAN Bus was originally proposed by Robert Bosch, pioneer in the Automotive
embedded solution providers.
• It supports medium speed (ISO11519-class B with data rates up to 125 Kbps) and
high speed (IS011898 class C with data rates up to 1 Mbps) data transfer.
• CAN is an event-driven protocol interface with support for error handling in data
transmission.
• It is generally employed in safety system like airbag control; power train systems like
engine control and Antilock Brake System (ABS); and navigation systems like GPS.
Local Interconnect Network (LIN) Bus
• LIN bus is a single master multiple slave (up to 16 independent slave nodes)
communication interface.
• LIN is a low speed, single wire communication interface with support for data rates
up to 20 Kbps and is used for sensor/actuator interfacing.
• LIN bus follows the master communication triggering technique to eliminate the
possible bus arbitration problem that can occur by the simultaneous talking of
different slave nodes connected to a single interface bus.
• LIN bus is employed in applications like mirror controls, fan controls, seat
positioning controls, window controls, and position controls where response time is
not a critical issue.
Media-Oriented System Transport (MOST) Bus
• MOST Bus is targeted for automotive audio/video equipment interfacing.
• It is a multimedia fibre-optic point-to-point network implemented in a star, ring or
daisy-chained topology over optical fibre cables.
• The MOST bus specifications define the physical (electrical and optical parameters)
layer as well as the application layer, network layer, and media access control.
• MOST bus is an optical fibre cable connected between the Electrical Optical
Converter (EOC) and Optical Electrical Converter (OEC), which would translate into
the optical cable MOST bus.
The key players of the automotive embedded market can be visualised in three verticals
namely, silicon providers, tools and platform providers and solution providers.
Silicon Providers
• They are responsible for providing the necessary chips which are used in the control
application development.
• The chip may be a standard product like microcontroller or DSP or ADC/DAC
chips.
• Some applications may require specific chips and they are manufactured as
Application Specific Integrated Chip (ASIC).
• The leading silicon providers in the automotive industry are Analog Devices, Xilinx,
Atmel, Maxim/Dallas, NXP Semiconductors, Renesas, Texas Instruments, Fujitsu,
Infineon, NEC, etc.
Tools and Platform Providers
17EC62
• They are manufacturers and suppliers of various kinds of development tools and
Real Time Embedded Operating Systems for developing and debugging different
control unit related applications.
• Some of the leading suppliers of tools and platforms in automotive embedded
applications are ENEA, The MathWorks, MATLAB, Keil Software, Lauterbach,
ARTiSAN, Microsoft, etc.
Solution Providers
• They supply Original Equipment Manufacturer (OEM) and complete solution for
automotive applications making use of the chips, platforms and different development
tools.
• The major players of this domain Bosch Automotive, DENSO Automotive, Infosys
Technologies, Delphi, etc.
108
Fundamental Issues in Hardware Software Co-Design
In hardware software co-design, models are used for capturing and describing the system
characteristics.
A model is a formal system consisting of objects and composition rules.
It is hard to make a decision on which model should be followed in a particular system
design.
Most often designers switch between a variety of models from the requirements
specification to the implementation aspect of the system design.
The reason being, the objective varies with each phase.
For example, at the specification stage, only the functionality of the system is in
focus and not the implementation information.
When the design moves to the implementation aspect, the information about the
system components is revealed and the designer has to switch to a model capable
of capturing the system's structure.
A model only captures the system characteristics and does not provide information on
'how the system can be manufactured?’.
The architecture specifies how a system is going to implement in terms of the number and
types of different components and the interconnection among them.
The commonly used architectures in system design are Controller Architecture, Datapath
Architecture, Complex Instruction Set Computing (CISC), Reduced Instruction Set
Computing (RISC), Very Long Instruction Word Computing (VLIW), Single Instruction
Multiple Data (SIMD), Multiple Instruction Multiple Data (MIMD), etc.
Some of them fall into Application Specific Architecture Class (like controller
architecture), while others fall into either general purpose architecture class (CISC,
RISC, etc.) or Parallel processing class (like VLIW, SIMD, MIMD, etc.).
A model can be captured using multiple programming languages like C, C++, C#, Java,
etc. for software implementations and languages like VHDL, System C, Verilog, etc. for
hardware implementations.
On the other hand, a single language can be used for capturing a variety of models.
Certain languages are good in capturing certain computational model.
For example, C++ is a good candidate for capturing an object oriented model.
The only pre-requisite in selecting a programming language for capturing a model is that
the language should capture the model easily.
The Data Flow Graph (DFG) model translates the data processing requirements into a
data flow graph.
It is a data driven model in which the program execution is determined by data.
This model emphasises on the data and operations on the data which transforms the input
data to output data.
Embedded applications which are computational intensive and data driven are modelled
using the DFG model.
DSP applications are typical examples for it.
Data Flow Graph (DFG) is a visual model in which the operation on the data (process) is
represented using a block (circle) and data flow is represented using arrows.
An inward arrow to the process (circle) represents input data and an outward arrow from
the process (circle) represents output data in DFG notation.
Suppose one of the functions in our application contains the computational requirement
𝑥 = 𝑎 + 𝑏 and 𝑦 = 𝑥 − 𝑐.
110
Figure illustrates the implementation of a DFG model for implementing these
requirements.
In a DFG model, a data path is the data flow path from input to output.
A DFG model is said to be acyclic DFG (ADFG) if it doesn't contain multiple values for
the input variable and multiple output values for a given set of input(s).
Feedback inputs (Output is fed back to Input), events, etc. are examples for non-
acyclic inputs.
A DFG model translates the program as a single sequential process execution.
The DFG model is a data driven model in which the execution is controlled by data and it
doesn't involve any control operations (conditionals).
The Control DFG (CDFG) model is used for modelling applications involving conditional
program execution.
CDFG models contains both data operations and control operations. The CDFG uses
Data Flow Graph (DFG) as element and conditional (constructs) as decision makers.
CDFG contains both data flow nodes and decision nodes, whereas DFG contains only
data flow nodes.
Consider the implementation of the CDFG for the following requirement.
𝐼𝑓 𝑓𝑙𝑎𝑔 = 1, 𝑥 = 𝑎 + 𝑏; 𝑒𝑙𝑠𝑒 𝑦 = 𝑎 − 𝑏;
This requirement contains a decision making process.
The CDFG model for the same is given in the figure.
The control node is represented by a 'Diamond' block which is the decision making
element in a normal flow chart based design.
CDFG translates the requirement, which is modelled to a concurrent process model.
The decision on which process is to be executed is determined by the control node.
1 7 EC 6 2
A real world example for modelling the embedded application using CDFG is capturing
and saving of the image to a format set by the user in a digital still camera.
The decision on, in which format the image is stored (formats like JPEG, TIFF, BMP,
etc.) is controlled by the camera settings, configured by the user.
The State Machine Model is used for modelling reactive or event-driven embedded systems
whose processing behaviour are dependent on state transitions.
Embedded systems used in the control and industrial applications are typical
examples for event driven systems.
The State Machine model describes the system behaviour with 'States', 'Events', 'Actions'
and 'Transitions’.
State is a representation of a current situation.
An event is an input to the state.
The event acts as stimuli for state transition.
Transition is the movement from one state to another.
Action is an activity to be performed by the state machine.
A Finite State Machine (FSM) model is one in which the number of states are finite.
The system is described using a finite number of possible states.
As an example, let us consider the design of an embedded system for driver/passenger
'Seat Belt Warning' in an automotive using the FSM model.
The system requirements are captured as.
When the vehicle ignition is turned on and the seat belt is not fastened within 10
seconds of ignition ON, the system generates an alarm signal for 5 seconds.
The Alarm is turned off when the alarm time (5 seconds) expires or if the
driver/passenger fastens the belt or if the ignition switch is turned off, whichever
happens first.
The 'Ignition Key ON' event triggers the 10 second timer and transitions the state to
'Waiting’.
If a Seat Belt ON’ or 'Ignition Key OFF' event occurs during the wait state, the state
transitions into 'Alarm Off’.
When the wait timer expires in the waiting state, the event 'Timer Expire' is generated and
it transitions the state to 'Alarm On' from the 'Waiting' state.
The 'Alarm On' state continues until a 'Seat Belt ON' or 'Ignition Key OFF' event or
'Alarm Time Expire' event, whichever occurs first.
The occurrence of any of these events transitions the state to 'Alarm Off’.
As seen from the FSM, the timer state can be either 'IDLE' or 'READY' or 'RUNNING’.
During the normal condition when the timer is not running, it is said to be in the 'IDLE'
state.
The timer is said to be in the 'READY’ state when the timer is loaded with the count
corresponding to the required time delay.
The timer remains in the 'READY' state until a 'Start Timer' event occurs.
The timer changes its state to 'RUNNING' from the 'READY' state on receiving a 'Start
Timer' event and remains in the 'RUNNING' state until the timer count expires or a 'Stop
Timer' even occurs.
The timer state changes to 'IDLE' from 'RUNNING' on receiving a 'Stop Timer' or 'Timer
Expire' event.
Design an automatic tea/coffee vending machine based on FSM model for the following
requirement.
The tea/coffee vending is initiated by user inserting a 5 rupee coin.
After inserting the coin, the user can either select 'Coffee' or 'Tea' or press 'Cancel'
to cancel the order and take back the coin.
Solution
Design a coin operated public telephone unit based on FSM model for the following
requirements.
The calling process is initiated by lifting the receiver (off-hook) of the telephone
unit.
After lifting the phone the user needs to insert a 1 rupee coin to make the call.
If the line is busy, the coin is returned on placing the receiver back on the hook
(on-hook).
If the line is through, the user is allowed to talk till 60 seconds and at the end of
45th second, prompt for inserting another 1 rupee coin for continuing the call is
initiated.
If the user doesn't insert another 1 rupee coin, the call is terminated on completing
the 60 seconds time slot.
The system is ready to accept new call request when the receiver is placed back on
the hook (on-hook).
The system goes to the 'Out of Order' state when there is a line fault.
1 7 EC 6 2
In the Sequential Program Model, the functions or processing requirements are executed
in sequence.
It is same as the conventional procedural programming.
Here the program instructions are iterated and executed conditionally and the data gets
transformed through a series of operations.
Finite State Machines (FSMs) and Flow Charts are used for modelling sequential program.
The FSM approach represents the states, events, transitions and actions, whereas
the Flow Chart models the execution flow.
The execution of functions in a sequential program model for the 'Seat Belt Warning'
system is illustrated below:
Object-Oriented Model
The object-oriented model is an object based model for modelling system requirements.
It disseminates a complex software requirement into simple well defined pieces called
objects.
Object-oriented model brings re-usability, maintainability and productivity in system
design.
In the object-oriented modelling, object is an entity used for representing or modelling a
particular piece of the system.
Each object is characterized by a set of unique behaviour and state.
A class is an abstract description of a set of objects and it can be considered as a 'blueprint'
of an object.
A class represents the state of an object through member variables and object behaviour
through member functions.
The member variables and member functions of a class can be private, public or protected.
Private member variables and functions are accessible only within the class,
whereas public variables and functions are accessible within the class as well as
outside the class.
The protected variables and functions are protected from external access.
However, classes derived from a parent class can also access the protected member
functions and variables.
The embedded firmware is responsible for controlling the various peripherals of the
embedded hardware and generating response in accordance with the functional
requirements.
Firmware is considered as the master brain of the embedded system.
Imparting intelligence to an Embedded system is a one time process and it can happen at
any stage.
It can be immediately after the fabrication of the embedded hardware or at a later
stage.
For most of the embedded products, the embedded firmware is stored at a permanent
memory (ROM) and they are non-alterable by end users.
Some of the embedded products used in the Control and Instrumentation domain
are adaptive.
Designing embedded firmware requires understanding of the particular embedded product
hardware, like various component interfacing, memory map details, I/O port details,
configuration and register details of various hardware chips used and some programming
language.
Embedded firmware development process starts with the conversion of the firmware
requirements into a program model using modelling tools.
Once the program model is created, the next step is the implementation of the tasks and
actions by capturing the model using a language which is understandable by the target
processor/controller.
The firmware design approaches for embedded product is purely dependent on the
complexity of the functions to be performed, the speed of operation required, etc.
Two basic approaches are used for embedded firmware design:
Super Loop Based Approach (Conventional Procedural Based Design)
Embedded Operating System (OS) Based Approach
The Super Loop based firmware development approach is adopted for applications that
are not time critical and where the response time is not so important.
It is very similar to a conventional procedural programming where the code is executed
task by task.
The task listed at the top of the program code is executed first and the tasks just below the
top are executed after completing the first task.
In a multiple task based system, each task is executed in serial in this approach.
The firmware execution flow for this will be
Configure the common parameters and perform initialisation for various hardware
components memory, registers, etc.
17EC62
Almost all tasks in embedded applications are non-ending and are repeated infinitely
throughout the operation.
This repetition is achieved by using an infinite loop.
Hence the name 'Super loop based approach’.
The only way to come out of the loop is either a hardware reset or an interrupt assertion.
Advantage of Super Loop Based Approach:
It doesn't require an operating system
There is no need for scheduling which task is to be executed and assigning priority
to each task.
The priorities are fixed and the order in which the tasks to be executed are also
fixed.
Hence the code for performing these tasks will be residing in the code memory
without an operating system image.
Applications of Super Loop Based Approach:
This type of design is deployed in low-cost embedded products and products
where response time is not time critical.
Some embedded products demands this type of approach if some tasks itself are
sequential.
For example, reading/writing data to and from a card using a card reader requires
a sequence of operations like checking the presence of card, authenticating the
operation, reading/writing, etc.
It should strictly follow a specified sequence and the combination of these series
of tasks constitutes a single task-namely data read/write.
A typical example of a 'Super loop based’ product is an electronic video game toy
containing keypad and display unit.
The program running inside the product may be designed in such a way that it
reads the keys to detect whether the user has given any input and if any key press
is detected the graphic display is updated.
The keyboard scanning and display updating happens at a reasonably high rate.
Even if the application misses a key press, it won't create any critical issues; rather
it will be treated as a bug in the firmware.
Drawbacks of Super Loop Based Approach:
Any failure in any part of a single task will affect the total system.
If the program hangs up at some point while executing a task, it will remain
there forever and ultimately the product stops functioning.
Watch Dog Timers (WDTs) can be used to overcome this, but this, in turn,
may cause additional hardware cost and firmware overheads.
Lack of real timeliness.
If the number of tasks to be executed within an application increases, the
time at which each task is repeated also increases.
This brings the probability of missing out some events.
The Embedded Operating System (OS) based approach contains operating systems, which
can be either a General Purpose Operating System (GPOS) or a Real Time Operating
System (RTOS) to host the user written application firmware.
The General Purpose OS (GPOS) based design is very similar to a conventional PC based
application development where the device contains an operating system
(Windows/Unix/Linux, etc. for Desktop PCs) and you will be creating and running user
applications on top of it.
Example of a GPOS used in embedded product development is Microsoft
Windows XP Embedded.
Examples of Embedded products using Microsoft Windows XP OS are Personal
Digital Assistants (PDAs), Hand held devices/Portable devices and Point of Sale
(POS) terminals.
Use of GPOS in embedded products merges the demarcation of Embedded Systems and
general computing systems in terms of OS.
For developing applications on top of the OS, the OS supported APIs are used.
Similar to the different hardware specific drivers, OS based applications also require
'Driver software' for different hardware present on the board to communicate with them.
17EC62
Real Time Operating System (RTOS) based design approach is employed in embedded
products demanding Real-time response.
RTOS responds in a timely and predictable manner to events.
Real Time operating system contains a Real Time kernel responsible for performing pre-
emptive multitasking, scheduler for scheduling tasks, multiple threads, etc.
A Real Time Operating System (RTOS) allows flexible scheduling of system resources like
the CPU and memory and offers some way to communicate between tasks. 'Windows CE',
'pSOS', 'VxWorks', 'ThreadX', 'MicroC/OS-II’, 'Embedded Linux', 'Symbian’, etc. are
examples of RTOS employed in embedded product development.
Mobile phones, PDAs (Based on Windows CE/Windows Mobile Platforms), handheld
devices, etc. are examples of 'Embedded Products' based on RTOS.
Each source module is written in Assembly and is stored as .src file or .asm file.
Each file can be assembled separately to examine the syntax errors and incorrect assembly
instructions.
On successful assembling of each .src/.asm file a corresponding object file is created with
extension '.obj’.
123
17EC62
The object file does not contain the absolute address of where the generated code
needs to be placed on the program memory and hence it is called a re-locatable
segment.
It can be placed at any code memory location and it is the responsibility. of the
linker/locater to assign absolute address for this module.
Libraries are specially formatted, ordered program collections of object modules that may
be used by the linker at a later time.
Library files are generated with extension '. lib’.
When the linker processes a library, only those object modules in the library that are
necessary to create the program are used.
Library file is some kind of source code hiding technique.
For example, 'LIB51' from Keil Software is an example for a library creator and it
is used for creating library files for A51 Assembler/C51 Compiler for 8051 specific
controllers.
Linker and Locater is another software utility responsible for "linking the various object
modules in a multi-module project and assigning absolute address to each module".
Linker generates an absolute object module by extracting the object modules from the
library, if any, and those obj files created by the assembler, which is generated by
assembling the individual modules of a project.
It is the responsibility of the linker to link any external dependent variables or functions
declared on various modules and resolve the external dependencies among the modules.
An absolute object file or module does not contain any re-locatable code or data.
All code and data reside at fixed memory locations.
The absolute object file is used for creating hex files for dumping into the code memory
of the processor/controller.
'BL51' from Keil Software is an example for a Linker & Locater for A51
Assembler/C51 Compiler for 8051 specific controller.
This is the final stage in the conversion of Assembly language (mnemonics) to machine
understandable language (machine code).
Hex File is the representation of the machine code and the hex file is dumped into the
code memory of the processor/controller.
The hex file representation varies depending on the target processor/controller make.
HEX files are ASCII files that contain a hexadecimal representation of target application.
124
Hex file is created from the final 'Absolute Object File' using the Object to Hex File
Converter utility.
'OH51' from Keil software is an example for Object to Hex File Converter utility
for A51 Assembler/C51 Compiler for 8051 specific controller.
125
17EC62
Also more lines of assembly code are required for performing an action which can
be done with a single instruction in a high-level language like 'C'.
Developer Dependency
Unlike high level languages, there is no common written rule for developing
assembly language based applications.
In assembly language programming, the developers will have the freedom to
choose the different memory location and registers.
Also the programming approach varies from developer to developer depending on
his/her taste.
For example, moving data from a memory location to accumulator can be achieved
through different approaches.
If the approach done by a developer is not documented properly at the
development stage, he/she may not be able to recollect why this approach is
followed at a later stage or when a new developer is instructed to analyse this code,
he/she also may not be able to understand what is done and why it is done.
Hence upgrading an assembly program or modifying it on a later stage is very
difficult.
Non-Portable
Target applications written in assembly instructions are valid only for that
particular family of processors (e.g. Application written for Intel x86 family of
processors) and cannot be re-used for another target processors/controllers (Say
ARM11 family of processors).
If the target processor/controller changes, a complete re-writing of the application
using the assembly instructions for the new target processor/controller is required.
Any high level language (like C, C++ or Java) with a supported cross compiler for the
target processor can be used for embedded firmware development.
The most commonly used high level language for embedded firmware application
development is 'C’.
‘C’ is well defined, easy to use high level language with extensive cross platform
development tool support.
Nowadays cross-compilers for C++ is also emerging out and embedded developers are
making use of C++ for embedded application development.
The various steps involved in high level language based embedded firmware development
is same as that of assembly language based development except that the conversion of
source file written in high level language to object file is done by a cross-compiler.
In Assembly language based development it is carried out by an assembler.
The various steps involved in the conversion of a program written in high level language
to corresponding binary file/machine language is illustrated in the figure.
126
The program written in any of the high level languages is saved with the corresponding
language extension (.c for C, .cpp for C++ etc).
Any text editor like ‘Notepad' or 'WordPad' from Microsoft or the text editor provided by
an Integrated Development (IDE) tool can be used for writing the program.
Most of the high level languages support modular programming approach and hence we
can have multiple source files called modules written in corresponding high level language.
The source files corresponding to each module is represented by a file with corresponding
language extension.
Translation of high level source code to executable object code is done by across-compiler.
Each high level language should have a cross-compiler for converting the high level source
code into the target processor machine code.
C51 Cross-compiler from Keil software is an example for Cross-compiler used for
'C' language for the 8051 family of microcontroller.
Conversion of each module's source code to corresponding object file is performed by the
cross-compiler.
Rest of the steps involved in the conversion of high level language to target processor's
machine code are same as that of the steps involved in assembly language based
development.
127
17EC62
Bare minimal knowledge of the memory organisation and register details of the
target processor in use and syntax of the high level language are the only pre-
requisites for high level language based firmware development.
With high level language, each task can be accomplished by lesser number of lines
of code compared to the target processor/controller specific assembly language
based development.
Developer Independency
The syntax used by most of the high level languages are universal and a program
written in the high level language can easily be understood by a second person
knowing the syntax of the language.
High level languages always instruct certain set of rules for writing the code and
commenting the piece of code.
If the developer strictly adheres to the rules, the firmware will be 100% developer
independent.
Portability
Target applications written in high level languages are converted to target
processor/controller understandable format (machine codes) by a cross-compiler.
An application written in high level language for a particular target processor can
easily be converted to another target processor/controller specific application,
with little or less effort by simply re-compiling/little code modification followed
by recompiling the application for the required target processor/controller,
provided, the cross-compiler has support for the processor/controller selected.
This makes applications written in high level language highly portable.
Little effort may be required in the existing code to replace the target processor
specific files with new header files, register definitions with new ones, etc.
This is the major flexibility offered by high level language based design.
128
Mixing Assembly and High Level Language
Certain embedded firmware development situations may demand the mixing of high level
language with Assembly and vice versa.
High level language and assembly languages are usually mixed in three ways:
Mixing Assembly Language with High Level Language
Mixing High Level Language with Assembly Language
Inline Assembly programming
129
17EC62
Mixing the code written in a high level language like 'C' and Assembly language is useful
in the following scenarios:
The source code is already available in Assembly language and a routine written in
a high level language like 'C' needs to be included to the existing code.
The entire source code is planned in Assembly code for various reasons like
optimised code, optimal performance, efficient code memory utilisation and
proven expertise in handling the Assembly, etc. But some portions of the code may
be very difficult and tedious to code in Assembly. For example, 16-bit
multiplication and division in 8051 Assembly Language.
To include built in library functions written in 'C' language provided by the cross
compiler. For example, Built in Graphics library functions and String operations
supported by 'C’.
Most often the functions written in 'C' use parameter passing to the function and returns
value/s to the calling functions.
Parameters are passed to the function and values are returned from the function using
CPU registers, stack memory and fixed memory.
Its implementation is cross compiler dependent and it varies across cross compilers.
130
17EC62
11