AVR GCC: "Array"/Look Up Table mit Lücken > Zahlen zuordnen

Gast #605770
Lesenswert?
• ▲
▼
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
Gast #605778
Lesenswert?
• ▲
▼
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
#605787
Lesenswert?
• ▲
▼
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

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.