Gast
#31680
Hi, Bin Neuling im Bereich µC's. Ich möchte in Abhängigkeit von Registerwerten entsprechende Unterprogramme aufrufen. Wie lässt sich so etwas realisiern? Mit Tabellen? Danke im Vorraus
|
Anzeige
|
Tabellen und Register
Gast
#31680
Hi, Bin Neuling im Bereich µC's. Ich möchte in Abhängigkeit von Registerwerten entsprechende Unterprogramme aufrufen. Wie lässt sich so etwas realisiern? Mit Tabellen? Danke im Vorraus
Gast
#31681
Es wäre äußerst hilfreich, wenn Du auch schreiben würdest, mit welchen Controllern Du Dich beschäftigen möchtest. Da gibts nämlich Unterschiede.
Gast
#31682
Hallo Martin, in C kann man hervorragend mit Zeigern auf Funktionen arbeiten. Ich vermute aber, dass du in Assembler programmieren möchtest, richtig? Gruß Olaf
Gast
#31683
also ihr beiden, ich möchtte in Assembler programmieren und verwende den 8515 Martin
Gast
#31684
Da gibts den Befehl "ijmp". Er benutzt R30/R31 (also das Z-Register) als Sprungadresse. Dieses Registerpaar vorher evtl. per Tabelle und "lpm"-Befehl definieren. Beim lpm-Befehl bin ich mir allerdings nicht ganz sicher - ich progge nur die kleineren Atmels, aber der 8515 sollte ähnlich funktionieren.
Gast
#31685
dann sieh die mal die Befehle ijmp/icall an. Damit läßt sich das sehr schön lösen.
Gast
#31686
Also ich habe diese Befehle mal unter die lupe genommen. Allerdings müßte ich dann jedes mal das Register abfragen und je nach dem den Z-Pointer laden. gibt es da noch eine kürzere bzw. günstigere Variante?
Gast
#31687
Welchen Wertebereich hast Du in dem Register? Sind es fortlaufende Zahlen (also 0,1,2,3,4...) oder sind sie durcheinander? Bei ersterer Möglichkeit kannst Du das Register als Zeiger auf eine Tabelle benutzen und mit dem Tabellenwert das Z-Register laden. Ist ein 10-Zeiler. Es gibt nur einige Details, die ich von hier aus nicht checken kann.
Gast
#31688
Also bei einem interrupt wird ein register fortlaufend um 1 erhöht, jedoch maximal bis 9. Ok danke für den Tipp, allerdings habe ich sehr wenig Erfahrung im Umgang mit Z-Pointer und Tabellen. Martin Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|