Problem mit switch



  • Naja da steht das im Case 257 Stück erlaubt sind, ich hab grad mal 20 drinn. Das mit dem optimieren könnt ich mir schon vorstellen, aber wenn er das case ausführt wenn ichs direkt anspreche, wieso nicht wenn ich ne Variable einsetze. Irgendwas muss mit der Variable schiefgehen.

    [EDIT]

    Ich hab jetzt mal Spaßeshalber die ganzen switch rausgekickt und alles mit einzelnen if Anweisungen gemacht, und sofort geht es auch. Nur ist das halt ein schlechter Stil und ich will es eigentlich nicht so lassen, aber mir fällt echt langsam nix mehr ein.



  • MSDN schrieb:

    Microsoft C does not limit the number of case values in a switch statement. The number is limited only by the available memory. ANSI C requires at least 257 case labels be allowed in a switch statement.

    Der Satz könnte noch wichtig sein. Hast du schon mal überprüft, wieviel Speicher du überhaupt noch zur Verfügung hast?



  • Der Speicher reicht locker, ich hab 512 K und mein Programm hat alles in allem vielleicht mal grad 50 K



  • Arbeitsspeicher oder "Festplatten"speicher?



  • Ich glaube manche haben mein erstes Posting nicht gelesen oder ? Ich schrieb da das es um einen Power Pc auf einem Evaluation Board geht ? Da gibts keine Festplatten. Das ist ein Microcontroler mit Flash Speicher.



  • Ich wollte mit meinem Posting nicht auf die größe des Arbeitsspeicher aufmerksam machen sondern auf deinen Compiler vielleicht hatt der bei Switch() ne begrenzung von 8 oder so.

    Du kannst ja mal probieren die switchanweisung zu begrenzen z.B:
    case 1:
    bla
    case 2:
    bla
    default:
    bla

    Mfg TheBender



  • @Tom
    Darum habe ich auch "Festplatte" in Anführungszeichen gesetzt. Ich meinte damit eigentlich deinen Speicher auf deinem Chip oder sonst was. Aber das ändert im Endeffekt nicht meine Frage. Meinst du nun mit den 512K deinen Flashspeicher oder deinen Arbeitsspeicher.



  • Ich würd mal nach Assembler compilieren und mir das angucken ...
    Wenn alles nichts hilft, würd ich mich mit Usern dieser Plattform zusammensetzen, gibt bestimmt ne Newsgroup oder Mailingliste zum Thema. Es ist anscheinend auf jeden Fall irgendwas faul, auf dass du rein mit C-Mitteln einen Einfluss hast.



  • AJ:

    Der Speicher ist es definitiv nicht, der langt noch ewig weit. 512 Flash und 4 MB Arbeitsspeicher. Laufen lass ich es im Moment im RAM also reichen die 4 MB dick.

    @the Bender:

    Das mit den Switches könnte schon sein, hab aber beim compiler nix gefunden das das begrenzt wäre, und den MISRA Spell Checker hab ich nicht aktiviert.



  • Hab jetzt kurzzeitig mal gedacht es könnte am Stack liegen, aber den hab ich jetzt auf 10 K erhöht, das dürfte wohl immer ausreichen. Also der wars dann wohl auch nicht.



  • Ich kann mich noch daran erinnern, dass es eine Funktion unter C gibt, mit der man den noch freien Speicher ausgeben kann. Nur der Name will mir jetzt nicht mehr einfallen. Stellt dein Programm eigentlich das Grundsystem auf dem Board dar oder ist da noch ein OS drunter?



  • AJ schrieb:

    Ich kann mich noch daran erinnern, dass es eine Funktion unter C gibt, mit der man den noch freien Speicher ausgeben kann. Nur der Name will mir jetzt nicht mehr einfallen. Stellt dein Programm eigentlich das Grundsystem auf dem Board dar oder ist da noch ein OS drunter?

    in ANSI C gibt es eine solche funktion meines wissens nach nicht.

    ich würde mir auf jedenfall auch einmal den assembler output angucken.



  • @japro
    Wahrscheinlich ist die Funktion betriebssystemspezifisch.



  • Ich habs jetzt rausgefunden. Der blöde Compiler hat von standad her eine Begrenzung auf 7 cases beim switch. Den musste man mittels Comandline Option dazu bringen mehr zu akzeptieren.

    Da kommt ja kein Mensch drauf.


Anmelden zum Antworten