-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Direkter SRAM zugriff (ASM)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470

    Direkter SRAM zugriff (ASM)

    Anzeige

    Hallo ich melde mich mal wieder mit einem problem,

    also ich möchte aus einer bestimmten Addresse des SRAMs meine Werte auslesen, das ist ja mit

    LDS register, 0xXX

    kein Porblem.
    So wenn ich aber jetzt ein Register hab in dem die Addresse gespeichert ist, kann ich nicht darauf zugreifen:

    LDS register, addressregister

    DAS GEHT NICHT!!!

    Wie kann ich aber das so einrichten, das ich auf die in einem Register gespeicherte Addresse zugreifen kann????

    Grüße Teslanikola

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Was hast Du vor, ich verstehe Dein Problem nicht in einem Register ist die Sramadresse ?

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Also die Addresse zB 0x15 wird per LDI in ein Register gepackt und dort soll auch was geschrieben werde,so.
    Jetzt will ich hald an anderer stelle die Daten wieder auslesen.

    BSp:
    .def adress = r16

    ldi adress, 0x20
    schreibe ein register in Adresse 0x20 ( wie machen? STS geht mit Register ned )
    .
    .
    .
    lese daten aus adresse ( Register= Adress ) aber mit LDS geht ein zugriff per register (adresse) nicht.

    Wie lösen?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Der obige Befehl lädt r16 mit 0x20, das hat nix mit SRAM zu run.

    Für LDS und STS kannst du direkt hart die Adresse angeben oder ein Symbol. Wie die Syntax für letzteres ist (Definition, Deklaration und Referenzierung), hängt von deinem Assembler ab.
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    meinst Du indirekte Adressierung?
    Dann schau mal die Befehle LD an, mithilfe von den X, Y und Z-Registern kann man den Speicher indirekt adressieren.

    AVR Instruction Set :
    http://www.atmel.com/dyn/resources/p...ts/doc0856.pdf

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    @linux, das mit den Pointer-Register ist mir schon klar, was mien Porblem ist: ich hab ein Array ( 5Bytes ) im Sram ( vom ender her ) und jetzt will ich mal das eine, mal das andere Byte auslesen oder schreiben, nur ich weis ja ned wie ich das machen soll, die Pointregister brauch ich schon für meinen sack ( der fängt dann hald nicht am ende des SRAM an sondern 5Bytes eher ) wie kann ich also bestimmte bytes ( welches wird vom µC bestimmt) auslesen?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Pointer-Register hast du 3 Stück, X, Y und Z. Wenn die alle belegt sind, musst du eines davon auf dem Stack sichern oder in einem freien Register und danach wieder herstellen.
    Disclaimer: none. Sue me.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    arg entweder werd ich ned verstande, oder ihr versteht mich nede. Ich will einfach die Addresse, welche ich in einem Register gespeichert hab, aus dem SRAM auslesen und diesen wert ( aus dem Sram) in ein weiteres register schreiben.

    Meine Idee:

    Also wenn ich meinen Stack erst 5 Bytes vor dem SRAM ende anfange, dann hab ich ja auf jeden 5 Bytes aus dem SRAM zu meiner Freien verfügung, so darin speicher ich mir jetzt nacheinander ein paar daten, da ich ja mir die Addresse dieser Position irgenwie merken muss sollte die irgenwie in ein Register. So. nun will ich ja meine Daten ja irgendwann mal abrufen, also die Addresse aus dem Registerholen und mit ihrer Hilfe irgenwie an meine Daten kommen, nur will die sache ned funktionieren. man kann ja mit dem tolle LDS zielreg, 0x20 toll auf die adresse 0x20 zugreifen, aber wenn ich jetzt statt 0x20 ein register ( mein adressregister in dem ja auch 0x20 gespeichert ist ) dann geht die sache komischerweise ned mehr. So genau da hängts wie kann ich das lösen?

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    So was nennt man indirekten Zugriff.

    LDI r30, lo8(addr) ; abhängig vom Assembler
    LDI r31, hi8(addr)
    LD r10, Z
    Disclaimer: none. Sue me.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    teslanikola,
    was soll der Quatsch?
    Ich weiß, daß es von hinten Spaß macht aber wieso gehst Du nicht von vorne an den Sram ?
    Meistens kann man den ab der Adresse 0x0060 für eigene Zwecke benutzen.
    Der Stack kommt von hinten nach vorne, und Deine Daten von vorne nach hinten...
    So macht man das meistens.

    Gruß Sebastian

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •