- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 24

Thema: XC8 inline Assembler

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076

    XC8 inline Assembler

    Einen schönen guten Morgen,
    Ich programmiere mit dem XC8 Compiler und wollte was in Assembler einfügen:

    asm("movlw 255");
    asm("movwf FSR0L");
    asm("delay_a:");
    asm("decf FSR0L,F");
    asm("btfss STATUS,Z"); hier liegt wohl irgend ein Problem vor ?
    asm("goto delay_a");

    Der Inline Assembler kennt aber die Statusflags C,Z,....nicht...

    Hab schon ne Stunde gegoogelt und auch in der XC8 Anleitung gestöbert.
    Keine Ahnung wo das Problem liegt.
    Direkt in Assembler hab ich das zig tausendfach gemacht.

    Kommt davon wenn man auf "C" umsteigt.....selber schuld......

    Siro

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Habe jetzt den Code geändert, dann brauche ich das Statusbit Z nicht abfragen.

    asm("decfsz FSR0L,f");
    asm("goto delay_a");

    aber irgendwie muss man ja auch auf die Statusbits zugreifen können...aber wie ?


    warum ich Assembler benötige ?
    Eine definierte Laufzeit, das geht nicht in "C" sondern nur in Assembler und die Timer sind alle vergeben....
    Geändert von Siro (11.02.2017 um 11:46 Uhr)

  3. #3
    shedepe
    Gast
    Doofe Frage. Hast du dem Compiler gesagt, dass du Inline Assembler verwenden willst? Wenn ich mich nicht täusche muss man das bei den meistens Toolchains explizit aktivieren.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Siro Beitrag anzeigen
    Eine definierte Laufzeit, das geht nicht in "C" sondern nur in Assembler und die Timer sind alle vergeben....
    für eine definierte Wartezeit von x Zyklen würde ich die Funktion _delay(x) verwenden.

    Code:
    _delay(1020);
    ist mMn lesbarer als
    Code:
    #asm    
        movlw 255
        movwf FSR0L
    delay_a:
        decf FSR0L,F
        btfss STATUS,2 
        goto delay_a
    #endasm
    Und dann gibts noch die zeitbezogenen __delay_us(x) und __delay_ms(x) für die man lediglich _XTAL_FREQ definieren muss.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Guten Abend,
    erstmal Danke für euro Infos.

    @shedepe
    Bei dem XC8 Compiler muss man "eigentlich" nichts extra einstellen, hab mir das nochmal genau angesehen.

    @witkatz
    so wollte ich das eigentlich haben, dann habe ich irgendwo gelesen, dass man jede Zeile separat als asm (" "); schreiben soll.

    ich habe jetzt deine Variante probiert: siehe Screenshoot:
    Klicke auf die Grafik für eine größere Ansicht

Name:	120_us.jpg
Hits:	10
Größe:	12,7 KB
ID:	32410

    irgendwie mag er das nicht:

    unable to resolve identifier movlw
    unable to resolve identifier movwf
    unable to resolve identifier delay_a unexpected token
    unable to resolve identifier decfsz
    unable to resolve identifier delay_a
    unable to resolve identifier nop

    unexpected token }


    Jetzt das erstaunliche, er hat trotzdem ein Compilat erstellt.....
    ich glaub ich muss die ganze IDE neu installieren, da ist doch was faul.


    Habe komplett neu installiert. IDE und Compiler.
    Das ändert aber nichts. Sehr merkwürdig.

    Aber der Hinweis mit dem __delay_us habe ich grad ausprobiert.
    Man muss nur ein define _XTAL_FREQ definieren und dann erzeugt der Compiler selbst den Code für die Warteschleife.
    Supi, das wuste ich noch nicht. Ist ja auch viel übersichtlicher. Danke Dir witkatz
    Geändert von Siro (11.02.2017 um 22:35 Uhr)

  6. #6
    shedepe
    Gast
    http://ww1.microchip.com/downloads/e...Doc/52053B.pdf
    Abschnitt 5.12..3.2
    Du hast ein #include <xc.h> in deinem File?.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von shedepe Beitrag anzeigen
    Du hast ein #include <xc.h> in deinem File?.
    Ich kann nicht für Siro antworten, aber ich habe für meinen oben geposteten Beispielcode die xc.h als einzigen Header eingebunden.
    Die Fehlermeldungen im Editor kommen bei mir auch. Es ist wohl das normale Verhalten des Preparsers, so steht es zumindest im MPLAB X IDE User's Guide Chap. 9.7.7
    Als Workaround könnte man die Multiline Schreibweise benutzen, allerdings dann ohne die Möglichkeit den Assemblecode zu debuggen
    Code:
    asm("\
        movlw 0x9D;         \
        movwf FSR0L;        \
    delay_a:                \
        decfsz FSR0L,F;     \
        goto delay_a;       \
        nop;                \
    ");
    Ich persönlich mag das mischen von C und ASM nicht. Ich habe bis jetzt inline Assembler gemieden und möchte dabei auch bleiben. Wenn ich um Assembler nicht herum kommen sollte, würde ich lieber das ganze Projekt oder zumindest ein Modul komplett in Assembler machen wollen.
    Geändert von witkatz (12.02.2017 um 20:47 Uhr)

Ähnliche Themen

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

Berechtigungen

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

Labornetzteil AliExpress