Global training solutions for engineers creating the world's electronics

Embedded Software / Arm KnowHow

Arm Cortex-M1 for FPGAs

Jens Stapelfeldt from Doulos describes the main features of the Arm Cortex-M1 architecture, which is a microcontroller specialized for implementation on FPGA devices.

Introduction to CMSIS for Arm Cortex-M

Jens Stapelfeldt from Doulos describes CMSIS, the Arm Cortex Microcontroller Software Interface Standard, which provides an abstraction layer for programming all Cortex M microcontrollers.

Using the Cortex-M3/M4 Flash Patch Breakpoint Unit

David Cabanis from Doulos explains how to use the flash patch breakpoint unit of the Arm Cortex-M3 and M4 processors.


Using your C Compiler to Exploit NEON

Dave Cabanis from Doulos explains how to exploit the NEON coprocessor unit found in the ARM Cortex A processor family from your C code.

Getting started with Cortex-M3 CMSIS programming

David Cabanis from Doulos explains the basics of creating a CMSIS compliant, Cortex-M3 based project and taking it through the MDK toolchain.

Retargeting a C Library Function

David Cabanis from Doulos touches on the topics of semi-hosting and standard C library function retargeting. In addition, the Cortex-M3 Instrumentation Trace Macrocell (ITM) will be put to use as a mean to communicate with a debug host.

Programming the MCBSTM32 Evaluation Board

David Cabanis from Doulos looks at programming the Keil Cortex-M3 evaluation board (MCBSTM32) using a CMSIS compliant approach whilst accessing specific device's peripherals.

Getting started with CMSIS - The Cortex Microcontroller Software Interface Standard

CMSIS supports developers and vendors in creating reusable software components for Arm® Cortex®-M based systems. This 17-page tutorial (pdf), created by Doulos Arm experts, provides a thorough introduction to the new standard and includes two tutorial examples.

IoTSF Security Tutorial

Dr David Long, Doulos Principal Member Technical Staff, presents the IoTST Security Tutorial which provides an overview of open-source and free tools that are suitable to use for security testing of IoT edge devices based on a Cortex-M processor. 

Secure Embedded System Development Tutorial

Dr David Long, Doulos Principal Member Technical Staff, looks at how to get started on a "small embedded" system built around a microcontroller and firmware running "Bare Metal" or with a Real Time Operating System (RTOS). 

Embedded C programming for Cortex-M Processors
In this extended presentation, David Cabanis from Doulos explains the basics of embedded C programming in the context of Cortex-M processors and how to bring a bare metal system to life. Amongst the covered topics you will find: Cortex-Mx startup code and vector tables, linker scripts, CMSIS compliant C code and assembler programming.

Using FreeRTOS on the Arm/NXP mbed
Frank Mölendörp from Doulos explains how to run the FreeRTOS on the Arm/NXP mbed prototyping kit.

uClinux on an Arm Cortex-M4: a cost-benefit analysis
Frank Mölendörp from Doulos gives a short introduction to the possibilities and the limitations of running uClinux on a small microcontroller.

Using the Cortex-M3/M4 Flash Patch and Breakpoint Component
Marcus Harnisch from Doulos explains how to use the Cortex-M Flash Patch and Breakpoint unit to make firmware updates in an MCU-vendor independent manner.

Migrating from AHB to AXI based SoC Designs
Marcus Harnisch from Doulos explains the evolution of the Arm bus architecture from the original AHB standard through to the latest AXI4-Stream and AXI4-Lite variants.

Using your C compiler to exploit NEON™ Advanced SIMD
With the v7-A architecture, Arm has introduced a powerful SIMD implementation called NEON™. NEON is a coprocessor which comes with its own instruction set for vector operations. While NEON instructions could be hand coded in assembler language, ideally we want our compiler to generate them for us. This paper explains how the RealView compiler tools (RVCT) and other modern compilers use a blend of sophisticated analysis techniques and language extensions to fulfill their job.

The quickest way to develop your Arm Cortex-M based product
The ARMArm Microcontroller Prototyping System (MPS) is based on a platform using FPGAs and allows the fast and easy evaluation and development of an Arm Cortex-M system. This paper will discuss the possibilities and limits of this system, will reflect on the first experience and shows the system design flow with the available hardware and software IP.

Product Migration from FPGA (Cortex-M1) to a Standard Arm Based Microcontroller
Introducing the Arm Cortex-M1 and Cortex-M3 architectures, this technical paper shows how to migrate a product from an FPGA to a standard Arm-based microcontroller. It was first presented at the Embedded World Conference 2008.

Implementation of a Cordic Algorithm using the Actel Cortex M1 Dev-Kit
In this extensive tutorial Doulos Arm experts discuss the use of the Actel Cortex-M1 Development Kit to demonstrate how to create a microprocessor-based system, along with user-defined hardware functions coded in VHDL, in a single FPGA device.

Commands Sheet for Linux, Yocto & Git
This "Linux, Yocto & Git" commands booklet from the Doulos Embedded technical team, provides a handy reminder of how to work on the command line, with examples of how to work with files and folders, searching, managing archives and much more.


Embedded Linux: Debugging User Space Seg Fault
In this article Simon Goda from Doulos Embedded takes a brief look at some of the tools there are available in a typical embedded Linux development environment, which can help track down problems.

Here you will find some short technical articles relating to the use of the Arm instruction set.

Configuring (X)Emacs for Arm RVCT

In this article Marcus Harnisch from Doulos introduces Emacs as an editor that can be customized easily to support Arm's RealView Compilation Tools (RVCT).

Implementing Semaphores on Arm processors

Semaphores are used to manage access to a shared resource. Depending on the type of semaphore, one or more clients may be granted access.

Efficient byte swapping of data blocks in Armv6 and Armv7-A/R

Since the introduction of the Arm11 processor family, the Arm instruction set supports on-the-fly switching of the current endian mode. Natively a little endian architecture, the processor can be put into a big endian mode to process chunks of data in that format. DSPs, network adapters and similar peripherals might return processed data in big endian format.

For further information about the Doulos Arm training portfolio visit

Arm is a registered trademark, and Cortex is a trademark of Arm Holdings Plc.

Introduction to C++ casting issues

This article example helps you to understand how to make good decisions using implict, explict conversions and casting in C++.

Introduction to C++ operator overloading

This article helps you understand how C++ operator overloading provides useful abstraction, both inside a class and outside.