What am I currently using?
I have been working with 8bit Atmel Atmega 328P devices for a little while. The hardware works, it is affordable, the documentation and community support is good. There is no good reason to stop using this hardware where appropriate.
Why do I want to change?
One thing that has pushed me look into something a little different has been the Arduino development environment. Whilst it enables a good entry point into programming the 328P it does so at the expense of hiding away some of the detail. I found that I reached the point where I needed to rediscover the hidden bits to do what I needed. I achieved this by using a separate Makefile I found online. It continued to use the installed Arduino Libraries but gave me more of the control I wanted. Even this though is not quite enough control. The Makefile is still expecting Arduino compatible files. These are slightly different from the standard C/C++ files I wish to create.
My reason for wanting to create plain C/C++ files is to remove the dependency on the Arduino platform. Overtime the Arduino platform changes and recently I had to fix a previously working program to handle the changes in its libraries. The way to solve this is to go through the process of making a customised Makefile that is not dependant on the Arduino libraries and will accept standard C/C++ libraries. This would be quite a bit of work. If I am going to go to the trouble of doing this do I need to stay on the same hardware?
Testing programs has also had some limitations on the Atmega devices. Whilst it has been possible to toggle an LED or send a message via a serial terminal I have not had step-by-step control over program execution. This functionality is available via the debugWire interface but brings with it a reliance on Atmel Studio which only runs on Windows. Using Linux this has not been an option for me.
Why do I want to develop on ARM devices?
ARM devices interest me. The idea behind them is that a processing core design is developed by ARM and then licensed out to manufacturers. A manufacturer will then add its own bits and pieces around the core and make them into a chip. The result is that there are many chips around from many manufacturers each with very different capabilities yet all with the same basic core. The cores themselves offer very different capabilities:
Cortex-M Series – Low Cost, Low Power, Microcontrollers.
Cortex-R Series – Embedded Real-time applications.
Cortex-A Series – High Performance Processor for Operating Systems.
I am only planning to develop on the Cortex-M series devices but my hope is that by doing so it may allow me to transition more easily in future.
What do I need for ARM development?
I am going to need some hardware to program, a method of compiling code for it, a method of putting the compiled code onto the hardware and a method of testing it. In my case I intend to use a Linux system as my development platform and require all tools to be compatible and where possible open-source.
Back to Index