A stackless RTOS

Similar projects worth following
There are many RTOS implementations readily available: FreeRTOS, embOS, UCOS to name a few. All these implementation provide a mechanism upon which the context of a task (it's state, usually the callstack and register values) is preserved when the RTOS changes from one task to another, thereby ensuring that when tasks are re-executed they resume as if they had not been interrupted by another task.

While preserving context is useful, it is also wasteful. When a task is created, a block of RAM must be allocated to contain the context. These blocks of RAM usually have minimum size requirements, making the creation of multiple tasks impossible on smaller embedded systems.

NOS attempts to remedy this situation by creating an RTOS where context is not preserved. In this fashion, tasks are lightweight, task switches are quick, and RAM is saved for other uses.

NOS (Not an Operating System) is not a novel concept. In fact, certain RTOS implementations already include CoRoutine implementations for this exact reason.

A list of already existing implementations include:

While these do provide stackless tasks, they all come with their own set of limitations. Some of these include:

  • Un-intuitive API.
  • Lack of a coroutine scheduler.
  • Inability to create multiple coroutines with the same body.

NOS tries to address all of these short-comings, and provide some additional features as well.

In all honesty, it seems silly to implement an stackless RTOS when saving the context is easy to implement and useful. Then again, it's also silly that RTOS' such as embOS needs at least 80 bytes just to implement a simple LED blinking task.

View project log

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates