label asm
Jag brukar att just ge dom namn som anger funktion.
Ibland har jag en rutin med en del "interna" labels i som kanske inte har specifika uppgifter men bara är en del av rutinens funktion, då brukar jag förkorta ganska mycket:
Det viktigaste för mig är att ingångs-labeln har rätt och tydligt namn.
Variabler ska ha vettiga namn, har jag en "slask"variabel kallar jag den oftast Misc och har jag fler ger jag ett nummer efter, har jag fler men olika storleker anger jag storleken efter:
Misc_W ds 2 ; Unsigned int (Word), 16 bit
Misc_B ds 1 ; Unsigned char (Byte), 8 bit
Ibland har jag en rutin med en del "interna" labels i som kanske inte har specifika uppgifter men bara är en del av rutinens funktion, då brukar jag förkorta ganska mycket:
Kod: Markera allt
Send2LCD
...
SLCD_L01 (= Send2LCD_Label_01)
...
Send2LCD_Exit
... (Hejdå)
Variabler ska ha vettiga namn, har jag en "slask"variabel kallar jag den oftast Misc och har jag fler ger jag ett nummer efter, har jag fler men olika storleker anger jag storleken efter:
Misc_W ds 2 ; Unsigned int (Word), 16 bit
Misc_B ds 1 ; Unsigned char (Byte), 8 bit
> och så det inte kolliderar med andra label i nån annan subrutin.
Notera att alla labels (och andra symboler) är lokala till den aktuella modulen (d.v.s ASM filen).
Så genom att dela upp projektet i flera moduler/filer, så kan man ha labels eller variabler som heter t.ex
"count1" eller "loop" eller liknande i hur många subrutiner som man vill.
Undantaget är de labels/symboler/variabler som man har gjort GLOBAL på.
Men de bör ju ha unika namn i alla fall...
> har jag en "slask"variabel kallar jag den oftast Misc och har jag fler ger jag ett nummer efter...
Om de ligger i olika moduler/filer så behöver du alltså inte göra det.
Notera att alla labels (och andra symboler) är lokala till den aktuella modulen (d.v.s ASM filen).
Så genom att dela upp projektet i flera moduler/filer, så kan man ha labels eller variabler som heter t.ex
"count1" eller "loop" eller liknande i hur många subrutiner som man vill.
Undantaget är de labels/symboler/variabler som man har gjort GLOBAL på.
Men de bör ju ha unika namn i alla fall...
> har jag en "slask"variabel kallar jag den oftast Misc och har jag fler ger jag ett nummer efter...
Om de ligger i olika moduler/filer så behöver du alltså inte göra det.
> Går det att definiera olika "namespaces" i MPASM?
För att svara mer direkt på just den frågan, nej, det kan man inte.
Varje ASM fil är "by default" sitt eget namespace. Det är inget som man "definierar"...
Och igen, alla *inkluderade* filer tillhör samma namespace som
filen där #include kommandot finns. Det är absolut ingen skillnad
på en #include och att ha koden i filen från början.
Att ha sina generella rutiner i separat assemblerade moduler är
en väldig fördel ! Vanliga labels som "loop" eller "delay" som kan
förekomma på flera platser kommer inte att krocka... Även namn på
vanliga variabler som "temp" o.s.v kommer att separeras. Om man
inte avsiktligt väljer att "overlaya" dom på samma adresser med
UDATA_OVR, men det väljar man ju själv.
Det är bara att lägga till alla ASM filerna i projektet. MPASM/MPLINK
kommer sedan automatiskt att bygga ihop det hela på rätt sätt.
Slutligen, självklart fungerar detta bara när man kör relocatable-mode,
men det gör väl alla så det ser jag inte som ett "problem"...
För att svara mer direkt på just den frågan, nej, det kan man inte.
Varje ASM fil är "by default" sitt eget namespace. Det är inget som man "definierar"...
Och igen, alla *inkluderade* filer tillhör samma namespace som
filen där #include kommandot finns. Det är absolut ingen skillnad
på en #include och att ha koden i filen från början.
Att ha sina generella rutiner i separat assemblerade moduler är
en väldig fördel ! Vanliga labels som "loop" eller "delay" som kan
förekomma på flera platser kommer inte att krocka... Även namn på
vanliga variabler som "temp" o.s.v kommer att separeras. Om man
inte avsiktligt väljer att "overlaya" dom på samma adresser med
UDATA_OVR, men det väljar man ju själv.
Det är bara att lägga till alla ASM filerna i projektet. MPASM/MPLINK
kommer sedan automatiskt att bygga ihop det hela på rätt sätt.
Slutligen, självklart fungerar detta bara när man kör relocatable-mode,
men det gör väl alla så det ser jag inte som ett "problem"...
När du gör CALL USART_SEND så anropas USART_SEND från den
modul (ASM fil) där den labeln finns och som har ett GLOBAL USART_SEND
direktiv.
Om du har en generell fil för USART och en annan för I2C, så finns det
ju ingen anledning att kalla rutinerna enbart för "SEND" i båda.
På vilket sätt underlättar det ?
modul (ASM fil) där den labeln finns och som har ett GLOBAL USART_SEND
direktiv.
Om du har en generell fil för USART och en annan för I2C, så finns det
ju ingen anledning att kalla rutinerna enbart för "SEND" i båda.
På vilket sätt underlättar det ?