2 votos

Comportamiento extraño al dividir un programa AVR en funciones

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.

2voto

Justme Puntos 201

También el enlazador necesita saber para qué MCU generar el binario, para poder incluir la biblioteca de código de inicio correcta para su modelo específico de MCU. Añádelo a la línea de comandos que enlaza el binario de salida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X