- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Inline Assembler

  1. #11
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Anzeige

    Powerstation Test
    Der RJMP ist ein einfacher Sprung, ohne Rückkehr.
    RCall ist dagegen der Aufruf eines Unterprogramms, so dass man per RET auch wieder zurückkommt.
    Das enspricht ziehmlich 1:1 den Basic Befehlen Goto und Gosub.

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Hm war mir gar nicht aufgefallen. Natürlich musst Du ein RCALL einsetzen. Da wird ja dann die Adresse auf dem Stack abgelegt, wo nach dem RET wieder zurückgesprungen werden soll. Ein relativer Sprung springt ja nur und merkt sich, lapidar gesagt, nicht, wo er her kommt. Trotz dem meine ich, dass Du in R16 eine 255 schreibst und im nächsten Schritt mit 0 vergleichst. Oder sollte ich mich da irren.

    Allerdings finde ich, dass Deine Fragen eher Off Topic sind und in den ASM Bereich sollten. Da kennen sich bestimmt mehr Leute mit aus als hier. Ich selbst progge hauptsächlich in Hochsprachen und nutze nur für Zeitkritisches oder Platzkritisches Inline ASM. Habe also eher wenig Erfahrung und sehe so gut wie jedesmal neu im Datenblatt nach, wie die Befehle zu nutzen sind...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    So... jetzt hab ich das nächste Problem, welches diesmal wirklich mit Bascom zu tun hat
    Ich habe die Demoversion (V: 1.11.9.5). Wenn ich folgenden Code compilieren möchte, dann kommt eine Fehlermeldung.
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $framesize = 30
    $hwstack = 30
    $swstack = 30
    
    $asm
    
    .def Temp = R16
    
    .def A = R17
    
    .org $000 Rjmp Main
    
    .org $002 Rjmp Int0_handler
    
    
    Main:
    
    ldi temp, &b11111111
    Out Ddrc , Temp
    
    ldi temp, &b00000000
    Out Ddrd , Temp
    
    ldi temp, &b11111110
    Out Portc , Temp
    
    ldi temp, &b11111111
    Out Portd , Temp
    
    ldi a,&b00000011
    Out Mcucr , A
    
    ldi a,&b01000000
    Out Gimsk , A
    
    sei                                                         'interrupts allgemein aktivieren (enable interrupts)
    
    
    
    Lop:
    
    nop
    
    rjmp lop
    
    Int0_handler:
    sbi portc , 0
    reti
    
    $end Asm
    
    End
    Folgende Meldung kommt dann:
    Code:
    Access violation at address 0024572E in module 'BASC-AVR.DLL'. Write of address 05BF1000.
    Wenn ich allerdings das
    Code:
    .org $000 RJMP Main
    rausnehme, dann kommt die Meldung nicht.
    An was liegt das?
    Und stimmt mein Programm ansonsten (also INT0 auf fallende Flanke)??

    Gruß
    Chris

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143
    Hallo,

    ich Progge viel mit Bascom und verwende auch viel den Inline-Assembler.
    Bei deinem Code fällt mir auf, dass du alles in Assembler schreiben willst, auch die Interrupt-Vector Tabelle.

    Bascom ist eigentlich ausgelegt um in Basic zu proggen. Natürlich kann man auch vieles in Assembler machen, aber Interrupt-Vectortabelle erstellen geht nicht.

    Auch Befehle wie .org .data .eep etc geht nicht.

    Wenn du in reinem Assembler Proggen willst, dann nimm besser AVR-Studio.

    Das Assembler in Basom ist als Inline-Assembler gedacht.

    Interrupts sollten deshalb besser mit Bascom-Statements configuriert werden. Das Spart Zeit und man behält die Übersicht. Korzer wird der Code nicht in Assembler.

    Wenn du mit Bascom Assembler lernen willst, dann versuche dich anfangs auf einzelne Routinen zu konzentrieren. Deine versuchte Initialisierung sieht sehr nach AVR-Studio aus. In Bascom wird das nur bedingt compiliert und vermutlich nicht funktionieren.

    Wenn du trotzdem in dieser Richtung experimentieren willst, dann schau dir mal die Befehle der Bascom Hilfe an. Z.B. $NoInit, $NoRam, $Initmicro, $Loader, $Loadersize, NoRamclear, $RomStart und so weiter an. Da findest du viele Hinweise. Dann wird für dich bestimmt vieles klarer.

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hallo Mitch64,

    erstmal danke für deine Antwort.
    An AVR-Studio hab ich auch schon gedacht, jedoch hab ich keine Seite gefunden, auf der man das downloaden kann (bzw. ich weiß nicht, welche Datei ich brauche, weil teils französisch). Außerdem bin ich mir nicht sicher, ob das auch mit dem USB-ISP (von robotikhardware) funzt??

    Gruß
    Chris

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143
    Hallo,

    das AVR-Studio gibts kostenlos direkt bei www.atmel.com. Das ist der Hersteller dieser Controller. Ob das mit deinem USB-Programmer funktioniert kann ich dir nicht sagen. Muste in der Doku schauen von Studio.

    Alternativ brennste das hex eben mit Bascom, das geht auch.

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen