www.mikrocontroller.net

Forum: Compiler & IDEs Wenn Wert zwischen X und X, dann.


Autor: Finn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte ein Softwaremäßiges blinken realisieren. Die Blinkreihenfolge 
ist relativ komlex.

Bisher habe ich einen Zähler jeden Zyklus einen um 1 hochzählen lassen 
und dann geschrieben.
if (pwm_Counter >=100)
{
     If (pwm_Counter < 200)
     {
            "LED an"
      }
Else 
{
     "LED aus" 
}


besser wäre ja:
if (pwm_Counter zwischen 100 und 200)
{
LED an
}


Danke schonmal für eure Hilfe.
Lg finnp

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Finn schrieb:
> if (pwm_Counter >=100)
> {
>      If (pwm_Counter < 200)
>      {
>             "LED an"
>       }
> Else
> {
>      "LED aus"
> }

Preisfrage: Zu welchem if gehört das else?


> if (pwm_Counter zwischen 100 und 200)

wird auf 2 Bedingungen aufgeteilt, die UND-verknüpft werden:

if(pwm_Counter >= 100 && pwm_Counter < 200)
...
:-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
switch( pwm_Counter ){
  case 100 ... 199:
                   // "LED an"
                   break;
  default:
                   // "LED aus" 
}


Peter

Autor: Helmhut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LED = (pwm_Counter >= 100 && pwm_Counter < 200)?AN:AUS;

Autor: Finn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> switch( pwm_Counter ){
>   case 100 ... 199:
>                    // "LED an"
>                    break;
>   default:
>                    // "LED aus"
> }
>
>
> Peter

Wofür steht das Break und Default?
Ich weis das ich oben eine } vergessen habe.
Sorry

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Finn schrieb:
> Wofür steht das Break und Default?

Lies in Deinem C-Buch nach, was switch/case tun.

Hast Du keins?

Brian Kernighan & Dennis Ritchie, "Programmieren in C", 2. Auflage, 
Hanser-Verlag.


Wobei Peter gemein war, was er da geschrieben hat, ist eine 
gcc-Spezialität. Eine Bereichsangabe bei case kennen andere Compiler 
nicht.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wobei Peter gemein war, was er da geschrieben hat, ist eine
>gcc-Spezialität. Eine Bereichsangabe bei case kennen andere Compiler
>nicht.

Da hier in letzter Zeit öfter Hinweise auf Syntax-Varianten kommen, die 
eigentlich gcc-Sonderfälle und nicht C-Standard sind, möchte ich Peter 
und auch andere höflich bitten darauf hinzuweisen. Man könnte so eine 
unnötige Diskussion oder Nachfrage vermeiden.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huch schrieb:
> Da hier in letzter Zeit öfter Hinweise auf Syntax-Varianten kommen, die
> eigentlich gcc-Sonderfälle und nicht C-Standard sind, möchte ich Peter
> und auch andere höflich bitten darauf hinzuweisen. Man könnte so eine
> unnötige Diskussion oder Nachfrage vermeiden.

warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für 
GCC ist?

Autor: Imon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Justus Skorps schrieb:
> warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für
> GCC ist?

eher anders herum, man sollte darauf Hinweisen das der Code nur für denn 
gcc ist, sonst schlägt die Frage in einen anderen Bereich des Forum 
wieder auf in Form warum geht es nicht mit Compiler X.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Justus Skorps schrieb:
> warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für
> GCC ist?

Zwar bezieht sich dieses Forum auf GCC, aber auf GCC als C- (oder C++-) 
Compiler und nicht als Compiler für proprietäre nichtportable 
Sprachkonstrukte.

Solange das von Peter verwendete /case/-Statement nicht in einem 
C1x-Standard auftaucht, ist das deutlich als nichtportabel zu 
kennzeichnen.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, obwohl es "formal" vielleicht sein mag, das man in einem GCC 
übertiteltem Forum, auch Code bzw. Beispiele erwarten kann, die 
ausschliesslich mit gcc funktionieren, meine ich, das es für alle Leser 
hilfreich sein wird, auf solche Fälle gesondert hinzuweisen.

Nicht weil man demjenigen, der solche Beispiele bringt irgendeinen 
Vorwurf machen könnte, sondern weil es einfach nur unterstützend wirkt, 
was ja irgendwie auch der Zweck des Forums ist. Wer solche Beispiele 
bringt ist auch sicherlich nicht "verpflichtet" einen Hinweis zu 
bringen, aber es würde der grundlegenden Absicht des Forums 
entgegenkommen zu helfen und zu unterstützen.

Mir selbst ist es auch schon so gegangen, dass ich bei einigen Fällen 
gestutzt habe, im K&R nachgelesen und dann erst durch Recherche 
festgestellt habe, das etwas eine gcc-Spezialität ist. Dabei halte ich 
mich für C-erfahren und einigermaßen sattelfest. So hätte mir ein 
kleiner Hinweis einige Mühe erspart. (Ich hätte vielleicht gleich in der 
gcc Dokumentation nachgeschaut).

Es geht mir also bei meiner Bitte um den Hinweis auf den gcc-Spezialfall 
wirklich nur um Unterstützung nicht darum ob man im Recht ist diesen 
wegzulassen oder nicht. Ich meine das alle Leser davon profitieren 
könnten.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Justus Skorps schrieb:
> warum sollte man in einem GCC-Forum darauf hinweisen, dass der Code für
> GCC ist?

Weil der Name für dieses Subforum etwas unglücklich gewählt ist. Wenn 
man sich die Themen hier ansieht, dann ist klar dass es eben nicht nur 
um die GNU Compiler Collection geht.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke mal, da bricht keinem ein Zacken aus der Krone, wenn er 
einfach mal nachfragt, wenn ein Tip nicht funktioniert.
Daher halte ich es für müßig, nen Haufen Vermutungen anzustellen, wie 
jemand richtig antworten sollte.

Ich finde allerdings die Case-Bereiche für sinnvoll. Sie machen den Code 
deutlich besser lesbar gegenüber if-else-Monsterbäumen.
Und sogar Bascom kann das.
Ich habe auch vom Assemblerlisting her den Eindruck, der GCC kann den 
Code dann deutlich besser optimieren.

Man hat damit sogar einen Sinnfälligkeitscheck, d.h. die Case dürfen 
sich nicht überlappen.
Ich hatte z.B. mal ne if-else-Kolonne, die unsinnig war, weil ein 
Vergleich die falsche Richtung hatte. Ich habs nur daran gemerkt, daß 
der Code unerwartet kleiner wurde.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.