Awsm is an event-driven framework for real-time concurrency in embedded systems, written in Nim. It provides an event-driven runtime with hierarchical state machines, suitable for resource-constrained processors with no Memory Management Units (MMU).
This is a rewrite of the concepts of Miro Samek's QP Framework and not a verbatim translation. I'm taking advantage of Nim's features (e.g. strong type system, automatic memory management) where they are valuable.
Copyright 2025 Dean Hall MIT License See LICENSE file for details
- Active Objects: Each Awsm eschews a thread stack in favor of Run-To-Completion (RTC) semantics and an event queue which serializes processing.
 - Hierarchical State Machines: Supports nested states and transitions for automating behavior.
 
- Active objects can:
- process an event atomically and serially from its event queue
 - change its own event handler for the next event
 - spawn child Awsms
 - post events to child Awsms
 - publish events system wide
 
 - Event Dispatching: Efficient event handling and state transitions.
 - Customizable Value Size: Choose between 16, 32, or 64-bit event values at compile time.
 
- Clone the repository from https://github.com/dwhall/awsm
 - Run tests
nimble test 
- Active Object
 - PSiCC2.pdf — Samek, Miro, Practical UML Statecharts in C/C++, Second Edition: Event-driven Programming for Embedded Systems, Elsevier, 2009. ISBN: 978-0-7506-8706-5
 - PSiCC2 Updates+Errata