Cómo configurar las definiciones en AVR Studio 6.0

0

Al igual que el lenguaje C básico, intenté hacer una definición de la siguiente manera

#define RED PA0
#define ON 1  
#define OFF 0

void main(void){

    DDRA = 0xFF;

    while(1)
    {

        RED = ON;
    }
}

Recibo un error que no he visto antes:

  

lvalue requerido como operando izquierdo de asignación

¿Qué significa esto?

    
pregunta David Norman

1 respuesta

1

'Valor L' y 'Valor R' describen los atributos del lado izquierdo y del lado derecho, respectivamente, de una asignación. Un valor R es una cantidad de algún tipo (no necesariamente numérico), generalmente el resultado de evaluar una expresión, pero también una constante, como '5' o la cadena "¡Hola, Mundo! \ N". Un valor L es algo a lo que un programa puede asignar un valor R, como una variable nombrada, una memoria sin formato o una dirección de puerto. Este artículo de WikiPedia tiene una descripción más completa.

"lvalue requerido como operando izquierdo de asignación" simplemente significa que el lado izquierdo de su asignación no es una dirección asignable o convertible en una. PA0 es # definido como una constante simple sin propiedades de valor l.

Está en el camino correcto: aquí hay un artículo de Arduino sobre los puertos y los registros de E / S asociados con ellos, y la manipulación directa de esos registros. A pesar de sus advertencias, la manipulación directa de puertos es una técnica útil para reducir tanto el tamaño del programa como el sesgo de tiempo en algunas situaciones.

Estas declaraciones:

#define LED_PORT PORTA
#define RED_ON (PORTA | 0x01)
#define RED_OFF (PORTA & ~0x01)

...

LED_PORT = RED_ON;

definirá un valor l que puede asignar (pero tenga en cuenta que es un puerto completo, no solo un pin) y cambiará su valor para activar el pin-0. La expresión RED_ON lee: lee PORTA, O con '1' (para que no cambies ningún otro bit en el puerto); la asignación vuelve a escribir el nuevo valor en el puerto.

(Tenga en cuenta que su código como está escrito, incluso suponiendo que la declaración de asignación fue correcta, encenderá el LED repetidamente, lo cual no es diferente de encenderlo una vez).

    
respondido por el JRobert

Lea otras preguntas en las etiquetas