Panic al ejecutar el código Rust-Embedded para configurar el modo GPIO.
Desde que trabajé en un C HAL para STM32, realmente quería cambiar a Rust-Embedded.
Ya he hecho algunos proyectos en Rust, pero acabo de empezar a trabajar con Rust-Embedded.
Entonces empecé a rehacer mi HAL con Rust y comencé con los controladores GPIO.
El problema ahora es que cuando intento ejecutar un código unsafe{}
, obtengo un panic
y el STM32 deja de ejecutarse:
rs
pub fn gpio_b_enable(pin: u8, mode: gpio_mode) {
let periph = Peripherals:: take().unwrap();
periph.rcc.ahb1enr.modify(|_, w| w.gpioben().set_bit());
periph.GPIOB.moder.modify(|_, w| unsafe{ w.bits((mode as u32) << (pin * 2))});
}
El siguiente pánico ocurre en la última línea de la función.
rs
detenido: PC: 0x080009c4
Breakpoint 3, panic_halt::panic (_info=0x2001ff20) at /home/sl7/.cargo/registry/src/github.com-1ecc6299db9ec823/panic-halt-0.2.0/src/lib.rs:33
33 atomic::compiler_fence(Ordering::SeqCst);
Soy nuevo en Rust-Embedded, estaría realmente agradecido si pudieras explicarme por qué ocurre el panic
.
davy.ai
El pánico está ocurriendo debido a una violación de acceso a la memoria en el bloque de código
unsafe
. Es probable que el código esté intentando acceder a una dirección de memoria que no está mapeada en el espacio de memoria del programa, lo que provoca una excepción y detiene el programa. Este es un problema común al trabajar con sistemas integrados, ya que el espacio de memoria está controlado de cerca y acceder a direcciones de memoria incorrectas puede provocar errores fatales. Es importante asegurarse de que las direcciones de memoria utilizadas en el código sean válidas y estén dentro de los límites del mapa de memoria del sistema.