Wie wär's damit:
https://www.roboternetz.de/wissen/in...sterverwendung
Hallo,
Ich möchte gerne ein paar Funktionen in Assembler auslagern
(in einer .S Datei), was auch an für sich gut geklappt hat.
Was ich mich allerdings frage, muß ich immer den Inhalt von den Registern mit dennen ich arbeite sichern (push, pop) oder ist das nicht notwendig ?
Wenn ich in einer Funktion Parameter erwarte werden sie ja in Registern R24 nach oben hin abgelegt, das ist klar, aber wenn ich keine erwarte, dürfte ich sie doch nach belieben beschreiben, oder muß man zwingend den Inhalt "retten" ?
Gruß Sebastian
Wie wär's damit:
https://www.roboternetz.de/wissen/in...sterverwendung
Disclaimer: none. Sue me.
Danke Sprinter,
ich hab in Deinem Artikel schon geguckt, aber das habe ich überlesen
Das heißt also, daß ich die R18-R27 verwenden darf, und den Inhalt nicht mehr herzustellen brauch.
Und mit dem "runden" meinst Du daß LSB immer auf einem geradem (24,22,20 usw.) Register liegt, zwei chars z.B R24 und R22 ?
Gruß Sebastian
So ist es.
Zudem kannst du das Z-Register R31:R30 verwenden, ohne es zu restaurieren. Auch Parameterregister kannst du überheinern, ohne sie wieder herzustellen. Es sei denn, du ruftst von deinem asm aus selber Funktionen auf, die Parameter-Register unterhalb von R18 brauchen.
Disclaimer: none. Sue me.
super, danke Du hast mir sehr geholfen,
vielleicht könntest Du mir noch eine kleine Frage beantworten, und zwar
hab ich in Peter Fleury I2C Routine folgende Zeilen gefunden, die mir nichts sagen:
.func ist klar, aber die zwei .stabs ? und vor alem die Parammeter...Code:.stabs "",100,0,0,i2c_delay_T2 .stabs "i2cmaster.S",100,0,0,i2c_delay_T2 .func i2c_delay_T2 ; delay 5.0 microsec with 16 Mhz crystal
Es geht sich nicht um diese speziele Routine, sondern um es allgemein zu verstehen...
*Hoffnungsvoll nach oben guckend*
Gruß Sebastian
Alternativ könntest du die Funktionen als C-Stubs machen, die nur Inline Assembler enthalten. In dem Falls übernimmt avr-gcc die Registerverwaltung/-sicherung, Einsortierung von Parametern, return-Wert etc.
Disclaimer: none. Sue me.
Das sind debug-Infos im stabs-Format. Was die sagen weiß ich net, da müsstest du stabs lernen. (dwarf ist nochmal übler).
Übersetz doch mal ein C-File mit -g oder
-gstabs Generate debug information in STABS format
-gstabs+ Generate debug information in extended STABS
Das erste ist glaub die Zeilennummer. Am besten lässt du das den Debugger machen, der weiß, wie das zu lesen ist
In Code resultiert das nicht, landen tut es in einer .stab*-Section (bei elf) in hex ist AFAIK keine Debug-Info drinne.
Disclaimer: none. Sue me.
Danke, nur Debugger-Infos, also nichts was mit Programmablauf zu tun hat...
Ich glaube, ich muß mich auch mal mit dem gdb auseinandersetzen (so ein kurzes Leben, und so viele Sachen zu lernen)
Mit dem Inline Assembler hast Du sicher recht, nur mit seinem Syntax komm ich irgendwie noch nicht so richtig zurecht, aber das kommt noch.
Ich möchte mich nochmal für die schnelle und gute Hilfe bedanken.
Gruß Sebastian
Ja, die Syntax ist recht vertrackt. Vielleicht hilft ja der neue Artikel über Inline-Assembler weiter.
Längere Funktionen schreibt man jedenfalls bequemer direkt in Assembler, aber gerade wenn man sich selber um die Registerallokierung kümmern muss ist das nervig.
Disclaimer: none. Sue me.
Bist Du einen am schreiben?Vielleicht hilft ja der neue Artikel über Inline-Assembler weiter.
Das fänd ich gut, vor allem, weil es halt irgendwie Artikel dieser Art im Netz nicht zu finden sind.
Gruß Sebastian
Lesezeichen