Arm Mbed OS support forum

Mbed OS, what does it really mean?


I hope this is the right place for this question.

I have been digging through the new site, and tools available such as yotta and the descriptions of testing with GreenTea etc.

I found myself thinking about all of this and what it really means for users of mbed platforms. So, if someone can address the following questions I would appreciate it.

  1. mbed 3.0 vs 2.0? What differences will there be and will code written using the mbed 2.0 sdk work with 3.0?

  2. mbed OS, what is it? I know it means operating system for mbed platforms, but how will that change the user experience and the way they develop for mbed platforms. Will users of mbed 3.0 have to use mbed OS?

  3. Yotta appears to be a tool of tools for building modules and testing them. Is this correct? Can it, or GreenTea be used for testing/building code written with mbed 2.0, i.e. not modules? I am really interested in learning to use the testing frameworks offered and if I they are even appropriate for what I am doing, writing libraries for components(i.c), or shields.

  4. Is the following snippet, from the example ‘app.cpp’, starting the mbed os scheduler? what is minar? Where can I find out more about mbed os, how to use it, and why I would want to? is the repo the only current source of info. The getting started guide for mbed os simply directs you to yotta, they are different things to my understanding.

void app_start(int, char**) { minar::Scheduler::postCallback(blinky).period(minar::milliseconds(500)); }

Thanks for any info on these topics,

Hello All,

I dug deeper on the mbed os repo and found more documentation on minar, starting to make more sense now.


Ok good to hear – if you still have any questions let us know and we’ll do our best to answer!


One thing that still isn’t clear to me is if users of mbed 3.0 will have to use mbed OS, or if mbed 3.0 will offer a new and improved compiler/IDE that gives users the option of developing simple round-robin code, or a module for mbed OS by including the yotta tool package into the new IDE?

Additionally, what would be the recommended way of writing libraries for components/shields moving forward? Would writing drivers for mbed OS that support the shield/component be the prefered way, or the way we have been doing it?

What if a user didn’t want to use mbed OS? Not all applications require an OS, in fact I would say most embedded applications don’t from my experience. Is this movement simply because the micros used today have the memory and resources available to implement an OS, or is it really needed, and why?

Thanks, just curious and trying to understand the direction being taken.

1 Like

Hi Justin - great questions. All the drivers, api, tools etc are part of mbed OS or will require a dependency on a mbed OS module in one way or another. This isnt much different than the existing mbed SDK drivers relying on MBED_ASSERT or the EthernetInterface relying on mbed-rtos. At some point there will be a dependency. Hope this satisfies some curiosities. Let me know if you have more specifics :smile:

Thank you Sam

hello all,

I am new to mbed 3, so i have exactly the same questions as above.
Pity that those interesting questions are not answered because the questioner found the answers himself.
So please can someone elaborate on all questions 1->4 please?
I want to add a questions
3b: what is greentea?
4b: what is appstart (what happened to main()?) why has it parameters int and char** (pointer to char sequences?)…
4c: what are the main differences between mbed 2 sdk and mbed 3 sdk, and are they compatible?
@jamcro01, @j31 : these are valuable questions, can you help answering those questions for newbies such as me please? :smile:

thanks all!

Hello peefour,

Please see the following link for a description of GreenTea which is a testing framework.

If you dig into the git repo of mbed-os you will find more info on the scheduler minar which should shed some light on appstart. Please see the following links.

I am still digging into this and learning, so I really don’t have much else to offer.

Be curious and dig around in the repo.


thanks @j31!

on minar: we chose app_start instead of main as the application entry point because the code in app_start should return in a timely fashion (so that the scheduler can proceed and schedule other functions). The name main confuses people into thinking that it’s OK to block indefinitely (which it isn’t!).

The arguments are there for forwards compatibility, in case we introduce a way for startup arguments to be passed through to app_start. (You can imagine that it would cause a lot of pain to change the app_start API later, after there are many programs that use it.)

The classic mbed 2 SDK and mbed OS are not compatible: apart from the introduction of the scheduler, a number of APIs have changed. Many new things will also be added to mbed OS that aren’t available in mbed 2, such as the sockets and mbed-client APIs.

Speaking of mbed-rtos, here’s a question: what replaces mbed-rtos in mbed OS? I see that “rtos.h” is no longer a valid include. How are threads, mutexes, queues, etc supported by mbed OS? Or should an mbed OS developer use CMSIS-rtos directly?

So I assume all the documentation at must be for mbed 2.0 as the examples start from a main() function ?

So I assume all the documentation at must be for mbed 2.0 as the examples start from a main() function ?

Yes, I believe is the website for mbed 2.0; the website for mbed 3 is (note .org vs .com).

BTW, there are now two mbed OS terms, one is mbed OS 3.0 and one is mbed OS 5.0 . Its confusing, i know, so heres the breakdown for future reference.

mbed OS 3.0:
- built using yotta
- Event based minar is the heart of it (ie no RTOS support)
- not backwards compatible with mbed ‘classic’, aka mbed 2.0, aka mbed SDK
- no online compiler integration
- Now defunct

mbed OS 5.0:
- backwards compatible with mbed 2.0 (actually a superset, includes mbed SDK functions and adds more like NSAPI for networking and RTOS support among other things)
- RTOS at the core (all SDK API’s are now threadsafe), will probably add event based scheduling support in the future (a la minar)
- compiles in online compiler, or offline with mbed-cli or other 3rd party IDE’s
- The way forward for mbed development

Awesome thanks,

A little feedback. I have been experimenting with mbed cli and being able to compile for targets that aren’t publicly supported yet.

Fortunately, the target I am interested in has been added to the library, but hasn’t been publicly released on the mbed compiler yet. So, when asking for a list of supported targets from the CLI, I am told it isn’t supported. I found a way to get the tools to say it is though, but don’t know if it is correct.

If I go into .tools/latest_targets.json and add the description found in targets.json, I get support for the target. I am using the evkit for the target and not the hardware that has been targeted, but I found that if I edit ‘PinNames.h’ for the evkit everything appears to be working. I can build the library and export to my offline IDE just fine, just don’t know if this is the right way to do it.

The feedback part is, there needs to be an updated page on adding support for new targets/boards using the new tools.


Instructions / porting guide for mbed OS 5.0 is in the works. Thanks for the feedback!