mbed is a development framework for ARM microcontrollers (well it looks like Arduino for ARM to me), officially supported by ARM. Mbed.org also has online IDE and compiler. The simplicity of the framework gives you the feeling that anybody capable of producing a functional specification will be capable of generating production quality code. Unfortunately, this is still not quite true, but using a framework such as mbed does greatly simplify the initial development efforts by abstracting the hardware layer.
It may become a bit more complicated if you want to do something more obscure (not supported by the base library) with the hardware 😉 One thing worth a mention should be that by heavily abstracting hardware you can easily port your software between different processors.
To start using it you should simply signup on developer.mbed.org for a new account. After that, you first need to add a hardware platform to it and create a project. Then start coding… Compile button will give you a downloadable binary file (well, if you didn’t make any errors in the code).
After just a few minutes I was able to program the code into a microcontroller and make it do some led / button magic. I used one of STM32 Nucleo boards to test the program.
To program a Nucleo you simply need to save the downloaded file to the disk it creates on connecting it to your PC. (I think there is also a plugin available that programs the board directly with no need to copy files.)
Autocomplete / autosuggestion of the online IDE seems to be a bit on the slow side and does not seem to know all the things (like the board level definitions for example). Also, IDE does not do any live code checking, you will have to compile it to get the error messages.
I can’t really comment on the compiler speed and quality, but I guess it is the official GCC or Keil compiler in the background, so it shouldn’t be too bad 🙂
Mbed seems to use git for version control and collaboration, which is pretty standard. The collaboration flow (https://developer.mbed.org/handbook/Collaboration) seems to be simple even if you haven’t used git or other version control software before.
Mbed also lets you use the RTX real-time operating system which is a great thing for a bit more demanding projects.
One function that I really miss is debugging (SWD, JTAG). This means that you have to pass debug information using one of the classic communication channels (eg. serial port), but this involves additional coding effort. Also, it is nearly impossible to debug some bugs/errors this way (eg. rtos behavior, hardware and core faults, framework bugs). One of the things I also like is the export option which enables you to use the code in alternative IDE.