Escribiendo el programa del gestor de arranque en ATmega32A

Necesito programar un código de cargador de arranque escrito en C en la sección de arranque de AVR ATmega32A usando un programador en serie. No puedo escribir el código directamente en la sección de inicio de Atmel Studio. Entonces, estoy buscando una manera aquí. Además, ¿hay alguna buena manera de combinar el código de la aplicación y el código de arranque y escribirlos en las secciones respectivas usando el programa C?

La última vez que escribí un cargador de arranque AVR fue antes de Atmel Studio, pero creo que debería poder hacerlo en las propiedades del proyecto | Cadena de herramientas | Enlazador AVR/GNU | Configuración de la memoria. Normalmente, si los quiero combinados, hago el cargador de arranque, lo uso para cargar y luego leo el resultado.
Sí. Puedo ver la opción allí, pero es realmente confuso.
Estoy realmente confundido con .text y .boot. Además, esa sección de arranque solo toma las últimas 512 palabras, entonces de dónde viene 1234. Por favor, dígame dónde buscar su antiguo proyecto.
Ok, necesito reemplazarlo con la dirección de la sección de arranque de Atmega32A. ¿Tengo razón?
Recibo el error "El contenido del archivo no se asigna a ninguna memoria de dispositivo válida para programar Flash" cuando incluyo .text. cuando lo reemplaza con .boot funciona, pero escribe desde la misma dirección 0x00.
Gracias PeterJ, funciona cuando intento con el valor de dirección correcto. El error se debió al valor de la dirección, di 7c00 en el que ATmega32A solo tiene hasta 3FFF direcciones.

Respuestas (1)

La hoja de datos de ATmega32A en la página 245 muestra la siguiente tabla de dónde comienza el área del cargador de arranque según cómo BOOTSZse configuren los fusibles:

Configuración del tamaño de arranque ATmega32A

Entonces, suponiendo que tiene BOOTSZ0y BOOTSZ1ambos están autorizados para la sección más grande del gestor de arranque, comenzará en 0x3800. En la documentación de las secciones de memoria , puede ver que el código entra en el .textsegmento del enlazador y la dirección se puede cambiar yendo a Propiedades del proyecto | Cadena de herramientas | Enlazador AVR/GNU | Configuración de memoria y agregando .text=0x3800en la sección del segmento FLASH:

Segmento Atmel Studio FLASH para cargador de arranque

Normalmente, si quiero que el cargador de arranque se combine con el firmware de la aplicación para la programación de producción, uso el cargador de arranque para cargar el firmware principal y luego leo el resultado de FLASH. Debería ser técnicamente posible combinarlos utilizando segmentos de enlazadores personalizados, pero debe tener mucho cuidado con la ubicación de elementos como las funciones de biblioteca estándar, por lo que el método anterior probablemente sea más fácil y seguro.