Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nateseymour/viper-rtos
RTOS for Cortex-M Profile Microcontrollers
https://github.com/nateseymour/viper-rtos
arm cortex-m embedded embedded-cpp microcontroller rtos
Last synced: about 1 month ago
JSON representation
RTOS for Cortex-M Profile Microcontrollers
- Host: GitHub
- URL: https://github.com/nateseymour/viper-rtos
- Owner: NateSeymour
- Created: 2024-02-22T12:31:02.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2024-03-08T17:09:45.000Z (10 months ago)
- Last Synced: 2024-03-08T20:05:30.119Z (10 months ago)
- Topics: arm, cortex-m, embedded, embedded-cpp, microcontroller, rtos
- Language: C++
- Homepage:
- Size: 63.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Viper RTOS
A lightweight RTOS for Cortex-M Profile Microcontrollers. It supports statically allocated threads, debugging, and includes a small standard library with implementations for synchronization primitives.
The `C++` API makes for a clean integration into your project.
It provides abstractions for common hardware-level functions. For example:
```c++
// Set VTOR and SysTick registers
*system::MReg.VTOR = (std::uint32_t)&viper::vectors;
system::__systick_set_reload();
system::__systick_enable();
```It also makes defining statically-allocated threads/processes easy:
```c++
viper::StaticallyAllocatedStack<1024> main_stack;
viper::Thread main_thread(&system::Cpu0, main_stack, []() {
/* My Code */
});
```And has optional support for dynamic memory allocations:
```c++
struct MyStruct { /* Declarations */ };
MyStruct *my_struct = (MyStruct*)GlobalAllocator.AlloateRaw(sizeof(MyStruct));/* Do Something */
GlobalAllocator.Free(my_struct);
```But, of course, smart pointers are preferable:
```c++
struct MyStruct { /* Declarations */ };void main()
{
auto my_struct = std::Box::Make();
/* Do Something */
} // my_struct automatically freed
```# Project Status
This project is currently under active development. It is not stable. Some features are only partially implemented and some may not be implemented at all. `viper` is not currently suited for real-world applications.
# Supported Devices
This project targets Cortex-M Profile Microcontrollers. Below is a table of currently-supported devices:
| Device Name | Status | Notes |
|--------------|---------|----------------------------------------------------|
| `mps3_an524` | Partial | Used only for testing in `qemu`. Not real silicon. |
| `rp2040` | Partial | Support for Raspberry Pi's Pico devices. |# Using Viper
`viper` uses CMake as its build system. It is recommended that you include it in your project with via the `FetchContent` API.
```cmake
cmake_minimum_required(VERSION 3.27)### Include Viper ###
# NOTE: Viper MUST be included before your `project` directive
# It will take care of configuring the toolchain.
# You must set -DCMAKE_C_COMPILER to the gnu arm compiler toolchain.
include(FetchContent)FetchContent_Declare(
viper
GIT_REPOSITORY https://github.com/NateSeymour/viper-rtos.git
)
FetchContent_MakeAvailable(viper)viper_init()
### Project ###
project(my_project CXX ASM)add_executable(my_project main.cpp)
# Simply link against your chosen device
target_link_libraries(my_project PUBLIC viper-rp2040)
```