Byte inkrementieren

Gast #4339331
Lesenswert?
• ▲
▼
Hallo, ich habe eine Frage, wie man ein Byte oder auch jede andere 
Variabel am besten inkrementiert um Werte größer 1.

1
while(!stop)
2
{
3
if(val < 255) val++;
4
else stop = 1;
5
}

Das funktioniert ja ohne Probleme.

Wenn ich aber nun den Wert jedes mal um 8 erhöhren möchte,.
1
while(!stop)
2
{
3
if(val < 255) val += 8;
4
else stop = 1;
5
}

Problem an der Sache ist, wenn ich immer 8 hinzuaddiere, lange ich bei 
theoretisch 0, da es zum Überlauf kommt.

0 + 8 = 8;
8 + 8 = 16;
...
248+8 = 256 => 0


Gibt es da eine andere Möglichkeit, als folgendes
1
if(val == 0) val += 7;
2
else if(val < 255) val += 8;

Davon ausgehend, dass die Werte nur in 8er Schritten gesetzt werden.

Alternativ
1
if(val == 0) val += 7;
2
else if(val - 8 <= 255) val += 8;
3
else { val = 255; stop = 1; }
Gast #4339337
Lesenswert?
• ▲
▼
Wie meinste das, ob es umbedingt 255 sein muss?

Ich habe hier einen Ablauf, bei dem von 0 bis 255 geregelt wird über 
einen Taster. Habe das ganze mit Debounce von Peter und der Reply 
Funktion gemacht.

Das inkrementieren um +1 dauert selbst bei 10ms noch zu lang. Würde 
deshalb gerne den Wert schneller inkrementieren. Mir geht es darum, dass 
ggf. etwas "einfacher" zu gestalten.
Gast #4339384
Lesenswert?
• ▲
▼
Was hast Du eigentlich vor? Willst Du eine "Verzögerung" programmieren? 
Dafür gibt es das "delay.."-Statement (nicht so gerne gesehen, da in der 
"delay-Zeitschleife" nichts anderes gemacht werden kann) oder Timer, die 
man entsprechend einsetzen kann.
#4339420
Lesenswert?
• ▲
▼
Oder: Zähler und Ausgabewert-Variablen trennen.

1. Countervar. wirklich nur von 0-32 zählen lassen (so läufts nie über).
2. In jedem Schritt den Endwertvar. +8
3. if (counter==32): Endwert=255 und stop=1 nachträglich zur Korrektur


Natürlich etwas overhead drin, aber vielleicht ists ja schnell genug
#4339423
Lesenswert?
• ▲
▼
Phantomix X. schrieb:
> Andreas H. schrieb:
>>
>> Muss natürlich
>>>     if( val-INCREMENT <= 255)
>> > sein.
>>

Man sollte vieleicht seine Antworten vor dem Posten auch mal lesen und 
nicht parallel am Labortisch rumschrauben :/
Es muss hier natülich +INCREMENT sein.

>
> Wke wäre es mit
>     if( val <= 255 - INCREMENT)
>
> Somit sind für INCREMENT < 256 alle Überläufe ausgeschlossen.

Da der TO explizit von Byteoperationen spricht bin ich von uint8_t 
ausgegangen. Und da sollte der Überlauf wieder nach [0..255] gewrappt 
werden (und immer noch <= 255 sein), oder ?

Anyway, Deine Lösung erscheint mir trotzdem stabiler zu sein :-)

Grüße
Andreas

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.