PIC-Microcontroller

Elektronik u. Mikrocontroller => Mikrocontroller => Thema gestartet von: Ottmar in 02.08.2025, 17:09:07 CEST

Titel: Relocatable Code hier: Verwndung gleicher Label in verschiedenen ASM_Files
Beitrag von: Ottmar in 02.08.2025, 17:09:07 CEST
Hallo zusammen,
derzeit versuche ich mich an relocatable code. Ich verwende MPLAB 8.9. Dazu habe ich im Projekt 2 ASM-Files angelegt:
    1. Main.ASM        - verwendet z. LCD_Init, LCD-Ausgabe aus File 2
    2. LCD_Lib.ASM   -verwendet Variablen und Labels aus File 1
In beiden Dateien werden mit GLOBAL und EXTERN bezeichnete Variablen und Subroutinen verwendet. Die Subroutinen in LCD_Lib.ASM können aus Main.ASM heraus problemlos aufgerufen werden, ebenso wie die Verwendung gemeinsam genutzer Variablen (GLOBAL, EXTERN). Das funktioniert.

Das Prinzip: Um die Verwendung verschiedener PIC's zu erleichetern, da ich den Programmcode so mit geringstmöglichen Änderungen weiterverwenden kann, verwende ich für PORTS und auch für Pins Platzhalter, also Labels in dieser Form:
   LED_PORT  EQU PORTA
   LCD_LAT    EQU  LATA
usw...
  LCD_DAT   EQU   RA0 (ich verwende bevorzugt mein 2Wire-Interface)
  LCD_CLK   EQU   RA1
  LED          EQU   RA2
#DEFINE LED_ON bsf LCD_PORT,LED

Das Problem: Wie kann ich diese Lables LCD... in beiden ASM-Files gleichermaßen verwenden?
Im File LCD_Lib.ASM werden diese Labels als ungülti bezeichnet, da diese erneut definiert werden un das nicht zulässig ist. Ichfinde nichts, was mir da weiterhilft.

Frage: Wie erreiche ich, daß ein in Main.ASM zugewisern Label auch in LCD_Lib.ASM verwendet werden kann?

Freue mich auf hilfreiche Antworten!

mfG Ottmar
Titel: Aw: Relocatable Code hier: Verwndung gleicher Label in verschiedenen ASM_Files
Beitrag von: ^Cobra in 02.08.2025, 17:22:38 CEST
Ich hatte mir eine Datei angelegt wo die konfig enthalten war. Diese habe ich in allen Dateien per include eingefügt. Im der Datei war z.b. die inc Datei des Pics, Pic Taktfrequenz, Bus Geschwindigkeit usw. Zumindest konnte ich so durch einmaliges festlegen es in mehreren Dateien nutzen. Eine andere Möglichkeit habe ich nicht hingekriegt.

Sonniger Gruß aus Spanien (Urlaub)
Cobra 
Titel: Aw: Relocatable Code hier: Verwndung gleicher Label in verschiedenen ASM_Files
Beitrag von: Ottmar in 02.08.2025, 17:47:45 CEST
@Cobra
Wenn ich mit den genannten ASM-Files alle Labels so wie vorstehend weglasse und nur mit Variablen und Subs arbeite, klappt alles wunderbar!

Ah! O:-) Die Erleuchtung! Ich verstehe! Diese Labels sind kein Variablen, keine Subroutine und müssen also gleichermaßen in beiden Dateien  vorhanden sein,wie z.B. #INCLUDE <P18F14K22.INC> welches ich ja bereits in 1+2 eingschlossen habe! Der Inhalt sind auch alles Labels!
Jaaaa! Dann brauche ich ja nur dieses eine prozessorspezische   #include 18F14K22_LCD_2Wire.INC   in1+2 einzufügen

Das probiere ich gleich aus, bin gespannt!
Wenn's klappt, warst Du es, der mir auf das richtige Pferd geholfen hat!

na dann - schönen Urlaub! Hier im Schwabenland herrscht Sauwetter!
mfG Ottmar
Titel: Aw: Relocatable Code hier: Verwndung gleicher Label in verschiedenen ASM_Files
Beitrag von: pic18 in 02.08.2025, 18:55:53 CEST
das müsste auch mit "extern" gehen. In der einen Datei unter global definieren, in der anderen mit extern definieren. Ich habe irgendwo auf der Festplatte solch selbst geschriebenen Dateien hier greife ich mit C auf Assembler Variablen zu.
Titel: Aw: Relocatable Code hier: Verwndung gleicher Label in verschiedenen ASM_Files
Beitrag von: pic18 in 02.08.2025, 19:44:37 CEST
Ich hatte hier schon einmal eine Interrupt Routine hochgeladen, da hatte ich Variablen mit extern und global definiert.
https://www.pic-microcontroller.de/dlattach/?attach=2874
Titel: Aw: Relocatable Code hier: Verwndung gleicher Label in verschiedenen ASM_Files
Beitrag von: Ottmar in 02.08.2025, 20:21:14 CEST
Danke für die Rückmeldungen!
Danke PIC18 für den Hinweis auf Deine Datei-Vorlage!

Damit meine ich ist aber der Problempunkt nicht getroffen. Wie in meinem 2.Post mitgeteilt, funktioniert ja bereits in beiden ASM-Files die Verwendung von gemeinsam genutzten Variablen, und Subroutinen perfekt, da diese entsprechend mit GLOBAL und EXTERN deklariert sind.  Das klappt alles!

Es ging nir nur um LABEL, sowie mitgeteilt z.B. Deklaration in MAain.ASM 
LCD_PORT    EQU    PORTA. 
LCD_CLK       EQU   RA0

Beim Aufruf in LCD_Lib.ASM -> 
bsf   LCD_LAT, LCD_CLK 
etc erzeugt dies eine Fehlermeldung, daß gleiche Labels nicht erneut definiert werden dürfen. Mal sehen, bin gerade dabei die Dateien umzubauen und die Labels  als include-file in beide ASM-Files einzufügen.

Danke einstweilen!

Titel: Aw: Relocatable Code hier: Verwndung gleicher Label in verschiedenen ASM_Files
Beitrag von: Ottmar in 04.08.2025, 12:20:36 CEST
Stand der Dinge:
Nachdem wie von Cobra angeregt, ich den relocatable Code  zuächst mal für den 16F628 ERFOLGREICH umgesetzt habe, wurde ich mit ERFOLG belohnt.

1. File 'Main.ASM" wurden sämliche Deklarationen von Labels  (#define, equ) DIREKT nach dem CONFIG-WORD angeordnet
2. im File "LCD_Lib.ASM" wurde sämtliche Deklaration von Labels DIREKKTl nach "  #INCLUDE    <p16F628A.inc>  angeordnet.

Nachdem der Code mittels Pickit3 auf den PIC übertragen war, lief alles reibungslos!
Danke an alle, besonders an Cobra!
Ottmar