MPLAB fråga angående inkl/exkl-uderandet av kod mha IFDEF

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

MPLAB fråga angående inkl/exkl-uderandet av kod mha IFDEF

Inlägg av v-g »

Det jag önskar är att man kan inkludera eller exkludera önskad subrutin från en SEPARAT fil.

Hur gör man för att detta skall fungera korrekt?

Har testat alla(känns det som) kombinationer med IFDEF, GLOBAL, EXTERN, INCLUDE, DEFINE osv. Jag får det att fungera med EXTERN subrutinnamn men då kan man inte exkludera koden vad jag förstått.

Antigen stupar det på fel vid byggningen eller så blir det helt enkelt ingen kod när det väl byggts :shock:

Har självklart kollat igenom manualen till MPLAB & MPASM och testat de kodexempel som är däri. Dock finns inget som gör just det jag önskar :humm:

Hittar inget på nätet heller då jag inte kommer på bra söktermer för vad jag önskar göra.

Tacksam för hjälp med detta då det skulle underlätta mitt kodande enorm iom att man slipper ha all kod i samma fil.

Edit:Förtydligande av texten.
Senast redigerad av v-g 28 april 2007, 16:39:30, redigerad totalt 1 gång.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Kod: Markera allt

 ifdef xxxxx
 include "Filhelvete.asm"
 else
 include "EnAnnanFlihelvete.asm"
 endif
Eller är det så att du vill göra på ett sätt om det finns en label med ett visst namn och ett annat sätt om det INTE finns?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Det jag önskar är att man kan inkludera eller exkludera önskad subrutin från ett program och lägga dessa i SEPARAT fil.

Menar du :

>Det jag önskar är att man kan inkludera eller exkludera önskad subrutin från en SEPARAT fil.

Om det inte var det du menade, kan du förtydliga ?

Om du har en separat ASM fil som *inte* ska vara med i ett visst projekt
(i sin helhet) så är det naturligtsvis bara att låta bli att ta med den bland
"Source Files" i projektet. Det är det enkla fallet... :-)

Om du har en ASM där enbart *en viss de*l inte ska vara med, så får
du använda IFDEF...ENDIF för att exkludera den. Sen får du sannolikt
ha en projektglobal INC fil där du m.h.a a symboler bestämmer
vilka koddelar som ska med eller inte. Denna INC fil (med #DEFINE's)
måste INCLUDE'eras i alla ASM filer i projektet.

Du borde även kunna göra #DEFINE på en symbol i din main ASM fil och
sedan göra GLOBAL på symbolen (i samma fil som #DEFINE).
Sedan göra EXTERN på samma symbol i din separata ASM fil så att du
sedan kan använda den med IFDEF...ENDIF

Exakt hur det ska se ut i de olika filerna är lite svårt att "ta ur luften"
utan tillgång till MPASM/MPLAB (just nu...)
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

sodjan:Jag menar det senare alternativet. Ändrar mitt första inlägg.

För att göra det enkelt säg att jag har en delayrutin i mitt program. Den ändrar jag aldrig på så för att slippa scrolla förbi den varenda gång eller riskera att förändra koden så läggs den i en annan fil. Detta då gärna utan att sluta fungera :)

Det jag vill uppnå är att jag kan specificera vad som skall med i "main.asm" ur "subroutines.asm" hur det går till kvittar (include eller define osv). Om jag sen "råkar" CALLa på en subrutin och den inte finns "ikryssad" så får jag skylla mig själv.

Enklaste är ju såklart att varje gång exkludera(mha markera delete) det man inte vill ha med men som jag upplever det så tänker åtminstone jag inte hela vägen ut och det kan bli förändringar på vägen då vore det trevligt med lite enkla bra basfunktioner i en asm/include/whatever fil.

Att ha en fil för varje "smart" funktion känns heller inte som ett bra alternativ då det lätt blir stökigt.

Det bästa vore om jag fann ett exempel på hur det _skall_ se ut. Jag har försökt med alla möjliga variationer på ovanstående (som jag kan komma på) under hela förmiddagen. Även sökningar på internet går jag bet på. Det hela är (för mig) inte självklart beskrivet i hjälpen och jag hittar heller inga bra exempel eller ens exempel alls. Alla exempel är skrivna i en enda fil(av förståeliga skäl såklart).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, här är något som "fungerar". Jag kan inte garantera att
det är det allra enklaste, men det fungerar...

Först i main ;

Kod: Markera allt

 #include <p16f628A.inc>

    extern sub1
    extern sub2

#include test.inc

main_vars udata
var1   res 1
var12  res 1
var13  res 1

main_code code

main_loop

    call sub1
    call sub2
    goto main_loop

    end  
sub1 och sub2 ligger i en separat fil:

Kod: Markera allt

 #include <p16f628A.inc>

#include test.inc

;***************************************
    ifdef inc_sub1
    global sub1
sub1_vars   udata
sub11   res 1
sub12   res 1

sub1_code   code
sub1
    movlw h'FF'
    return

    endif

;***************************************
    ifdef inc_sub2
    global sub2
sub2_vars   udata
sub21   res 1
sub22   res 1

sub2_code   code
sub2
    movlw h'FF'
    return

    endif

;***************************************

    end
TEST.INC innehåller ett par rader :

Kod: Markera allt

; Project INC file.
;
    #define inc_sub1
    #define inc_sub2
Kod/subrutiner kan läggas till eller plockas
bort genom att justera i TEST.INC.

Det verkar inte gå att få DEFINE's att "synas" mellan olika filer, utan de
får INCUDE'eras direkt i alla ingående moduler.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Tack så mycket för svar jag skall testa så snart tiden(=barnen+chefen) tillåter. Kanske något för wikin? Det är ju inte helt trivialt att testa sig till detta.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Hm, eller för mina egna PIC-info/kodexempel sidor som ligger på att-göra listan...
Skriv svar