¿Arduino necesita el gestor de arranque si está programado con el programador?

5

Estoy intentando programar algunos Atmega328 (no Atmega328p) con un ICSP. Estos son TQFP.

Lo que estoy tratando de hacer es cargar el programa en un chip nuevo sin tener que cargar primero el cargador de arranque. Yo uso un comando como este

avrdude -v -p m328 -c usbtiny -U flash:w:blink.cpp.hex:i

avrdude dice que se cargó correctamente, pero el programa no se ejecuta realmente.

Sin embargo, cuando primero grabo el gestor de arranque, usando la interfaz gráfica de usuario de Arduino, luego uso la línea de comandos y el programador para cargar el programa, el programa se ejecuta. Estoy confundido acerca de por qué esto se debe a que entendí que el gestor de arranque no era necesario si la programación se realizó con el programador.

¿Por qué se necesita el gestor de arranque?

En segundo lugar, si se necesita el cargador de arranque, ¿hay alguna manera de hacer que avrdude haga todo lo posible para cargar el cargador de arranque y el programa en una sola línea?

    
pregunta Alexis K

2 respuestas

7

Para responder a la primera pregunta, se necesita el cargador de arranque porque su programa está creado de tal manera que depende del cargador de arranque que reside en la dirección de reinicio del procesador y luego hace que el cargador de arranque salte a su programa. Es una función de cómo el script de vinculador y el código de tiempo de ejecución se configuran para el entorno Arduino.

No sé la respuesta precisa a tu segunda pregunta, pero ciertamente debería ser posible.

Una solución alternativa sería utilizar un script de vinculador diferente para que su programa realmente se encuentre en la dirección de restablecimiento.

    
respondido por el Dave Tweed
4

Creo que Dave Tweed tiene razón al compilar el binario para usarlo con el cargador de arranque Arduino.

Utilizo el siguiente script de bash para programar ATtiny's y a menudo uso bibliotecas únicas de Arduino. No puedo probar su configuración específica, pero si cambia las distintas variables, es posible que funcione.

#!/bin/bash

freq=9600000/8
baud=19200
src=main.cpp
avr=attiny13
dev=/dev/ttyUSB003

avr-gcc -g -DF_CPU=$freq -Wall -Os -mmcu=$avr -c -o tmp.o $src &&
avr-gcc -g -DF_CPU=$freq -Wall -Os -mmcu=$avr -o tmp.elf tmp.o &&
avr-objcopy -j .text -j .data -O ihex tmp.elf tmp.hex &&
avrdude -p $avr -cstk500v1 -P$dev -b$baud -v -U flash:w:tmp.hex
    
respondido por el jippie

Lea otras preguntas en las etiquetas