Introduction to Embedded Systems - A Cyber-Physical Systems Approach
This book strives to identify and introduce the durable intellectual ideas of embedded systems as a technology and as a subject of study. The emphasis is on modeling, design, and analysis of cyber-physical systems, which integrate computing, networking, and physical processes. This book is intended for students at the advanced undergraduate level or the introductory graduate level, and for practicing engineers and computer scientists who wish to understand the engineering principles of embedded systems.
Design and Implementation of the lwIP Stack
LwIP is an implementation of the TCP/IP protocol stack. The focus of the lwIP stack is to reduce memory usage and code size, making lwIP suitable for use in small clients with very limited resources such as embedded systems. In order to reduce processing and memory demands, lwIP uses a tailor made API that does not require any data copying. This report describes the design and implementation of lwIP. The algorithms and data struc- tures used both in the protocol implementations and in the sub systems such as the memory and bu®er management systems are described. Also included in this report is a reference manual for the lwIP API and some code examples of using lwIP.
C++ On Embedded Systems
This October, my team at work switched from C to C++ for embedded firmware development. Many of its features, including classes, automatic resource cleanup, parametric polymorphism, and additional type safety are just as useful on an RTOS or bare metal as they are on a desktop running a general-purpose OS. Using C++ lets us write safer, more expressive firmware.
C++'s automagic is a double-edged sword, however. Some language features depend on system facilities that we don't want to provide in embedded environments.* Wrangling the toolchain can also be difficult. We don't want to completely discard libgcc and libstdc++ since they provide vital facilities like memcpy, atomic operations, and hardware-specific floating-point functions, but we must avoid certain parts of them.
This guide is a short attempt to codify what we've learned while moving our firmware to C++. Hopefully it provides a solid primer.
Open Source in Embedded System Development
This paper introduces the huge range of free and open source software available to the embedded software developer. Hardware modeling, software tool chains, operating systems (RTOS and Linux), middleware and applications are all covered. Today open source is spreading to the hardware world. The paper addresses the advantages and risks associated with using free and open source software, including the issues of quality, support and licensing.
A Multithreaded Real-time Robot for Embedded Design Space Exploration
This thesis introduces an autonomous robot platform for real-time scheduling exper- imentation and benchmark suite to evaluate real-time optimizations and apply modern task scheduling methods. It makes two contributions. First, it presents a reference hardware and software design for a line-following, obstacle-avoiding and maze-solving robot. This robot is based on a small commercially-available product. The software is structured as a multithreaded real- time system for use in evaluating scheduling approaches for cost-sensitive and resource- constrained applications. Second, it provides a detailed design space exploration showing the costs (processor speed and memory) of dierent scheduling approaches (static vs. dynamic and non-preemptive vs. preemptive). It also measures and analyzes each task's timing information and explores the mini- mum microcontroller clock speed under dierent scheduling approaches.
Real-Time Operating Systems and Programming Languages for Embedded Systems
Section 1 describes the main characteristics that a real-time operating system should have.
Section 2 discusses the scope of some of the more well known RTOSs.
Section 3 introduces the languages used for real-time programming and compares the main characteristics.
Section 4 presents and compares different alternatives for the implementation of real-time Java.
Embedded Systems – Theory and Design Methodology
This book addresses a wide spectrum of research topics on embedded systems, including basic researches, theoretical studies, and practical work.
Memory allocation in C
This article is about dynamic memory allocation in C in the context of embedded programming. It describes the process of dynamically allocating memory with visual aids. The article concludes with a practical data communications switch example which includes a sample code in C.
Software Development for Parallel and Multi-Core Processing
The embedded software industry wants microprocessors with increased computing functionality that maintains or reduces space, weight, and power (SWaP). Single core processors were the key embedded industry solution between 1980 and 2000 when large performance increases were being achieved on a yearly basis and were fulfilling the prophecy of Moore's Law. Moore's Law states that "the number of transistors that can be placed inexpensively on an integrated circuit doubles approximately every two years." With the increased transistors, came microprocessors with greater computing throughput while space, weight and power were decreasing. However, this 'free lunch' did not last forever. The additional power required for greater performance improvements became too great starting in 2000. Hence, single core microprocessors are no longer an optimal solution.
An Embedded Object Approach to Embedded System Development
Building an embedded system from an idea to a product is a slow and expensive process requiring a lot of expertise. Depending on the developer’s expertise, the required quantity and price level of the final product, and the time and money available for development, the developer can build a device from different granularity of components, ranging from ready-made platforms, kits, and modules to individual components. Generally, solutions requiring less expertise, time and money produce products with higher production costs. The main contribution of this thesis is the EOC (Embedded Object Concept) and Atomi II Framework. EOC utilizes common object-oriented methods used in software by applying them to small electronic modules, which create complete functional entities. The conceptual idea of the embedded objects is implemented with the Atomi II framework, which contains several techniques for making the EOC a commercially feasible implementation. The EOC and the Atomi II Framework decreases the difficulty level of making embedded systems by enabling a use of ready-made modules to build systems. It enables automatic conversion of a device made from such modules into an integrated PCB, lowering production costs compared to other modular approaches. Furthermore, it also enables an automatic production tester generation due to its modularity. These properties lower the number of skills required for building an embedded system and quicken the path from an idea to a commercially applicable device. A developer can also build custom modules of his own if he possesses the required expertise. The test cases demonstrate the Atomi II Framework techniques in real world applications, and demonstrate the capabilities of Atomi objects. According to our test cases and estimations, an Atomi based device becomes approximately 10% more expensive than a device built from individual components, but saves up to 50% time, making it feasible to manufacture up to 10-50k quantities with this approach.
C++ On Embedded Systems
This October, my team at work switched from C to C++ for embedded firmware development. Many of its features, including classes, automatic resource cleanup, parametric polymorphism, and additional type safety are just as useful on an RTOS or bare metal as they are on a desktop running a general-purpose OS. Using C++ lets us write safer, more expressive firmware.
C++'s automagic is a double-edged sword, however. Some language features depend on system facilities that we don't want to provide in embedded environments.* Wrangling the toolchain can also be difficult. We don't want to completely discard libgcc and libstdc++ since they provide vital facilities like memcpy, atomic operations, and hardware-specific floating-point functions, but we must avoid certain parts of them.
This guide is a short attempt to codify what we've learned while moving our firmware to C++. Hopefully it provides a solid primer.
Stop Guessing – Trace Visualization for RTOS Firmware Debugging
Some decades ago, the embedded industry shifted focus from assembly to C programming. Faster processors and better compilers allowed for raising the level of abstraction in order to improve development productivity and quality. We are now in the middle of a new major shift in firmware development technology. The increasing use of real-time operating systems (RTOS) represents the third generation of embedded software development. By using an RTOS, you introduce a new abstraction level that enables more complex applications, but not without complications.
Transforming 64-Bit Windows to Deliver Software-Only Real-Time Performance
Next-generation industrial, vision, medical and other systems seek to combine highend graphics and rich user interfaces with hard real-time performance, prioritization and precision.Today’s industrial PCs running 64-bit Windows, complemented by a separate scheduler on multicore multiprocessors, can deliver that precise real-time performance on software-defined peripherals.
Open Source in Embedded System Development
This paper introduces the huge range of free and open source software available to the embedded software developer. Hardware modeling, software tool chains, operating systems (RTOS and Linux), middleware and applications are all covered. Today open source is spreading to the hardware world. The paper addresses the advantages and risks associated with using free and open source software, including the issues of quality, support and licensing.
Demystifying digital signal processing (DSP) programming: The ease in realizing implementations with TI DSPs
Introduced by Texas Instruments over thirty years ago, the digital signal processor (DSP) has evolved in its implementation from a standalone processor to a multicore processing element and has continued to extend in its range of applications. The breadth of software development tools for the DSP has also expanded to accommodate diverse sets of programmers. From small, low power, yet “smart” devices with applications such as voice and image recognition, to multicore, high-performance compute platforms performing real-time data analytics, the opportunities to achieve the low-power processing efficiencies of DSPs are nearly endless. The TI DSP has benefited from a relatively unique tool suite evolution making it easy and effective for the general programmer and the signal processing expert alike to quickly develop their application code. This paper addresses how TI DSP users are able to achieve the high performance afforded by the TI DSP architecture, in an efficient, easy-to-use development environment.
What’s a Multicore Microcontroller?
This tutorial answers the question “What’s a multicore microcontroller?”
New Life for Embedded Systems in the Internet of Things
The Internet of Things (IoT) is no longer a fanciful vision. It is very much with us, in everything from factory automation to on-demand entertainment. Yet by most accounts, the full potential of interconnected systems and intelligent devices for changing the way we work and live has barely been tapped. Up until now, IoT software solutions have largely had to be built from scratch with a high degree of customization to specific requirements, which has driven up the cost and complexity of development and deterred many prospective entrants to the market. What have been missing are developer tools that alleviate the costs associated with building the foundational infrastructure—the “plumbing” of their solutions—so they can focus on optimizing the core functionality and bring solutions to market more quickly with less cost. Wind River® is addressing these challenges with new solutions that have the potential to expand the market for IoT by reducing the cost and complexity of development. This document outlines the challenges that IoT poses for developers, and how Wind River solutions can help overcome them.
Real-Time Operating Systems and Programming Languages for Embedded Systems
Section 1 describes the main characteristics that a real-time operating system should have.
Section 2 discusses the scope of some of the more well known RTOSs.
Section 3 introduces the languages used for real-time programming and compares the main characteristics.
Section 4 presents and compares different alternatives for the implementation of real-time Java.
Software Development for Parallel and Multi-Core Processing
The embedded software industry wants microprocessors with increased computing functionality that maintains or reduces space, weight, and power (SWaP). Single core processors were the key embedded industry solution between 1980 and 2000 when large performance increases were being achieved on a yearly basis and were fulfilling the prophecy of Moore's Law. Moore's Law states that "the number of transistors that can be placed inexpensively on an integrated circuit doubles approximately every two years." With the increased transistors, came microprocessors with greater computing throughput while space, weight and power were decreasing. However, this 'free lunch' did not last forever. The additional power required for greater performance improvements became too great starting in 2000. Hence, single core microprocessors are no longer an optimal solution.
Memory allocation in C
This article is about dynamic memory allocation in C in the context of embedded programming. It describes the process of dynamically allocating memory with visual aids. The article concludes with a practical data communications switch example which includes a sample code in C.
C++ On Embedded Systems
This October, my team at work switched from C to C++ for embedded firmware development. Many of its features, including classes, automatic resource cleanup, parametric polymorphism, and additional type safety are just as useful on an RTOS or bare metal as they are on a desktop running a general-purpose OS. Using C++ lets us write safer, more expressive firmware.
C++'s automagic is a double-edged sword, however. Some language features depend on system facilities that we don't want to provide in embedded environments.* Wrangling the toolchain can also be difficult. We don't want to completely discard libgcc and libstdc++ since they provide vital facilities like memcpy, atomic operations, and hardware-specific floating-point functions, but we must avoid certain parts of them.
This guide is a short attempt to codify what we've learned while moving our firmware to C++. Hopefully it provides a solid primer.
Introduction to Embedded Systems - A Cyber-Physical Systems Approach
This book strives to identify and introduce the durable intellectual ideas of embedded systems as a technology and as a subject of study. The emphasis is on modeling, design, and analysis of cyber-physical systems, which integrate computing, networking, and physical processes. This book is intended for students at the advanced undergraduate level or the introductory graduate level, and for practicing engineers and computer scientists who wish to understand the engineering principles of embedded systems.
C++ Tutorial
These tutorials explain the C++ language from its basics up to the newest features of ANSI-C++, including basic concepts such as arrays or classes and advanced concepts such as polymorphism or templates. The tutorial is oriented in a practical way, with working example programs in all sections to start practicing each lesson right away
Memory allocation in C
This article is about dynamic memory allocation in C in the context of embedded programming. It describes the process of dynamically allocating memory with visual aids. The article concludes with a practical data communications switch example which includes a sample code in C.
Open Source in Embedded System Development
This paper introduces the huge range of free and open source software available to the embedded software developer. Hardware modeling, software tool chains, operating systems (RTOS and Linux), middleware and applications are all covered. Today open source is spreading to the hardware world. The paper addresses the advantages and risks associated with using free and open source software, including the issues of quality, support and licensing.
Real-Time Operating Systems and Programming Languages for Embedded Systems
Section 1 describes the main characteristics that a real-time operating system should have.
Section 2 discusses the scope of some of the more well known RTOSs.
Section 3 introduces the languages used for real-time programming and compares the main characteristics.
Section 4 presents and compares different alternatives for the implementation of real-time Java.
Embedded Systems – Theory and Design Methodology
This book addresses a wide spectrum of research topics on embedded systems, including basic researches, theoretical studies, and practical work.
Design and Implementation of the lwIP Stack
LwIP is an implementation of the TCP/IP protocol stack. The focus of the lwIP stack is to reduce memory usage and code size, making lwIP suitable for use in small clients with very limited resources such as embedded systems. In order to reduce processing and memory demands, lwIP uses a tailor made API that does not require any data copying. This report describes the design and implementation of lwIP. The algorithms and data struc- tures used both in the protocol implementations and in the sub systems such as the memory and bu®er management systems are described. Also included in this report is a reference manual for the lwIP API and some code examples of using lwIP.
An Embedded Object Approach to Embedded System Development
Building an embedded system from an idea to a product is a slow and expensive process requiring a lot of expertise. Depending on the developer’s expertise, the required quantity and price level of the final product, and the time and money available for development, the developer can build a device from different granularity of components, ranging from ready-made platforms, kits, and modules to individual components. Generally, solutions requiring less expertise, time and money produce products with higher production costs. The main contribution of this thesis is the EOC (Embedded Object Concept) and Atomi II Framework. EOC utilizes common object-oriented methods used in software by applying them to small electronic modules, which create complete functional entities. The conceptual idea of the embedded objects is implemented with the Atomi II framework, which contains several techniques for making the EOC a commercially feasible implementation. The EOC and the Atomi II Framework decreases the difficulty level of making embedded systems by enabling a use of ready-made modules to build systems. It enables automatic conversion of a device made from such modules into an integrated PCB, lowering production costs compared to other modular approaches. Furthermore, it also enables an automatic production tester generation due to its modularity. These properties lower the number of skills required for building an embedded system and quicken the path from an idea to a commercially applicable device. A developer can also build custom modules of his own if he possesses the required expertise. The test cases demonstrate the Atomi II Framework techniques in real world applications, and demonstrate the capabilities of Atomi objects. According to our test cases and estimations, an Atomi based device becomes approximately 10% more expensive than a device built from individual components, but saves up to 50% time, making it feasible to manufacture up to 10-50k quantities with this approach.
Demystifying digital signal processing (DSP) programming: The ease in realizing implementations with TI DSPs
Introduced by Texas Instruments over thirty years ago, the digital signal processor (DSP) has evolved in its implementation from a standalone processor to a multicore processing element and has continued to extend in its range of applications. The breadth of software development tools for the DSP has also expanded to accommodate diverse sets of programmers. From small, low power, yet “smart” devices with applications such as voice and image recognition, to multicore, high-performance compute platforms performing real-time data analytics, the opportunities to achieve the low-power processing efficiencies of DSPs are nearly endless. The TI DSP has benefited from a relatively unique tool suite evolution making it easy and effective for the general programmer and the signal processing expert alike to quickly develop their application code. This paper addresses how TI DSP users are able to achieve the high performance afforded by the TI DSP architecture, in an efficient, easy-to-use development environment.







