Hallo, ich habe einen int Wert der "nur" 16 verschiedene (keine Zahlenfolge) Zustände annehmen kann: z.B. 4, 16, 48, 68, 120 ... 1025, 1059 Diese Werte würde ich gerne in andere Zahlen (char) überführen. Die Berechnung würde eigentlich über eine sin und Binomialverteilung gehen, also zu kompliziert/rechenintensiv für den 8-bitter. Um dem uC das zu ersparen, würde ich also gerne eine Art Look Up Table haben, d.h. z.B. dem Wert 48 wird fest 143 zugeordnet (da die Berechnung eh dieses Ergebnis liefern würde und ich die entsprechenden Werte vorab am PC ausrechnen kann). Wenn die Werte von 0 bis 15 gehen würden, würde ich das einfach über ein Array machen. Das müsste hier aber von 0 bis 1058 gehen (mit entsprechend vielen "Lücken"/Nulleinträgen) und nimmt dann viel Speicher ein. Gibt es für dieses Problem in C (AVR-GCC) eine elegante Lösung? Danke, Holger
Wenns nicht zuviele Werte sind, kannst du ja
1 | SWITCH-CASE |
nehmen. Oder folgen die Eingangswerte einer bestimment Regel? zB Zehnerschritte?
Hallo, gar nicht dran gedacht, vor die Strin klatsch. Wie gesagt, sind nur 16 Werte, die sind auch schnell in einer switch case Struktur drin. Wobei da die Laufzeit sehr unterschiedlich ist, evtl. müssen ja im Maschinencode zuerst 15 Werte überprüft/verglichen werden, bis dann endlich der letzte passt. Trotzdem danke für die schnelle Antwort. Holger
Dann teile es halt in mehrere kleine Teile auf: angenommen diese Zahlen: 4 8 12 16 25 39 70 90 110 200 300 400 600 1000 2000 4000
1 | if (z > 90){ |
2 | |
3 | if (z > 400){ |
4 | switch(z){ |
5 | case 600: ... |
6 | case 1000: ... |
7 | case 4000: |
8 | default:
|
9 | }
|
10 | }
|
11 | else{ |
12 | switch(z){ |
13 | case ... |
14 | }
|
15 | }
|
16 | |
17 | else{ |
18 | if (z > 16){ |
19 | switch(z){ |
20 | case ... |
21 | }
|
22 | }
|
23 | else{ |
24 | switch(z){ |
25 | case ... |
26 | }
|
27 | }
|
28 | }
|
So hast Du max. 2 Vergleiche und 4 case-Schritte pro Durchlauf. Gruß, Stefan
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.