Mathematische Funktionen mit #[no_std] nutzen
Wenn Sie mathematische Operationen durchführen möchten – wie etwa die Berechnung der Quadratwurzel aus der Exponentialfunktion einer Zahl – und Ihnen die vollständige Standardbibliothek zur Verfügung steht, könnte Ihr Code folgendermaßen aussehen:
//! Einige mathematische Funktionen mit Standardunterstützung verfügbar
fn main() {
let float: f32 = 4.82832;
let floored_float = float.floor();
let sqrt_of_four = floored_float.sqrt();
let sinus_of_four = floored_float.sin();
let exponential_of_four = floored_float.exp();
println!("Floored test float {} to {}", float, floored_float);
println!("The square root of {} is {}", floored_float, sqrt_of_four);
println!("The sinus of four is {}", sinus_of_four);
println!(
"The exponential of four to the base e is {}",
exponential_of_four
)
}
Ohne Unterstützung durch die Standardbibliothek stehen diese Funktionen nicht zur Verfügung. Stattdessen kann ein externes Crate wie libm verwendet werden. Der Beispielcode sähe dann folgendermaßen aus:
#![no_main]
#![no_std]
use panic_halt as _;
use cortex_m_rt::entry;
use cortex_m_semihosting::{debug, hprintln};
use libm::{exp, floorf, sin, sqrtf};
#[entry]
fn main() -> ! {
let float = 4.82832;
let floored_float = floorf(float);
let sqrt_of_four = sqrtf(floored_float);
let sinus_of_four = sin(floored_float.into());
let exponential_of_four = exp(floored_float.into());
hprintln!("Floored test float {} to {}", float, floored_float).unwrap();
hprintln!("The square root of {} is {}", floored_float, sqrt_of_four).unwrap();
hprintln!("The sinus of four is {}", sinus_of_four).unwrap();
hprintln!(
"The exponential of four to the base e is {}",
exponential_of_four
)
.unwrap();
// exit QEMU
// HINWEIS: Fuehren Sie dies nicht auf der Hardware aus; es kann den
// OpenOCD-Zustand beschaedigen.
// debug::exit(debug::EXIT_SUCCESS);
loop {}
}
Wenn Sie komplexere Operationen wie DSP-Signalverarbeitung oder fortgeschrittene lineare Algebra auf Ihrem Mikrocontroller durchführen müssen, könnten Ihnen die folgenden Crates weiterhelfen.