Hallo ich habe in einem Computersystem zwei 8-Bit Zahlen, deren Werte eben von 0-255 liegen. Jetzt möchte ich 25 "Fenster" Definieren, welche sozusagen vorgeben: "Liegt Zahl 1 zwischen 127 und 191 UND Zahl 2 zwischen 127 und 191" Dann mach was... Und soetwas eben dann ganze 25 mal. Wie geh ich hier am besten an diese Problemstellung heran?! Weiß da jemand Rat?
[avrasm] compare: cpi Zahl1, 127 brlo exit cpi Zahl1, 192 brsh exit ... machen: machen ret exit: ret
Okay, noch ne Lösung, für die die C toll finden...
Matrix schrieb: > Jetzt möchte ich 25 "Fenster" Definieren Für einen µC wären 32 Fenster wesentlich bequemer zu handhaben.
Ohne wissen wie deine Fenster genauer definiert sind:
1 | if (((Zahl1 > 127) && (zahl < 191)) && ((zahl>127) && (zahl2 < 191))) |
2 | {
|
3 | //mach doch was
|
4 | }
|
wobei man das natürlich beliebig optimieren kann :)
Matrix schrieb: > Wie geh ich hier am besten an diese Problemstellung heran?! Die Fenster in einer Tabelle festlegen und dann in einer Schleife abarbeiten.
Hallo Matrix, da führen sicherlich viele Wege nach Rom. Wenn es schnell gehen soll und Speicher keine große Rolle spielt, kannst Du ein Feld von 256 Funktionszeigern anlegen und den Wert als Index nehmen. Hmmm, bin gar nicht sicher, dass es deutlich mehr Speicher braucht als 25 Fenstervergleiche. In nehme mal an, die Fenster sind nicht gleichverteilt über die 256 Werte, oder? Es wird natürlich einfacher, wenn es irgendwelche Wege zur Vereinfachung gibt (z.B. Wegschneiden des letzten Bits). Aber das wissen wir ja nicht... Und wie genau es sein muss, wissen wir auch nicht. Wenn Du z.B. auf Basis einer Potistellung, die per AD-Wandler eingelesen wird, unterschiedliche Dinge tun willst, kannst Du sicherlich einfach den Wert 0..255 durch 10 teilen und bei 24 kappen. Dann wird das Funktions-Array klasse klein. Handlicher ist dann aber vielleicht eine switch-Struktur, da kann man doch etwas besser drin schaffen.
1 | switch (wert/10){ |
2 | case 0: tue, was bei 0..9 zu tun ist |
3 | break; |
4 | case 1: tue, was bei 10..19 zu tun ist |
5 | break; |
6 | ...
|
7 | case 23: tue, was bei 230..239 zu tun ist |
8 | break; |
9 | default: tue, was bei 240..255 zu tun ist |
10 | }
|
Gruß Jens
Hups, da habe ich wohl die Aufgabenstellung nicht wirklich gelesen. Die schlichte Tabelle mit Funktionszeigern entfällt wohl, die weiteren Ausführungen lassen sich aber verwenden... Deine Beispielwerte lassen vermuten, dass nicht wirklich alle Bits benötigt werden. Vorher vereinfachen ist auf jeden Fall eine gute Idee (Teilen oder Shiften, wenn es aufgeht). Jens
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.