embedded-profiling 0.2.0

Profiling for `no-std` embedded targets
Documentation

Embedded-Profiling

A lightweight framework for profiling functions, geared towards no-std embedded environments.

Documentation

Usage

Initialization is very similar to how the log crate is initialized. By default, there is a no-op profiler that does nothing until you call set_profiler. Once your profiler has been installed, your profiling functionality will be in use.

You can manually start & end your snapshot:

let start = embedded_profiling::start_snapshot();
// (...) some expensive computation
let snapshot = embedded_profiling::end_snapshot(start, "name-of-computation");
// Optionally, log it
embedded_profiling::log_snapshot(&snapshot);

Or profile some code in a closure:

embedded_profiling::profile("profile println", || {
    println!("profiling this closure");
});

With a Procedural Macro

With the proc-macros feature enabled, you can simply annotate the target function with the procedural macro profile_function. Note that you must first set your profiler with theset_profiler function.

#[embedded_profiling::profile_function]
fn my_long_running_function() {
    println!("Hello, world!");
}

Example Project & EmbeddedProfiler Implementations

A working example program on a feather_m4 development board is provided in the embedded-profiling github repo. These examples use two libraries implementing this trait, ep-dwt and ep-pin-toggle.

License

This code is licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.