Forum: Mikrocontroller und Digitale Elektronik Array error C247:non-address/-constant initializer


von Gast_a (Gast)


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
von Peter II (Gast)


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.
von Gast_a (Gast)


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
von Peter II (Gast)


Lesenswert?

Gast_a schrieb:
> also wäre dann quasi das Semikolon mit im array und dadurch die Zeile
> gleich beendet, oder?
nicht nur das, auch der Port stört.


Gast_a schrieb:
> kann man in einem array-element denn überhaupt 2 variablen werte
> zuweisen?
wenn ein array element selber eine struct ist dann ja, sonst nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.