There are situations where what you need is an API of all the low level register access definitions and functions/Macros or whatever you want to call them, routines even… and you want to write your own code the best way you know how, whether using an infinite while loop in main or using an embedded operating system like FreeRTOS. The main focus at the beginning of writing embedded software is figuring out the memory mapping, startup and hardware drivers. Once you have those in place and test them roughly, you want to write application code. The tools provided by manufacturer as an IDE provide you with a way to create a new project for a specific micro-controller, putting together the MCU header file, the linker script, the startup script and potentially the peripheral registers declarations or drivers.
For ARM®, there is of course the Cortex® Microcontroller Software Interface Standard (CMSIS) that helps abstract hardware access. Its implementation provides a standard interface for the core of the micro-controller, the ARM CPU and peripherals. It has been extended beyond the core to interfaces like CMSIS-DAP debug and later to others including Drivers, DSP, RTOS-API, Software Packs and SVDs which are System View Descriptions for peripherals e.t.c. This has kind of standardized software interfaces make porting code to new microcontrollers easier and encourage code re-use. It is, I believe the reason why Mbed, FreeRTOS and other operating systems have been ported to ARM microcontrollers and support for different families of these microcontrollers added so fast. It has also allowed GUI tools developers add more features to their software suites to better help the developer debug hardware. Stuff like peripheral register views were not available in eclipse when I started writing tutorials on how to install vanilla eclipse, then add hardware debug plugins. USBDM is one debug software that I loved to learn about. GNU ARM Eclipse Plugins by Liviu Ionescu is another success story for me. I loved that at a time when I could not afford to procure the then CodeRed suite license, I could still own my hardware by adopting purely open-source tools like OpenOCD, USBDM, GNU-ARM toolchain and Eclipse IDE. Continue reading “Dynamics of Embedded Systems Development for ARM based Microcontrollers”