fxrtos-lite/README.md

70 lines
3.5 KiB
Markdown
Raw Normal View History

2020-06-26 19:27:50 +00:00
Description
-----------
FX-RTOS Lite is small kernel intended to be used with microcontrollers.
It is implemented as a C99 static library containing OS services.
Features
--------
API includes the following services:
- threads
- software timers (one-shot and periodic)
- semaphores
- mutexes with priority ceiling
- message queues
- memory block pools
- events
- condition variables
- barriers
- arbitrary-sized memory pools
- rwlocks
Supported hardware and toolchains
---------------------------------
Lite version supports only two most common CPU architectures:
- ARM Cortex-M3+ (ARMv7-M architecture, may also be used on ARMv8-M)
- RISC-V (RV32I profile)
ARM version supports GCC, Keil MDK and IAR EWARM compilers.
RISC-V version supports only GCC at now.
Host system may be either Windows or Linux (Mac should also work, but untested).
No external dependencies required except the compiler.
Getting started
---------------
2020-06-29 13:50:04 +00:00
This repository contains non-configured version of the kernel represented as a set of components. It is useful if you want to contribute to OS.
In case if you just need a kernel to use in your embedded application consider using preconfigured kernels available for [ARM](https://github.com/Eremex/fxrtos-lite-armv7m) and for [RISC-V](https://github.com/Eremex/fxrtos-lite-riscv32).
2020-06-26 19:27:50 +00:00
How to build the library from sources:
2020-06-29 13:50:04 +00:00
- Ensure [fx-dj.py](https://github.com/Eremex/fx-dj) script is available via PATH
2020-06-26 19:27:50 +00:00
- Ensure supported compiler is available via PATH
2020-06-29 13:50:04 +00:00
- Set environment variables
- FXRTOS_DIR as path to kernel root folder
- GCC_PREFIX as compiler prefix if you use GCC (i.e. 'arm-none-eabi-' for ARM)
- FXDJ as dependency injection tool (i.e. 'fx-dj.py')
- Enter directory for target core (i.e. 'cores\standard-cortex-m3')
2020-06-29 16:48:13 +00:00
- Run 'build.bat' on Windows or 'make src' and then 'make lib' on Linux/Mac (ARM only)
2020-06-26 19:27:50 +00:00
Limitations
-----------
Please note that Lite version is a soft-realtime (or best-effort) kernel. It is NOT intended for deterministic hard-realtime operation.
Advanced features such as deterministic timers, low-latency deferred interrupt processing, multiprocessing support, privilege levels separation and security
are available only in full version. Please, contact EREMEX sales department for further details.
When developing latency-critical applications using Lite edition the following limitations should been taken into account:
- Broadcasting (or "notify all") synchronization objects such as condvar or event. More waiting threads results in longer latency since notification process is non-preemptive. Possible solutions: do not use broadcasting objects or limit maximum number of waiting threads.
- Priority-based notification policy with synchronization objects (i.e. posting semaphore and releasing the most prioritized waiting thread) uses linear search with scheduling disabled. This means that N waiting threads results in unbounded O(n) scheduling and interrupt latency. Possible solutions: use FIFO notification policy or limit maximum number of waiting threads for any synchronization object.
- Message queue flush releases up to N threads where N is queue length. Possible solutions: do not use queue flushing or limit queue length to reasonable value.
- Timers implementation uses sorted queues and linear search resulting in O(n) latency depending on number of active timers in the system. Possible solutions: Limit maximum number of software timers and do not use timeslicing.
Support
-----------
For questions on using FX-RTOS, contact authors via telegram group (https://t.me/fxrtos).