Global variabel ASM, HC08
-
- Inlägg: 50
- Blev medlem: 22 februari 2007, 01:15:26
- Ort: Göteborg/Örebro
Global variabel ASM, HC08
När jag programmerar brukar jag dela upp subrutiner i olika .asm filer för att hålla lite ordning i projektet. Men jag förstår inte hur jag ska skriva för att en variabel som jag deklarerat i en fil ska kunna användas i en annan fil.
Tex. om jag deklarerar en temp variabel i main.asm och vill använda data från temp i en subrutin som ligger i SPI.asm.
jag deklarerar en variabel enligt föjande
temp ds.b 1
Tex. om jag deklarerar en temp variabel i main.asm och vill använda data från temp i en subrutin som ligger i SPI.asm.
jag deklarerar en variabel enligt föjande
temp ds.b 1
Re: Global variabel ASM, HC08
Jag vet inte hur man gör för en HC08 (eller om det ens är möjligt)
men leta efter GLOBAL, EXTERN eller liknande...
men leta efter GLOBAL, EXTERN eller liknande...
Re: Global variabel ASM, HC08
Finns det i huvudtaget globala och lokala variabler när man skriver i assambler?
-
- Inlägg: 50
- Blev medlem: 22 februari 2007, 01:15:26
- Ort: Göteborg/Örebro
Re: Global variabel ASM, HC08
Saken är ju att om man har subrutinerna i samma fil som variabeln är deklarerad så går det alldeles utmärkt att skriva och läsa dessa från subrutinen. Men när de ligger i olika filer blir det problem. Så det känns som om det är nån sorts deklarering/länkning mellan filerna som fattas.
Re: Global variabel ASM, HC08
Jag har för mig att man bara skriver include SPI.asm som kompilatordirektiv i CodeWarrior. Sen länkas allt ihop i till en lång rad utan några nivåer (global osv). Ska själv pilla lite med HC08 nästa vecka så då kanske jag kan komma med nårgra svar.
Re: Global variabel ASM, HC08
> Finns det i huvudtaget globala och lokala variabler när man skriver i assambler?
Om du frågar om HC08 specifikt, ingen aning.
Om du frågar om assembler generellt, självklart, t.ex i PIC assembler.
Alla variabler i separat assemblerade objektfiler är per default "local".
För att göra en symbol synlig för andra moduler används "global" och
de andra modulerna använder "extern"...
> Jag har för mig att man bara skriver include SPI.asm
Men "include" är ju en helt annat sak. Det är ingen skillnad mot att
ha allt i en enda fil från första början, men det kan väl inte vara det
som frågan gällde ? Det är lite för uppenbart...
Om du frågar om HC08 specifikt, ingen aning.
Om du frågar om assembler generellt, självklart, t.ex i PIC assembler.
Alla variabler i separat assemblerade objektfiler är per default "local".
För att göra en symbol synlig för andra moduler används "global" och
de andra modulerna använder "extern"...
> Jag har för mig att man bara skriver include SPI.asm
Men "include" är ju en helt annat sak. Det är ingen skillnad mot att
ha allt i en enda fil från första början, men det kan väl inte vara det
som frågan gällde ? Det är lite för uppenbart...
Re: Global variabel ASM, HC08
Normalt brukar man använda ett diektiv för att exportera symboler, t.ex 'export' eller 'global'. Sedan har man ett direktiv för att importera symboler, t.ex 'extern' eller 'import'.
Men exakt vad dom heter står i manualen till assemblern. Du har inte heller angett vilken miljö du kör så det är lite svårt att bara gissa...
Men exakt vad dom heter står i manualen till assemblern. Du har inte heller angett vilken miljö du kör så det är lite svårt att bara gissa...
Re: Global variabel ASM, HC08
XDEF respektive XREF kanske, om du använder CW. Nedan urklipp från maualen:
XDEF - External Symbol Definition
Syntax:
XDEF [.<size>] <label>[,<label>]...
where <size> = B(direct), W (default), L or S or T
Synonym:
GLOBAL, PUBLIC
Description:
This directive specifies labels defined in the current module that are to be passed to the linker as labels that can be referenced by other modules linked to the current module.
The number of symbols enumerated in an XDEF directive is only limited by the memory available at assembly time.
The S and T size designators are only available for RS08, and result in marking the symbol as short or tiny.
Example:
See Listing 8.60 for the case where the XDEF assembler directive can specify symbols that can be used by other modules.
Listing 8.60 Using XDEF to create a variable to be used in another file
XDEF Count, main
;; variable Count can be referenced in other modules,
;; same for label main. Note that Linker & Assembler
;; are case-sensitive, i.e., Count != count.
Count: DS.W 2
code: SECTION
main: DC.B 1
********************************************************************************************
XREF - External Symbol Reference
Syntax:
XREF [.<size>] <symbol>[,<symbol>]...
where <size> = B(direct), W (default), or L or S or T.
Synonym:
EXTERNAL
Description:
This directive specifies symbols referenced in the current module but defined in another module. The list of symbols and corresponding 32-bit values is passed to the linker.
The number of symbols enumerated in an XREF directive is only limited by the memory available at assembly time.
The S and T size designators are only available for RS08, and result in marking the symbol as short or tiny.
Example:
XREF OtherGlobal ; Reference "OtherGlobal" defined in
; another module. (See the XDEF
; directive example.)
XDEF - External Symbol Definition
Syntax:
XDEF [.<size>] <label>[,<label>]...
where <size> = B(direct), W (default), L or S or T
Synonym:
GLOBAL, PUBLIC
Description:
This directive specifies labels defined in the current module that are to be passed to the linker as labels that can be referenced by other modules linked to the current module.
The number of symbols enumerated in an XDEF directive is only limited by the memory available at assembly time.
The S and T size designators are only available for RS08, and result in marking the symbol as short or tiny.
Example:
See Listing 8.60 for the case where the XDEF assembler directive can specify symbols that can be used by other modules.
Listing 8.60 Using XDEF to create a variable to be used in another file
XDEF Count, main
;; variable Count can be referenced in other modules,
;; same for label main. Note that Linker & Assembler
;; are case-sensitive, i.e., Count != count.
Count: DS.W 2
code: SECTION
main: DC.B 1
********************************************************************************************
XREF - External Symbol Reference
Syntax:
XREF [.<size>] <symbol>[,<symbol>]...
where <size> = B(direct), W (default), or L or S or T.
Synonym:
EXTERNAL
Description:
This directive specifies symbols referenced in the current module but defined in another module. The list of symbols and corresponding 32-bit values is passed to the linker.
The number of symbols enumerated in an XREF directive is only limited by the memory available at assembly time.
The S and T size designators are only available for RS08, and result in marking the symbol as short or tiny.
Example:
XREF OtherGlobal ; Reference "OtherGlobal" defined in
; another module. (See the XDEF
; directive example.)
Re: Global variabel ASM, HC08
Ja då så.
Synonymerna GLOBAL och EXTERNAL låter ju lite tydligare lite
mer "standard" än XDEF och XREF...
Synonymerna GLOBAL och EXTERNAL låter ju lite tydligare lite
mer "standard" än XDEF och XREF...
Re: Global variabel ASM, HC08
XDEF och XREF har jag för mig användes på en lite äldre IAR-miljö jag körde på tidigare. Men jag håller med om att 'external' och 'global' känns bättre och förmodligen är vanligare.
Edit: Jag har för mig att det t.o.m är 'extern' utan sista bokstäverna, antagligen för att korta ordet och passa in det i 8-teckens tab-fält.
Edit: Jag har för mig att det t.o.m är 'extern' utan sista bokstäverna, antagligen för att korta ordet och passa in det i 8-teckens tab-fält.