-         

Ergebnis 1 bis 6 von 6

Thema: Macro gefolgt von Macro - Ratsam ?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.05.2006
    Beiträge
    9

    Macro gefolgt von Macro - Ratsam ?

    Anzeige

    Hallo,

    habe 2 Macros:

    UeberspringeWennGerade MACRO Register
    BTFSC Register,0
    ENDM

    und

    IrgendeinMakro MACRO Register, Wert, Ziel
    NOP
    NOP
    GOTO Ziel
    ENDM

    Jetzt mache ich Folgendes:

    ...
    Gerade Reg1
    IrgendeinMakro Reg1,H'1',Irgendwohin
    GOTO BlaBla
    ...

    Wie wird das vom Assembler behandelt ? Werden alle Anweisungen aus dem 2 Makro übersprungen, wenn Reg1=0 ?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    probier das doch mit der Simulation von MPLAB aus. also ich würde nein sagen. Der Präprozessor tauscht zuerst alle Makros gegen den Code aus und danach kümmert sich erst der Compiler um den Code. Dh du bekommst nur einen Befehl übersprungen, hier dein erstes NOP des zweiten Makro.

    Und MPLAB Sim ist ne feine sache, man muss sich einmal kurz einarbeiten, und je nach frequenz eine grundeinstellung ändern und ab gehts, wie bei einem guten PC-Compiler(zb Visual C++)... ich benutzt das ding immer, und kenn nichtmal 50% seiner funktionen.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Hallo pickelrobert,
    es wird immer nur der unmittelbar folgende Befehl 'übersprungen'; es heißt ja nicht goto, sondern skip. Wenn in einem darauf folgenden Macro mehrere Befehle stehen, wird nur der erste Befehl übersprungen. Das wird in den meisten Fällen 'schief' laufen.
    In MPLAB werden die einzelnen Befehle eines Macros leider nicht angezeigt, zumindest habe ich dafür noch keinen Konfig-Schalter gefunden.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    23.05.2006
    Beiträge
    9

    Danke

    Danke. Habe ein wenig herumprobiert und genau das festgestellt. Arrgghh.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    naja, aber ist leicht zu übergehen. Man muss nur ein wenig "verdreht denken

    Code:
       btfss register,0
       goto Next_Jump
    
       ... alle befehle, die ausgeführt werden, wenn register,0 gesetzt war ...
    
    Next_Jump:
    Also, naja, da ich leider kein Pseudo-Code (gibt es den sowas, ne standartisierung für Pseudo-Codes?) beherrsche, kann ich dir das leider net aufschreiben. Aber halt, wenn das Bit gesetzt ist, so wird das goto übersprungen und die anschließenden Kommandos werden ausgeführt. Ansonsten wird das goto ausgeführt und alle Befehle übersprungen. (diese Art von Sprüngen ist extremst hilfreich, bei der Abarbeitung von Interrupts ^_^).

    Naja, Macros kann man nur anschauen, indem man das Dissasembly-Fenster öffnet (aber leider funzt der Debuger dort drin nicht).
    MfG
    Mobius

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Dann kannst du das aber nur machen, wenn du das makro nur einmal brauchst, wenn du es nochmal einsetzen willst, musst du ja das sprungziel ändern und damit wird ein Makro sinngemäß hinfällig

Berechtigungen

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