- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 65

Thema: Bascom Inline-Assembler

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    55
    Beiträge
    1.258
    Btw: Bascom Version ist 1.11.9.5
    mach doch erstmal ein Update.

    Gruß, Michael

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Hi Michael,
    Zitat Zitat von Michael Beitrag anzeigen
    mach doch erstmal ein Update.
    in diesem Fall ist's egal, da nur ASM betreffend und auch der Fehler offensichtlich ist. Unter Bascom wird im Originalcode mit Index 1..5 gearbeitet, die Adressierung in PicNicks Assemblercode benötigt aber Index 0..4.
    Wenn man sich die Basisadresse des Arrays mit LoadAdr holt, dann hat man bereits die erste Zelle im Pointer-Register und darf nicht noch den Index mit 1*2 dazurechnen. Wenn man's trotzdem macht, adressiert man den falschen Arrayinhalt und überschreibt hier sogar nachfolgende Variablen.

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zur Info, wer's nicht weiss: Bascom adressiert indizierte Tabellen so: er lädt
    Tabellenanfangsadresse - elementlänge
    dadurch braucht er den index nicht um 1 zu verringern.
    das fällt im generierten Code nur auf, wenn man die Tabellen-adresse im Report (prog.RPT) vergleicht.

    Zur Vorsicht, weil wir ja nicht den ganzen Code sehen: Die ISR-Routine darf nur HINTER der "END" anweisung stehen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hallo,

    Die ISR-Routine steht fast ganz am Schluss des Programms, hinter dem END. Hier (http://www.villalachouette.de/willia...iquetteDLX.txt) findet man den ganzen Quellcode, meiner ist fast identisch, außer dass ich einen BMA020 ACC über I2C anspreche und ich vier Motoren habe. Ansonsten genau gleich.

    Gruß
    Chris

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    PicNick,
    Zitat Zitat von PicNick Beitrag anzeigen
    Zur Info, wer's nicht weiss: Bascom adressiert indizierte Tabellen so: er lädt
    Tabellenanfangsadresse - elementlänge
    dadurch braucht er den index nicht um 1 zu verringern.
    Ja, ist bekannt. Und was hat das mit Deinem Code zu tun ?
    Wenn man mal den original Bascom-Code ansieht:
    Code:
    Isr_int0:
    If Channel > 0 And Channel < 6 Then
      Empf(channel) = Timer0
    End If
    Timer0 = 6
    Incr Channel
    Return
    dann wird dort channel 1..5 verwendet, Dein ASM-Code verwendet dagegen channel 0..4. Das würde nur funktionieren, wenn channel nur eine innerhalb der ISR verwendete Variable wäre und vom restlichen Code nicht angesprochen wird. Das ist aber bereits aus dem Code hervorgehend sehr unwahrscheinlich, denn pro Aufruf der Int0-ISR wird channel um 1 hochgezählt. Was ist dann bei channel = 5 ? Hört dann alles auf, oder muss channel erst überlaufen ?

    Also wird channel sehr wahrscheinlich woanders im Code auch verwendet und wenn dem so ist, müssten alle entsprechenden Stellen auf channel 0..4 umgestellt werden.
    Das macht man doch nicht so, da ist's doch einfacher der ASM-Code bildet channel 1..5 nach, auch wenn's 'nen Takt mehr kostet.

    @Chris,

    wo kommt eigentlich das Hochzählen von channel her ? Ist im Bascom-Code nicht zu entdecken.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hallo,

    mit der ISR-Int0 Routine und dem Detectrxpause Interrupt wird das Summensignal des Modellbau-Empfängers ausgelesen:
    Code:
    Detectrxpause:
    Channel = 0
    Return
    Der Timer0 (Detectrxpause-Interrupt) ist auf 4.096ms eingestellt. Das Summensignal beinhaltet ja alle Kanäle der FC (in meinem Fall 8, wovon nur 5 eingelesen werden). Nachdem alle 8 Kanäle übertragen wurden, erfolgt eine kurze Pause, durch welche der Timer0 überläuft. Somit wird Channel auf 0 gesetzt, damit die Signale erneut eingelesen werden können.
    Mit diesen 5 Werten wird dann der Copter gesteuert; sie werden im übrigen Programm auf Integer-Zahlen (Bereich: -37 ... +37) umgerechnet. Aber hier gehts nur ums einlesen der Signale.
    Ich hoffe, das beantwortet deine Frage?!

    Gruß
    Chris

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Che Guevara Beitrag anzeigen
    Code:
    Channel = 0
    Das ist die einzige Stelle an der auf Channel zugegriffen wird ? Allein daraus ergibt sich aber schon der Unterschied, dass bei einem Index von Channel 1..5 der Int0 wenigstens einmal vorher triggern muss muss, damit Channel auf 1 geht, wobei's bei PicNick's Code sofort losgeht. Und das macht den Unterschied aus.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Ja, das ist die einzige Stelle. Channel wird nur zum Einlesen benötigt.
    Also muss ich doch auf >=1 und <6 abfragen, damits stimmt?!

    Gruß
    Chris

Ähnliche Themen

  1. Inline Assembler
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 01.02.2010, 19:25
  2. AVR GCC inline Assembler
    Von chientech im Forum Assembler-Programmierung
    Antworten: 1
    Letzter Beitrag: 26.09.2009, 16:39
  3. Inline Assembler für Anfänger
    Von 1udo1 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 25.10.2007, 19:53
  4. Inline Assembler - Register
    Von s.o. im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 02.08.2007, 20:26
  5. Parameterübergabe bei Inline-Assembler
    Von ogni42 im Forum C - Programmierung (GCC u.a.)
    Antworten: 21
    Letzter Beitrag: 30.03.2006, 13:32

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress