This is a modular, highly portable algorithmic library designed following software engineering best practices for embedded systems.
This library provides a robust, hardware-independent framework containing a collection of control system algorithms, digital signal processing filters, state control using tabulated finite state machines and others. This project aims to minimize system coupling, accelerate development cycles, and ensure long-term maintainability.
To ensure scalability and flexibility, this library focuses on core architectural pillars:
- Control Systems: Robust algorithmic implementations tailored for stabilization, regulation, and optimization on embedded platforms.
- Digital Signal Processing: High-efficiency processing modules designed for real-time data conditioning and transformation.
- State-Based Control: Structured architectures for predictable, safe, and systematic event and logic management.
- Guaranteed Quality: All modules are validated using the Ceedling framework with Unity and CMock, ensuring stability and the logical integrity of the code. The test suite is available in each driver's folder.
- Technical Documentation: Each module includes comments in Doxygen format and a pre-configured Doxyfile, ready for immediate compilation and documentation generation.
- Integration Examples: Ready-to-compile examples are included for platforms such as ESP32 and STM32.
All modules in the repository follow a standardized structure to facilitate navigation:
module_folder/
├── docs/ # Files for generating documentation with Doxygen
├── examples/ # Platform usage examples (ESP32, STM32, etc.)
├── inc/ # Module headers (module.h)
├── src/ # Module implementation (module.c)
├── test/ # Unit testing testbench with Ceedling
└── README.md # Module-specific guide
Note: Inside each subdirectory, you will find a specific README.md file providing tailored instructions, configuration details, and particular guidelines for that section.
You only need to copy the header and source files into your development environment.
- Parameter Injection: The algorithms require proper initialization parameters. At initialization time, you must provide pointers to your data instances and configure operational parameters.
- Function Signatures: Functions are designed to be stateless regarding hardware, relying strictly on data structures and pointers for clean data processing.
- Context: When calling initialization functions, you will pass the instance structure pointer, which allows the library to work in multi-instance environments.
Navigate to the examples/ folder, choose your platform (e.g., example_on_esp32-c6), and consult its README.md. There you will find instructions for configuration, integration, and compilation.
Requires having Ruby, Ceedling, Unity, CMock, and gcovr installed on your host system.
Navigate to the module's test/ folder and consult its README.md where you will find instructions to verify the algorithmic logic and generate coverage reports.
Requires Doxygen installed on your host system.
Navigate to docs/ and follow the instructions in the README.md to generate the detailed documentation.
Feel free to use these algorithms and modules in your projects. Any comments, feedback, or pull requests will be welcome to continue improving the robustness of this library.
This project is licensed under the MIT License.