Forum: Mikrocontroller und Digitale Elektronik Aufgrund zweier 8-Bit Werte Funktion ausführen


von Matrix (Gast)


Lesenswert?

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?

von Martin (Gast)


Lesenswert?

[avrasm]
compare:
  cpi    Zahl1,    127
  brlo   exit
  cpi    Zahl1,    192
  brsh   exit

...

machen:
  machen
  ret
exit:
  ret

von Matrix (Gast)


Lesenswert?

Okay, noch ne Lösung, für die die C toll finden...

von Michel (Gast)


Lesenswert?

Matrix schrieb:
> Jetzt möchte ich 25 "Fenster" Definieren

Für einen µC wären 32 Fenster wesentlich bequemer zu handhaben.

von Mike R. (thesealion)


Lesenswert?

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 :)

von Stefan E. (sternst)


Lesenswert?

Matrix schrieb:
> Wie geh ich hier am besten an diese Problemstellung heran?!

Die Fenster in einer Tabelle festlegen und dann in einer Schleife 
abarbeiten.

von Jens (Gast)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.