Sida 1 av 1

label asm

Postat: 14 december 2007, 19:53:21
av persika
Finns det nåt bra sätt att namnge "labels" när man programmerar assembler ?
(tänker i första hand för PIC )

Postat: 14 december 2007, 20:10:43
av bearing
Menar du att du vill ha tips på system för att ge dem unika och logiska namn, alltså en lämplig nomenclatur?

Postat: 14 december 2007, 20:10:59
av sodjan
Ja, så att de säger något vettigt.
Eller hur menar du ?

Postat: 14 december 2007, 20:23:24
av persika
Verkar som ni förstod frågan

Nått bra system för att namnge, så det är nåt vettigt namn som man förstår "i morgon" och så det inte kolliderar med andra label i nån annan subrutin. Hur brukar "ni" göra ?

Postat: 14 december 2007, 21:36:13
av Icecap
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:

Kod: Markera allt

Send2LCD
  ...
SLCD_L01 (= Send2LCD_Label_01)
 ...
Send2LCD_Exit
  ... (Hejdå)
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

Postat: 14 december 2007, 22:04:48
av sodjan
> 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.

Postat: 29 augusti 2008, 13:28:26
av sodjan
Vad kom du fram till ??

Postat: 29 augusti 2008, 13:54:33
av BJ
sodjan:
Hur menar du då? Jag brukar ta med flera filer med include. Då blir dom en del av den första filen.
Deras namn kan man ju hoppa till (anropa), så dom hittas ju i hela filen.

Postat: 29 augusti 2008, 13:59:25
av bearing
Går det att definiera olika "namespaces" i MPASM?

(Jag skrev nyss samma fråga i en annan tråd, skrev i fel tråd)

Postat: 29 augusti 2008, 14:40:38
av sodjan
Varje "modul" (d.v.s separat assemblerad ASM fil) har sitt eget "namespace".
Förutom de symboler som man har gjort GLOBAL med avsikt, så klart.

#Include har inget med detta att göra. De filer som inkluderas med
#include tillhör ett och samma namespace.

Postat: 29 augusti 2008, 14:53:23
av BJ
Okej. Tack.

Postat: 29 augusti 2008, 15:38:44
av sodjan
> 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"...

Postat: 29 augusti 2008, 18:25:56
av bearing
Aha, då förstår jag. Det jag hoppades var att det skulle gå att ge varje namespace ett namn, och senare komma åt labels och variabler ur olika namespace genom att skriva typ "call usart.send" eller "call i2c.send". Det skulle underlätta att ge funktioner namn. Vore även bra för funktionsbibliotek.

Postat: 30 augusti 2008, 00:32:29
av sodjan
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 ?