Hallo! Um eines vorweg zu nehmen, ich habe bereits gesucht in anderen Threads bin aber leider zu doof um das alles zu verstehen. Mir reichen die Register 16-31 bei meinem Atmega nicht mehr aus, brauche aber noch einpaar Speicherstellen um die Daten welche ich in einem Unterprogramm ermittelte im Hauptprogramm wieder ins Spiel zu bringen. Da dachte ich, dass sram würde sich hier vielleicht noch gut machen. Oder was ist mit den Reg. 1-15?? Also wieder zum sram: der Anfang kann ich nicht gebrauchen, da dort Register r1-r31 und die I/O-Register schon vergeben sind, dann kommte der Bereich den ich nutzen kann. Bis wohin geht der bei einem ATmega8? Zweite Frage: Ich habe gelesen, dass man die sram Adresse in den Z-Pointer laden muss und dann weiss ich nicht weiter. Wie lautet der Befehl um etwas dort anzulegen und wie lautet der Befehl um es wieder zu holen? Danke für eure Hilfe!!! Grüsse
Die Adressen sowie die Größe des SRAMs findest Du im Datenblatt im Kapitel "SRAM Data Memory". Für die Verwendung es SRAMs dürfte http://www.avr-asm-tutorial.net/avr_de/beginner/sram.html ganz hilfreich sein. Fino
Danke, genau sowas suchte ich, noch eine Frage, was ist an den Registern 1-15 speziell? Kann ich die nicht normal als Speicherstellen verwenden?
Du kannst r0 bis r15 genau wie r16 bis r31 benutzen, abgesehen von einigen wenigen Befehlen wie ANDI, ORI usw, bei denen mit Konstanten gearbeitet wird; diese sind nur für r16 bis r31 verwendbar.
wieso nicht einfach den stack dazu bentzen? WÜrd ich jetzt mal sagen ... is auch das SRAM, braucht man aber net immer nach den adressen zu schaun ...
Wie funzt das mit dem Stack, wenn ich im Hauptprogramm in r16 etwas habe und das nicht verlieren will, wenn ein Interrupt kommt in welchem auch auf r16 etwas geschrieben wird, dann kann ich am anfang der Interruptroutine mit push r16 das in den Stack tun und vor reti wieder pop r16. Funzt das so??
hey! kann mir jemand den zugraff aufs interne 1k sram des mega8 mit c mailen? verwende gcc (winavr 2006) und fange mit den asm routinen oben nix an. wie schreib ich ein byte (aus einer char-variable) ins sram und wie krieg ichs wieder raus? (in c!) danke und gruss, peter
> kann mir jemand den zugraff aufs interne 1k sram des mega8 mit c > mailen? Beispiel: x = 5; > wie schreib ich ein byte (aus einer char-variable) ins sram Indem du eine weitere char-Variable anlegst und den Wert einfach in die Variable schreibst. > und wie krieg ichs wieder raus? (in c!) Indem du den Wert einfach wieder aus der Variable liest. Variablen sind nichts weiter als Speicherstellen im internen SRAM. Die Adressvergabe passiert automatisch. In einigen Fällen können sie durch Optimierungen durch Register ersetzt werden oder gar ganz wegfallen.
Für Variablen in ASM mach ich das so, ich muss mich dann garnicht drum kümmern wo das ganze im SRAM liegt, für ein Array müsste man das aber mit den Pointern machen. .DSEG ;Reserve jeweils 1 Byte / Variable im SRAM Steuerbyte1: .byte 1 Steuerbyte2: .byte 1 Temperatur: .byte 1 .... .... .CSEG .ORG 0x00 Reset: lds temp, Steuerbyte1 ;Lade Steuerbyte1(SRAM) nach temp sts Steuerbyte1, temp ;Speichere temp ins Steuerbyte1(SRAM)
> kann mir jemand den zugraff aufs interne 1k sram des mega8 mit c > mailen? verwende gcc Unter C geht Dich das überhaupt nichts an, das ist nämlich Sache des Linkers. Und der wird sehr ärgerlich, wenn man ihm ins Handwerk pfuscht. Jede Variable wird allein über ihren Namen referenziert. Peter
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.