El contador del programa va hasta el final del código y se reinician 8051

0

Tengo un MCU 8051 que uso keil para programarlo con C. Mi problema es que el microcontrolador se reinicia al final de algunas funciones mientras deberían volver.

Usando un depurador, traté de comprobarlo línea por línea. Y me di cuenta de que el MCU no se reexpresó justo después del final de la función. El PC (contador de programas) va a otro lugar (en algún lugar donde no hay ningún código que ejecutar) y luego aumenta uno por uno hasta el final del código. Es muy extraño para mí porque escribo mi código en C y nunca he visto el tipo de error anteriormente.

Creo que este problema podría estar relacionado con la configuración del compilador y, por lo tanto, publico la configuración aquí:

Configuración del ensamblador: XR GEN DB EP NOMOD51

Configuración del compilador: DB OE BR GRANDE OPTIMIZAR (11, TAMAÑO) DEFINIR (SILABS_PLATFORM_WMB912) DEFINIR (SILABS_WMCU_SI106x)

Configuración del enlazador: CÓDIGO DE CLASES REMOVIDAS (BIT (0x20.0-0x2F.7), DATOS (D: 0-D: 0x7F), IDATA (I: 0-I: 0xFF), XDATA (X: 0-X: 0xFFF), CÓDIGO ( C: 0-C: 0xFBFF), CONST (C: 0-C: 0xFBFF))

Probé configuraciones grandes y pequeñas, pero el problema continúa. Por favor ayúdame si sabes la razón.

    

2 respuestas

1

Descubrí la razón. En realidad es el problema del compilador. El keil C51 v9.53 tiene un problema que a veces mezcla la pila con datos. Han propuesto un nuevo enlazador. Pero actualicé a v 9.55 y el problema se resolvió.

    
respondido por el amir mohamad hatami
1

Probablemente estés sobrescribiendo la pila, corrompiendo así la dirección de retorno.

Sería bueno ver el código real, no solo un boceto. Pero una posible causa es pasar un argumento del tamaño o tipo incorrecto, de modo que la rutina a la que está llamando cree que está escribiendo en un lugar seguro, pero en realidad está escribiendo fuera de lo que proporcionó con la llamada.

Es posible que no haya suficiente espacio de pila, también. Particularmente si estás llamando a una función complicada que llama a otras cosas.

Pero sin detalles reales, es difícil decir más.

    
respondido por el Bob Jacobsen

Lea otras preguntas en las etiquetas