label asm

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

label asm

Inlägg 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 )
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg 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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ja, så att de säger något vettigt.
Eller hur menar du ?
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg 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 ?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vad kom du fram till ??
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg 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.
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg 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)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Okej. Tack.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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"...
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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 ?
Skriv svar