Consistent Overhead Byte Stuffing
Byte stuffing is a process that transforms a sequence of data bytes that may contain ‘illegal’ or ‘reserved’ values into a potentially longer sequence that contains no occurrences of those values. The extra length is referred to in this paper as the overhead of the algorithm. To date, byte stuffing algorithms, such as those used by SLIP [RFC1055], PPP [RFC1662] and AX.25 [ARRL84], have been designed to incur low average overhead but have made little effort to minimize worst case overhead. Some increasingly popular network devices, however, care more about the worst case. For example, the transmission time for ISM-band packet radio transmitters is strictly limited by FCC regulation. To adhere to this regulation, the practice is to set the maximum packet size artificially low so that no packet, even after worst case overhead, can exceed the transmission time limit. This paper presents a new byte stuffing algorithm, called Consistent Overhead Byte Stuffing (COBS), that tightly bounds the worst case overhead. It guarantees in the worst case to add no more than one byte in 254 to any packet. Furthermore, the algorithm is computationally cheap, and its average overhead is very competitive with that of existing algorithms.
PID Without a PhD
PID (proportional, integral, derivative) control is not as complicated as it sounds. Follow these simple implementation steps for quick results.
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.
Reed-Solomon Error Correction
[Best paper on Reed-Solomon error correction I have ever read -- and it's from the BBC!] Reed-Solomon error correction has several applications in broadcasting,in particular forming part of the specification for the ETSI digital terrestrial television standard, known as DVB-T. Hardware implementations of coders and decoders for Reed-Solomon error correction are complicated and require some knowledge of the theory of Galois fields on which they are based. This note describes the underlying mathematics and the algorithms used for coding and decoding,with particular emphasis on their realisation in logic circuits. Worked examples are provided to illustrate the processes involved.
Lessons in Electric Circuits - Volume III - Semiconductor
This book covers all of the common semiconductor devices and their principles of operation. However, the true value of this reference is in the fact that it provides key circuits and applications where they come in handy. A few of the devices that are covered in this book are Bipolar junction transistors, diodes, JFETs, thyristors, OPAMPs and FETs. This book will be a good reference in your library that has a clear style of explanation.
Interrupt handling in an ARM processor
This document is going to guide you at every step as you sit down to design the interrupt handling in software for an ARM system.
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
This is the first chapter in the book Embedded Systems Hardware for Software Engineers.
Time in Wireless Embedded System
Wireless embedded networks have matured beyond academic research as industry now considers the advantages of using wireless sensors. With this growth, reliability and real-time demands increase, thus timing becomes more and more relevant. In this dissertation, we focus on the development of highly stable, low-power clock systems for wireless embedded systems. Wireless embedded networks, due to their wire-free nature, present one of the most extreme power budget design challenges in the field of electronics. Improvements in timing can reduce the energy required to operate an embedded network. However, the more accurate a time source is, the more power it consumes. To comprehensively address the time and power problems in wireless embedded systems, this dissertation studies the exploitation of dual-crystal clock architectures to combat effects of temperature induced frequency error and high power consumption of high-frequency clocks. Combining these architectures with the inherent communication capabilities of wireless embedded systems, this dissertation proposes two new technologies; (1) a new time synchronization service that automatically calibrates a local clock to changes in temperature; (2) a high-low frequency timer that allows a duty-cycled embedded system to achieve ultra low-power sleep, while keeping fine granularity time resolution offered only by high power, high frequency clocks.
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.
Bare-metal programming for ARM - A hands-on guide
The subject of this ebook is bare-metal programming in C for an ARM system. Specifically, the ARMv7-A architecture is used, which is the last purely 32-bit ARM architecture, unlike the newer ARMv8/AArch64. The -A suix in ARMv7-A indicates the A profile, which is intended for more resource-intensive applications. The corresponding microcontroller architecture is ARMv7-M.
Five Steps to Improving Security in Embedded Systems
In today’s increasingly interconnected world, security breaches are becoming ever more prevalent, with escalating complexity challenges. How can embedded device developers balance the need for tighter security with competing business and market demands? This paper outlines five steps for building additional security assurance into embedded devices by considering the whole product lifecycle.
Interface Protection for HDMI
The High-Definition Multimedia Interface (HDMI) combines a high-speed unidirectional TMDS data link with low speed, bidirectional control and status links (DDC and CEC) and configuration protocols in a single user-friendly highperformance connector.
Creating a State-of-the Art, Cost Effective Energy Harvesting Bluetooth® Low Energy Switch
As IoT rapidly grows into new markets such as MHealth, Agriculture 4.0, and building automation, new questions are being raised about the energy required to support its growth. Within the industry, we see a broad spectrum of power requirements.
Boosting Performance Oscilloscope Versatility, Scalability Whitepaper
Rising data communication rates are driving the need for very high-bandwidth real-time oscilloscopes in the range of 60-70 GHz. These instruments are essential for validating and debugging new designs in coherent optical modulation analysis, high energy physics research, high speed data communications and other areas. With the DPO70000SX Performance Oscilloscope series, Tektronix delivers real-time signal acquisition with an ultra-high bandwidth of 70 GHz, along with a real-time sample rate of 200 GS/s (5ps/sample resolution), making it ideal for such applications.
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.
Enhanced Sample Rate Mode Measurement Precision
The low-noise system architecture and the tailored frequency response employed in the HDO4000A, HDO6000A, HDO8000A and MDA800A series provides the foundation for enhancing ADC sample rates through additional techniques. In this case, carefully constructed filters combined with a pristine front-end amplifier and a frequency response carefully limited to 1 GHz provide the opportunity to provide more measurement precision than would otherwise be possible. The technique utilized to achieve higher measurement precision is interpolation, and this technique is used by default as an Enhanced Sample Rate up to 10 GS/s. By integrating the Enhanced Sample Rate functionality with the normal Timebase controls for Sample Rate, Time and Acquisition Memory adjustment, the oscilloscopes are optimized for best waveform signal fidelity in all situations.
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.
Improving Battery Management System Performance and Cost with Altera FPGAs
The purpose of this white paper is to evaluate improvements to Battery Management System (BMS) performance and cost with Altera® FPGAs. In many high-voltage battery systems, including electric vehicles, grid attached storage and industrial applications, the battery is a significant portion of the system cost, and needs to be carefully managed by a BMS to maximize battery life and to optimize charging and discharging performance. This white paper presents the BMS functional requirements for these applications and outlines existing BMS architectures. Key BMS architectural challenges are discussed and opportunities for Altera devices are identified. For each of these opportunities, the performance and cost of the existing solution are compared with Altera FPGA solutions. Altera devices provide architectural flexibility, scalability, customization, performance improvements, and system cost savings in BMS applications.
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.
Bare-metal programming for ARM - A hands-on guide
The subject of this ebook is bare-metal programming in C for an ARM system. Specifically, the ARMv7-A architecture is used, which is the last purely 32-bit ARM architecture, unlike the newer ARMv8/AArch64. The -A suix in ARMv7-A indicates the A profile, which is intended for more resource-intensive applications. The corresponding microcontroller architecture is ARMv7-M.
Beginning Microcontrollers with the MSP430 - Tutorial
From the Preface: I decided to write this tutorial after seeing many students struggling with the concepts of programming the MSP430 and being unable to realize their applications and projects. This was not because the MSP430 is hard to program. On the contrary, it adopts many advances in computing that has allowed us to get our application running quicker than ever. However, it is sometimes difficult for students to translate the knowledge they acquired when studying programming for more traditional platforms to embedded systems.
PID Without a PhD
PID (proportional, integral, derivative) control is not as complicated as it sounds. Follow these simple implementation steps for quick results.
CPU Memory - What Every Programmer Should Know About Memory
As CPU cores become both faster and more numerous, the limiting factor for most programs is now, and will be for some time, memory access. Hardware designers have come up with ever more sophisticated memory handling and acceleration techniques–such as CPU caches–but these cannot work optimally without some help from the programmer. Unfortunately, neither the structure nor the cost of using the memory subsystem of a computer or the caches on CPUs is well understood by most programmers. This paper explains the structure of memory subsystems in use on modern commodity hardware, illustrating why CPU caches were developed, how they work, and what programs should do to achieve optimal performance by utilizing 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.
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++ 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
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.
PIC Microcontrollers - Programming in C
If you haven’t done it so far then it’s high time to learn what the microcontrollers are and how they operate. Numerous illustrations and practical examples along with detailed description of the PIC16F887 will make you enjoy your work with the PIC microcontrollers







