{Programación de Sistemas Embebidos usando Rust}
Talleres ETR 2022-II
Noviembre 8 de 2022


Gerardo Becerra, Ph.D.
Agenda
# INTRODUCCIÓN: FUNDAMENTOS DE RUST
- Introducción
- Fundamentos de Rust
- Rust para sistemas embebidos
- Hardware
- Configuración del entorno de desarrollo
- Demos
- Preguntas (Por favor formularlas en el chat)
Registro de asistencia: https://bit.ly/asistaller
Fundamentos de Rust
# INTRODUCCIÓN: FUNDAMENTOS DE RUST
- Desarrollado por Graydon Hoare en Mozilla y adoptado por compañías como Amazon, Discord, Dropbox, Meta, Google, Microsoft.
- Lenguaje de programación de propósito general, multiparadigma.
- Énfasis en desempeño, seguridad en tipos de datos y concurrencia.
- Impone seguridad en memoria: todas las referencias a ubicaciones de memoria son válidas, sin requerir un garbage collector.
- Borrow checker: rastrea lifetimes y scope de todas las referencias durante la compilación.
- Curva de aprendizaje pronunciada. 🤔🤔🤔
Ejemplo
fn main() {
let mut valores = vec![1, 2, 3, 4];
for valor in &valores {
println!("value = {}", valor);
}
if valores.len() > 5 {
println!("La lista tiene más de 5 elementos");
}
match valores.len() {
0 => println!("Vacío"),
1 => println!("Un valor"),
2..=10 => println!("Entre dos y diez valores"),
11 => println!("Once valores"),
_ => println!("Muchos valores"),
};
while let Some(valor) = valores.pop() {
println!("Valor = {valor}");
}
}# INTRODUCCIÓN: FUNDAMENTOS DE RUST
Rust para sistemas embebidos
# INTRODUCCIÓN: RUST PARA SISTEMAS EMBEBIDOS
- Análisis estático robusto: Impone configuración de pines y periféricos al momento de compilar.
- Uso flexible de memoria: Asignación de memoria dinámica opcional.
- Concurrencia: Es imposible compartir accidentalmente estados entre diferentes hilos de ejecución.
- Interoperabilidad: Integración con bases de código existentes en C.
- Portabilidad: Las librerías y drivers se escriben una vez y pueden usarse en una amplia variedad de sistemas => Hardware Abstraction Layer (HAL).
- Comunidad: Soporte de sistemas embebidos desarrollado por la comunidad de código abierto.
# INTRODUCCIÓN: HARDWARE

micro:bit v2
Hardware
| Modelo | Nordic nRF52833 |
| Arquitectura | Arm Cortex-M4 32 bit processor with FPU |
| Flash ROM | 512 KB |
| RAM | 128 KB |
| Speed | 64 MHz |
| Debug | Two-pin serial wire debug (SWD), JTAG |
Procesador nRF52833
# INTRODUCCIÓN: HARDWARE
Hardware
Hardware Abstraction Layer (HAL)
# INTRODUCCIÓN: HARDWARE ABSTRACTION LAYER
- Microcontroladores: Configuración a través de registros.
- Registros: mapeados en memoria.
- Código de bajo nivel, inseguro, poco ergonómico.
- Solución: Interfaz de alto nivel - HAL.
embedded-hal
- Traits definidos en embedded-hal:
- GPIO (pines entrada / salida)
- Comunicación serial
- I2C
- SPI
- Timers / Contadores
- ADC (Conversión Análogo-Digital)
Configuración del entorno de desarrollo
# INTRODUCCIÓN: CONFIGURACIÓN DEL ENTORNO DE DESARROLLO
Instrucciones de Instalación:
- Rust
- gdb_multiarch
- cargo-binutils
- cargo-embed
- minicom / PuTTY
Hola mundo!
#![no_main]
#![no_std]
use cortex_m_rt::entry;
use rtt_target::{rtt_init_print, rprintln};
use panic_rtt_target as _;
use microbit as _;
#[entry]
fn main() -> ! {
rtt_init_print!();
rprintln!("Hola mundo!");
loop {}
}# INTRODUCCIÓN: HOLA MUNDO!
# DEMOS
DEMOS
Registro de asistencia: https://bit.ly/asistaller
Referencias
# REFERENCIAS
- The Discovery Book: https://docs.rust-embedded.org/discovery/microbit/index.html
- The Rust Programming Language Book. https://doc.rust-lang.org/book/
- The Embedded Rust Book: https://docs.rust-embedded.org/book/
- Rust (programming language): https://en.wikipedia.org/wiki/Rust_(programming_language)
Muchas gracias por su participación
# FIN
fn main() {
println!("¿Preguntas?");
}Registro de asistencia: https://bit.ly/asistaller
embeddedRust
By Gerardo Dejesus Becerra Becerra
embeddedRust
- 130