Skip to content

Latest commit

 

History

History
75 lines (46 loc) · 3.85 KB

File metadata and controls

75 lines (46 loc) · 3.85 KB

Control and Signal Processing Library

This is a modular, highly portable algorithmic library designed following software engineering best practices for embedded systems.

Overview

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.

Key Features

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.

Quality and Documentation

  • 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.

Usage

File Structure

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.

How to use the module in your project?

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.

How to run the examples?

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.

How to run the test cases?

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.

How to compile the documentation?

Requires Doxygen installed on your host system. Navigate to docs/ and follow the instructions in the README.md to generate the detailed documentation.


Contribution

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.

License

This project is licensed under the MIT License.