Array error C247:non-address/-constant initializer

Gast #2401501
Lesenswert?

Hallo liebe Forenmitglieder,

ich arbeite mich gerade mittels Keil µvision 4 in die 
Mikrocontrollertechnik ein. Ich habe ein vorgegebenes Headerfile welches 
ich nutzen soll, in dem Ampelphasen definiert sind:

#define R_R         P5=0x09; P3&=0xFB
#define R_RG      P5=0x0B
#define R_GR      P5=0x0C
#define R_GE       P5=0x0A
#define RG_R      P5=0x09; P3|=0x04
#define GR_R      P5=0x21; P3&=0xFB
#define GE_R       P5=0x01; P3|=0x04

das Headerfile include ich in meinem Hauptprogramm.
Jetz wollte ich im Hauptprogramm die Ampelphasen als array speichern und 
einfach als Schleife ablaufen lassen. Ist das möglich?

Quellcode:

#include "reg517a.h" //Headerdatei für Controller 80C517A
#include "keil51.h"  //Ampelphasen

void int_routine(); //Funktion delay deklarieren

void main(void)    //Hauptfunktion main
{
//Timer Initialisierung
  EAL=1;      //enable all interrupts
  ET0=1;      //enables Timer 0 overflow interrupt
  TMOD=0x01;
  TH0=0x3C;
  TL0=0xB0;
  TR0=1;          //run Timer 0

while(1);
}
//----------------------Interruptroutine-------------------------


void int_routine() interrupt 1  //Programmcode für Funktion delay
{   static unsigned int i,j; //Variabel vom Typ int ohne Vorzeichen

unsigned char ampelphase[7]={RG_R, R_GE, R_GR, R_RG, R_R, GE_R, GR_R};
unsigned char* pampelphase;
pampelphase = ampelphase;

    i++;
    if(i ==  10)     //alle 0,5s in die Schleife
    {    ampelphase[j];
        j++;
        i=0;
    }
  TR0 =0;
  TL0 = 0xB0;
  TH0 = 0x3C;
  TR0 = 1;
}
------------------------------ENDE-------------------------------------- 
-
Ich bekomme den Fehler  error C247: non-address/-constant initializer in 
der Zeile "unsigned char ampelphase[7]=....",sowie dort einen Syntax 
error. Jedoch ist die Syntax für array doch korrekt,oder?! 2 zeilen 
darunter habe ich außerdem den Fehler "redefinition pampelphase". Damit 
kann ich leider auch nichts anfangen.

Ich habe das ganze auch schon ohne das zusätzliche headerfile gelöst und 
eine switch case Anweisung gemacht, jedoch wäre das ganze so viel besser 
gelöst.

Könnte mir jemand helfen, was für einen Fehler ich mache?! Ist das so 
überhaupt machbar?

LG
Gast #2401503
Lesenswert?

Gast_a schrieb:
> Könnte mir jemand helfen, was für einen Fehler ich mache?! Ist das so
> überhaupt machbar?

#define R_R         P5=0x09; P3&=0xFB

unsigned char ampelphase[7]={RG_R, R_GE, R_GR, R_RG, R_R, GE_R, GR_R};


überlege doch mal was nach den Preprozessor dort stehe, dann sollte klar 
sein das es so auf jeden Fall nicht geht.
Gast #2401517
Lesenswert?

also wäre dann quasi das Semikolon mit im array und dadurch die Zeile 
gleich beendet, oder? Daher auch die Syntax Fehler.

kann man in einem array-element denn überhaupt 2 variablen werte 
zuweisen?


lg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren