PIC och relocatable code

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
jonas2307
Inlägg: 479
Blev medlem: 11 juni 2005, 08:48:33
Ort: Älvsjö

Inlägg av jonas2307 »

Man tackar!

Nu fungerar koden, igen.
Rellokerbar och vacker, nåja....

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

Inlägg av sodjan »

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...
jonas2307
Inlägg: 479
Blev medlem: 11 juni 2005, 08:48:33
Ort: Älvsjö

Inlägg av jonas2307 »

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

Inlägg av sodjan »

> 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...
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1545
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

Kan man få mplab att inte assemblera subrutiner som inte används ?
Dom tar ju bara upp program-minne till ingen nytta.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Inte om det är rutiner som ligger i samma ASM fil i alla fall...

Jag är lite osäker på hur det är med olika ASM filer, kanske om
*inget* anropas från ev viss ASM fil, är osäker där...

Men du får väl låta bli att ta med subrutiner som inte används.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1545
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

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

Inlägg av Icecap »

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):

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
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.
Skriv svar