- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: enum mit switch

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2006
    Beiträge
    14

    enum mit switch

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2004
    Beiträge
    5
    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

    Code:
    //--------------------------------------------------------------------------
    //--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;
    	}
    }

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    (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.
    Disclaimer: none. Sue me.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2004
    Beiträge
    5

    Re: enum mit switch

    ich habe noch etwas übersehen- Das hier soll wohl der Funktionsaufruf sein:
    Zitat Zitat von wheelchair
    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:

    Code:
    unsigned char next_channel_number (char channel, char channel_temp) 
    {
        ...
    }
    Der Aufruf würde dann wie folgt aussehen:
    Code:
    void main (void)
    {
        ...
        char channel = 0,  channel_temp = 0;
        next_channel_number (channel, channel_temp);
    }

    Grüße

    Masmiseim

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2006
    Beiträge
    14
    danke für eure antworten, habe das problem jetzt gelöst

    mfg

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad