Estoy intentando ejecutar un programa muy básico de "parpadeo" en un Atmega328P. Aquí está en su totalidad:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void setup() {
DDRC |= (1<<PC2);
}
int main(void) {
setup();
while (1) {
PORTC |= (1<<PC2);
_delay_ms(1000);
PORTC &= ~(1<<PC2);
_delay_ms(1000);
}
return 0;
}
Si intento construir e instalar esto:
avr-gcc -Wall -Os -mmcu=atmega328p -DF_CPU=16000000UL -c transmitter.c -o transmitter.o
avr-gcc -o transmitter.elf transmitter.o
avr-objcopy -O ihex -R .eeprom transmitter.elf transmitter.hex
avr-size --format=avr --mcu=atmega328p transmitter.elf
avrdude -F -V -patmega328p -cstk500v1 -P/dev/cu.usbmodem1D11401 -b19200 -Uflash:w:transmitter.hex:i
no ocurre nada. Sin embargo, si muevo el contenido de setup()
en main()
Todo funciona bien (el LED parpadea como se espera):
int main(void) {
DDRC |= (1<<PC2);
while (1) {
PORTC |= (1<<PC2);
_delay_ms(1000);
PORTC &= ~(1<<PC2);
_delay_ms(1000);
}
return 0;
}
En cuanto a los esquemas, es un circuito básico de 3,3V con un LED conectado a una resistencia de 15ohm en el PC2. No tengo ninguna razón para sospechar del circuito en sí, ya que funciona bien si escribo e instalo un programa similar utilizando Arduino Studio.
¿Alguna sugerencia?
ACTUALIZACIÓN Añadido avrdude
línea de comando en su totalidad arriba. Vale la pena señalar que no obtengo ningún error de avrdude
- todo tiene éxito.