es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.