SimpleOS is a lightweight, low-level operating system designed specifically for the ATmega328P microcontroller, created entirely from scratch without using the Arduino framework or standard libraries. Its main goal is to provide developers with a flexible and efficient environment for embedded programming, using a structured and object-oriented approach in C++.
The system is composed of independent modules, including:
- A custom thread execution system using hardware timers and the watchdog.
- A virtual RAM section tracker for memory diagnostics.
- Native support for UART and I2C communication interfaces.
- A modular namespace-based architecture, enabling better organization and scalability.
- A custom type system (
Number<T>,List<T>, etc.) and utility concepts to abstract low-level operations.
SimpleOS is ideal for educational purposes, hobbyist microcontroller projects, and for developers who want to explore how to design an OS-level system from the ground up on constrained hardware.
- Implemented byte read interrupt routine with 64 byte virtual input buffer.
- Implementation of the
sendandreceivemethods.
- Some classes have been moved to the
Instancenamespace, which contains instances of system dependencies.
- Removed
GPIOclass.
The Core library of I2C (TWICore.h) was developed.
- Namespace
Timehas been added.
- The
IsPrimitiveoperator checks whether the data type is primitive or not.
TypeOfoperator has been enabled.
- Core:
TWICore.h
- Utils:
IsPrimitive.h
A library of thread executors was developed that work from the interrupts generated by Watchdog and TIMER0. Through the Executors.h library, it is possible to choose which executor the thread will be assigned to.
A RamInfo.h library was developed that contains status information of each RAM subsection.
BssSection.h: Get status information fromBSSsection.DataSection.h: Get status information fromDatasection.HeapSection.h: Get status information fromHeapsection.StackSection.h: Get status information fromStacksection.
- Namespace
Nativehas been renamed forCore. - Namespace
Errorhas been added. - Namespace
Handlerhas been added. - The
Ticks.hclass has been renamed toCounter.h - The macros were divided into 4 files
HardwareMacros.hSyntaxMacros.hSystemMacros.hUtilityMacros.h
TypeOfoperator has been disabled.
-
Concepts:
Identifiable.hPrintable.h
-
Core:
TMR0Core.hResetCore.hResetType.h
-
String
SimpleString.h
-
Interrupts
Timer0.h- Executors
Executors.hThreadExecutor.hTimerExecutor.hWatchdogExecutor.h
-
RAM
RamInfo.h- Sections
DataSection.hBssSection.hHeapSection.hStackSection.h
-
Threads
Thread.h
-
SystemStatus
ErrorCode.hStatus.h
-
Counter
Counter.h
- String
String.h
- Concepts
Default.h(Default concept)
- Managers:
MemoryManager.hTaskManager.hThreadManager.h
- Task:
Task.hTaskAdapter.hTaskController.hTaskProperties.hTaskLifecycle.hTaskState.h
- RamAllocator:
Heap.hRamAllocator.h
- Namespace
Operatorshas been renamed forUtils.
- The standard heap memory size of the system has been increased to 384 addresses (768 bytes).
List<T>ArrayList<T>
- Decrement, increment and bitwise operators have been implemented in the
Number<T>class - The
LinkedList<T>andArrayList<T>classes implementList <T>.
C_stringhas been changed toCString.Hashcodealias removed.- Alias of primitive types were changed to class
Number <T>.
| Alias | Type |
|---|---|
Char |
Number<char> |
UChar |
Number<unsigned char> |
Int |
Number<int> |
UInt |
Number<unsigned int> |
Long |
Number<long> |
ULong |
Number<unsigned long> |
Float |
Number<float> |
Double |
Number<double> |
Bool |
Number<bool> |
- The
Operator << (Const String & Data)is temporarily removed from theUARTclass for optimization. UARTnow prints boolean types.
- A bug was identified in the
mallocmethod of theRamAllocatorclass. It will be fixed in the next updates.
- System macro removed:
conceptualize - The
Systemclass now inherits from theGPIOclass.
Methodsclass creation.- The
Systemclass now inherits from the Watchdogtimer class. - The
Systemclass now inherits from the Methods class. Person.htest class was removed.- Addition of comments on the code.
- SimpleOS folder name change to System.
- Creation of the
WatchdogTimerclass.WDTCoreoptimization and refactoring of theTicksclass. - Creation of
Macro INT(vector)to handle interrupts - Implementation of the
BootableandExecutableconcepts in theSystemclass
MemoryHelperInterrupts.hVirtualRAM.h
BootableExecutable