Mover el código e interrumpir ubicaciones en Arduino

4

Necesito poder elegir entre dos aplicaciones Arduino que se ejecutan en un atmega 1280 (megaavr) en el momento del arranque. Por lo tanto, necesito mover una de esas aplicaciones a una ubicación diferente en la memoria del programa, y también debo mover las interrupciones a esa ubicación.

Ya tengo un método para ejecutar las interrupciones correctas (con la ayuda del cargador de arranque) en cualquier ubicación de la memoria.

Sin embargo, no entiendo el proceso de compilación lo suficiente como para ver dónde el enlazador decide dónde colocar las cosas y cómo mover las secciones de programa e interrupción a nuevas ubicaciones de memoria.

  • ¿Dónde se define la ubicación del vector de interrupción?
  • ¿Dónde se define la ubicación del programa?

Las compilaciones actuales se realizan utilizando Arduino 22. Aunque prefiero modificar los scripts o archivos de compilación en ese entorno, si fuera necesario, consideraría moverlo a un proceso de compilación de makefile y salir del entorno de Arduino.

    
pregunta Adam Davis

2 respuestas

1

AVRGCC carga las interrupciones y el programa en la misma sección, con las interrupciones primero. La sección está etiquetada simplemente como .text , por lo que solo se debe enviar una marca al compilador para mover tanto las interrupciones como el programa:

-Wl,--section-start=.text=0x10000 # Exactly 1/2 of a 128k device

En última instancia, opté por un Makefile personalizado (hay una multitud de ejemplos de makefile de arduino en Internet) en lugar de intentar hacerlo dentro de Arduino. Esto me permitirá personalizar aún más el proceso de construcción para otras partes del proyecto.

No investigué más en el script del vinculador, pero sospecho que la sección de interrupción podría separarse de la sección .text con otra directiva de sección simple.

    
respondido por el Adam Davis
2

Comenzaré esta respuesta diciendo que nunca intenté hacer esto. Dicho esto, Arduino es solo una capa encima de avr-libc / avr-gcc. El manual del usuario Preguntas frecuentes explica cómo localizar el código en una dirección fija, y piensa que deberías poder hacerlo de la misma manera en tu código fuente de Arduino. El IDE de Arduino está escrito en Java y la fuente está disponible; puede modificar el archivo Compiler.java para agregar las marcas necesarias al vinculador (es decir, -Wl, - section-start) para ubicar su código. Sin embargo, no recomendaría intentar ir por este camino.

Lo que sería mejor es tratar de usar Eclipse como su IDE de Arduino (mucha información en la web sobre cómo hacer esto), podría establecer la configuración del enlazador allí como lo haría normalmente. Mucho más sencillo.

    
respondido por el vicatcu

Lea otras preguntas en las etiquetas