PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : enum mit switch



wheelchair
30.03.2006, 00:57
hallo

möchte in WinAVR ein ansteuerung des Multiplexers (4 Steuerltg)
programmieren, der verschiedene Modi verwenden soll. µC ist ein AT90S8535

Die Auswahl der Modi wird mit enum und switch realisiert.

//--------------------------------------------------------------------------
//--ENUM------------------------------------------------------------------
//--------------------------------------------------------------------------
enum SCANMODE {
NormalMode,SpeedMode,TurboMode
};
unsigned char scanmode;

//--------------------------------------------------------------------------
//--Unterprogramm next_channel_number----------------------------
//--------------------------------------------------------------------------
void next_channel_number (void)
{
switch (scanmode)
{
case NormalMode: (channel++) & CHANNEL_BIT_MSK;
channel_temp = channel;break;

case speed: (channel++) & CHANNEL_BIT_MSK;
channel_temp = (channel & 7) << 1;
if (channel & (1 << 3))
channel_temp |= 1;break
}
}



main()
....

nxchannel = next_channel_number (char channel, char channel_temp, SCANMODE);

--> bekomme diese Fehlermeldung???
main.c:256: error: parse error before "char"
make: *** [main.o] Error 1

habe ich dabei etwas vergessen?, funktioniert das enum mit dem switch so?

mfg

Masmiseim
30.03.2006, 07:11
Was mir so aufgefallen ist:
- Wenn Du ne Aufzählung nutzt, dann erstell auch ne Instanz dieses Datentyps
- beim zweiten case hat die Konstante nicht gestimmt.
- beim zweiten case fehlt beim brake ein Semikolon
- und bitte rücke Dein Code mal etwas besser ein, macht alles deutlich einfacher zu lesen


//--------------------------------------------------------------------------
//--ENUM------------------------------------------------------------------
//--------------------------------------------------------------------------
enum SCANMOD
{
NormalMode,
SpeedMode,
TurboMode
} scanmode;

//--------------------------------------------------------------------------
//--Unterprogramm next_channel_number----------------------------
//--------------------------------------------------------------------------
void next_channel_number (void)
{
switch (scanmode)
{
case NormalMode:
(channel++) & CHANNEL_BIT_MSK;
channel_temp = channel;
break;
case SpeedMode:
(channel++) & CHANNEL_BIT_MSK;
channel_temp = (channel & 7) << 1;
if (channel & (1 << 3))
channel_temp |= 1;
break;
}
}

SprinterSB
30.03.2006, 07:25
(channel++) & CHANNEL_BIT_MSK;

hat den gleichen Effekt wie

channel++;

Was willst du damit erreichen?


Mit dem obigen Code wirst du warscheinlich noch ne Warning bekommen, weil nicht alle Fälle von enum SCANMOD im switch abgehandelt werden.
Also den dritten Fall anhandeln oder ein default hinschreiben.

Masmiseim
30.03.2006, 07:33
ich habe noch etwas übersehen- Das hier soll wohl der Funktionsaufruf sein:

main()
....

nxchannel = next_channel_number (char channel, char channel_temp, SCANMODE);

Wenn Du der Funktion Parameter übergeben willst musst Du dies auch in der Definition so definieren. Und auch ein Rückgabewert scheinst Du zu erwarten der auch nicht definiert ist. Das ganze müsste dann in etwa so aussehen:


unsigned char next_channel_number (char channel, char channel_temp)
{
...
}

Der Aufruf würde dann wie folgt aussehen:

void main (void)
{
...
char channel = 0, channel_temp = 0;
next_channel_number (channel, channel_temp);
}


Grüße

Masmiseim

wheelchair
30.03.2006, 18:48
danke für eure antworten, habe das problem jetzt gelöst

mfg