AVR La ejecución del programa ATmega32 se detiene en la llamada de función

0

Estoy realizando un proyecto de electrónica integrada, y mi código deja de ejecutarse en llamadas a funciones cuyas funciones respectivas tienen varias instrucciones. Mi MCU es un Atmel ATmega32L-8PU. Se ejecuta a 8 MHz, que se define en Símbolos en Propiedades del proyecto en Atmel Studio 7. Estoy usando un depurador y programador AVRISP MKII.

Este código funciona (de manera que el LED de estado está parpadeando):

void printFeeder()  {
    if (TCNT1 > 15625)  {
    }
}

int main(void)
{
    DDRD |= 0xFF;
    while (1) 
    {
        PORTD ^= 0x08; // Status LED.
        printFeeder();
        _delay_ms(1000);
    }
}

Este código encenderá el LED de estado una vez, pero no parpadeará, lo que me hace creer que el código se atasca en la llamada de función. No solo eso, sino que también se atascará en una llamada sei () también.

void printFeeder()  {
    if (TCNT1 > 15625)  {
        TCNT1 = 0;
        PORTD ^= 0x04;
    }
}

int main(void)
{
    DDRD |= 0xFF;
    while (1) 
    {
        PORTD ^= 0x08; // Status LED.
        printFeeder();
        _delay_ms(1000);
    }
}

Tenga en cuenta que las únicas diferencias entre estos bloques de código son los contenidos de las funciones printFeeder (). El problema no es el de las configuraciones de Temporizador, Contador o Interrupción, porque he probado otras llamadas de función que tenían reasignaciones de variables simples, y si el contenido de estas funciones fuera más de dos o tres líneas, la ejecución del programa se detendría. / p>     

pregunta CokeMonstrosity

1 respuesta

0

Reemplazar el AVR en cuestión por otro del mismo tipo resolvió los problemas que estaba teniendo. Creo que el AVR en cuestión era defectuoso, porque los valores de los fusibles entre todos mis chips eran los mismos, y el AVR en cuestión no fue mal manejado por mí.

    
respondido por el CokeMonstrosity

Lea otras preguntas en las etiquetas