PIC och relocatable code
Jag har för mig att du talade om att göra LCD rutinerna till en generell rutin.
1. Antingen gör du bara #INCLUDE på LCD-filen i dina projekt.
2. Eller så lägger du till LCD-filen till "Source code files" i ditt
projekt fönster. Då får du läsa på lite mer kring hanteringen av
symboler mellan olika ASM filer. Främst EXTERN och GLOBAL....
Fördelen med 1 är lite "enklare" kod.
Fördelen med 2 är att MPASM inte kommer att assemblera om LCD-filen
varje gång => något snabbare att bygga om projektet...
1. Antingen gör du bara #INCLUDE på LCD-filen i dina projekt.
2. Eller så lägger du till LCD-filen till "Source code files" i ditt
projekt fönster. Då får du läsa på lite mer kring hanteringen av
symboler mellan olika ASM filer. Främst EXTERN och GLOBAL....
Fördelen med 1 är lite "enklare" kod.
Fördelen med 2 är att MPASM inte kommer att assemblera om LCD-filen
varje gång => något snabbare att bygga om projektet...
Jag kommer att använda alt 1, nu när jag äntligen förstått den ursprungliga frågan...
Har i stort färdigställt rutiner för att hantera 1-wire prylar, och dessa blir ju också smutt att ha som generella rutiner.
Vad jag har förstått av manulerna till mplab så kan man ju också spara objekt kod i lib filer, det kan ju kanske också vara ett sätt när antalet rutiner man har ökar.
Men just nu verkar det enklare att bara inkludera respektive asm fil.
Har i stort färdigställt rutiner för att hantera 1-wire prylar, och dessa blir ju också smutt att ha som generella rutiner.
Vad jag har förstått av manulerna till mplab så kan man ju också spara objekt kod i lib filer, det kan ju kanske också vara ett sätt när antalet rutiner man har ökar.
Men just nu verkar det enklare att bara inkludera respektive asm fil.
> Vad jag har förstått av manulerna till mplab så kan man ju också spara objekt kod i lib filer,
Jo, men det är inte speciellt mycket använt, p.g.a ett stort problem.
Som du kanske har sett/märkt så finns det en hel del saker som
MPASM kan göra åt en som olika beräkningar eller IFDEF o.s.v.
Allt detta missar man om man försöker köra med objekt libbar (LIB filer).
Därför har de flesta sina generella rutiner i form av ASM filer, det går att
skriva dom betydligt flexiblare på det sättet. T.ex att ha kod som automatiskt
anpassar sig till både PIC16 och PIC18 serien, eller till olika portar/pinnar
när det gäller LCD rutiner. De portar/pinnar man vill använda sätts upp
i main-koden (via ett par symboler), och LCD koden justeras automatiskt.
I en objekt LIB blir allt det hårdkodat...
> Men just nu verkar det enklare att bara inkludera respektive asm fil.
Japp, med #INCLUDE så blir det (utifrån MPASM's sida sett) precis samma sak
som om man från börjad hade *all* ASM kod i en enda stor fil.
Nackdelen är att *alla* ASM kod måste assembleras om vid varje "build",
men det är sannolikt inget problem på en modern PC i alla fall...
Jo, men det är inte speciellt mycket använt, p.g.a ett stort problem.
Som du kanske har sett/märkt så finns det en hel del saker som
MPASM kan göra åt en som olika beräkningar eller IFDEF o.s.v.
Allt detta missar man om man försöker köra med objekt libbar (LIB filer).
Därför har de flesta sina generella rutiner i form av ASM filer, det går att
skriva dom betydligt flexiblare på det sättet. T.ex att ha kod som automatiskt
anpassar sig till både PIC16 och PIC18 serien, eller till olika portar/pinnar
när det gäller LCD rutiner. De portar/pinnar man vill använda sätts upp
i main-koden (via ett par symboler), och LCD koden justeras automatiskt.
I en objekt LIB blir allt det hårdkodat...
> Men just nu verkar det enklare att bara inkludera respektive asm fil.
Japp, med #INCLUDE så blir det (utifrån MPASM's sida sett) precis samma sak
som om man från börjad hade *all* ASM kod i en enda stor fil.
Nackdelen är att *alla* ASM kod måste assembleras om vid varje "build",
men det är sannolikt inget problem på en modern PC i alla fall...
Har gjort en samling flyttalsrutiner.
Om man då inkluderar asm-filen hade det varit bra om Mp-lab bara tog med dom rutiner som bara används i just det programmet. Lite jobbigt att gå igenom själv, eftersom rutinen man själv anropar kan anropa andra underrutiner i sin tur, o det har man inte riktig stenkoll på.
Om man då inkluderar asm-filen hade det varit bra om Mp-lab bara tog med dom rutiner som bara används i just det programmet. Lite jobbigt att gå igenom själv, eftersom rutinen man själv anropar kan anropa andra underrutiner i sin tur, o det har man inte riktig stenkoll på.
När jag gör såna samlingar brukar jag att använda '#ifdef'-satser ihop med #define.
Exempel (i C-liknande men du fattar nog):
På detta vis kan man göra en automatisk sortering som bara lägger in de rutiner som behövs, oavsett vad man vill och hur stor samling man gör.
Exempel (i C-liknande men du fattar nog):
Kod: Markera allt
I huvud-program filen:
#define USES_RTC_WEEKCALC
#include "RTC.h"
och i "RTC.h" kan man då lägga in olika saker:
#ifdef USES_RTC_WEEKCALC
#define Uses_Routine_01
#define Uses_Routine_02
#endif
#ifdef Uses_Routine_01
Routine_Calculate_this
bla bla
return
#endif
#ifdef Uses_Routine_02
Routine_Calculate_something_else
bla bla
return
#endif