Gast
#1290005
Hallo zusammen, als Anfänger in der Embedded Programmierung habe ich eine (vielleicht triviale) Frage bei der mir sicher jemand einen Tip geben kann? Innerhalb meines Programms befindet sich ein großes switch-statement, das sehr häufig ausgeführt wird. Der Wertebereich über den "geswitched" wird erstreckt sich von 0-256, die einzelnen Cases(werte) sind allerdings nicht unbedingt aufeinanderfolgend. Avr-gcc scheint mir immer ein binary-search daraus zu generieren ich hätte aber lieber einen jump-table o.ä. Ich konnte avr-gcc allerdings nie dazu bewegen einen jump-table zu generieren auch wenn der Wertebereich über den der switch ging voll ausgeschöpft war. Als nächstes habe ich versucht gcc's label-as-value zu verwenden (jeder case ein label, ein array mit allen labels erstellen ala &&LABEL... und dann mit dem Wert der switch-expression in das array mit goto * array[expr] springen). Das hat allerdings den großen Nachteil, dass ich das Array im RAM halten muss (was für einen atmega128 ca. 512 byte bedeutet). Was macht man in so einem Fall typischerweise? Wieso verwendet avr-gcc (4.1.2) keine jump-tables? Könnte ich nicht ein vielfaches der switch-expression(0-256) im Programmcode springen und von dort über das Label den jeweiligen Fall abarbeiten? Gruß Balu