Automatisk export av använda minnesceller till exel?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Automatisk export av använda minnesceller till exel?

Inlägg av bearing »

Programmen blir väl mer lättlästa om varje variabel får ett eget logiskt namn i varje rutin, även om de använder samma minnesceller.

Knudsens C-kompilator håller reda på vilka rutiner som anropas av vilka och kan därför själv avgöra vilka celler som kan återanvändas för lokala variabler i varje rutin.
Nerre
Inlägg: 27257
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Automatisk export av använda minnesceller till exel?

Inlägg av Nerre »

C använder väl nästan alltid stacken eller register för lokala variabler? Eftersom det måste fungera även vid rekursion.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Automatisk export av använda minnesceller till exel?

Inlägg av Icecap »

Jupp, detta kräver alltså att man antingen ser till att stacken är stor nog eller ser till att deklarera globala arbetsvariabler eller en kombination därav.
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Automatisk export av använda minnesceller till exel?

Inlägg av bearing »

Fast PIC16 har ingen variabelstack och har bara ett arbetsregister. Hårdvarustacken för funktionsadresser rymmer bara 8 adresser. Det går inte att göra rekursiva funktioner.
nanopile
Inlägg: 312
Blev medlem: 9 april 2006, 17:06:50
Ort: Stockholm

Re: Automatisk export av använda minnesceller till exel?

Inlägg av nanopile »

Nu har jag provat och läst hyffsat mycket och har koll på var saker hamnar beroende på:
UDATA
UDATA_ACS
UDATA_OVR
UDATA_SHR
IDATA
Men finns det någon möjlighet att deklarera en variabel i stil med:
Work1 RES 1
Work2 RES 1
och få dem i accessdelen av första banken (0x00 till 0x7F) genom att bara deklarera dem en gång någonstans i någon .asm-fil så man kan använda tex Work1 överallt i hela projektet?
En global variabel helt enkelt är vad jag vill skapa.

Märkte också att jag inte får någon varning om att en variabel deklarerats med identiskt namn på mer än ett ställe och får samma cell knuten till sig.
Användarvisningsbild
JockeE
Inlägg: 330
Blev medlem: 4 augusti 2004, 08:46:50

Re: Automatisk export av använda minnesceller till exel?

Inlägg av JockeE »

Inte helt oväntat använder man direktivet "global" för att exportera och "extern" för att dra nytta av de labels som man exporterat.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Automatisk export av använda minnesceller till exel?

Inlägg av sodjan »

Först, notera att UDATA_SHR inte är rellevant på PIC18 arkitekturen, den används
för att allokera variabler i "shared memory" (eller "unbanked memory) på PIC16.
UDATA_ACS gör motsvarande på PIC18 (d.v.s allokerar ur "access bank").

Du vill alltså ha tillgång till Work1 och Work2 oavsett vilken modul du "är i" ?
Är de "riktiga" globala variabler (i så fall är det kanske inte så bra namn) eller
bara lokala variabler som råkar ha samma namn (och dela lagring) ? Alltså
en sorts kombination av UDATA_ACS och UDATA_OVR ?

Är de riktiga globala variabler så borde det vara GLOBAL (där den allokeras)
och EXTERN (i alla andra ASM filer som vill används dom) som ska användas.
För att underlätta underhållet så kan en liten INC fil som innehåller alla EXTERN
direktiv användas, då blir det bara ett ställa ett ändra om du också vill ha
Work3 eller liknande. Gör bara #include på den i alla övriga filer.

Är det "bara" lokala variabler som ska dela minne så borde UDATA_OVR fungera.
Även detta kan läggas i en INC fil så att alla dina moduler automatiskt får tillgång
till samma Work* variabler. Se bara upp med interrupt, CALL till andra filer o.s.v,
det är lätt att villa bort sig och börja "skriva sönder" värden för en annan rutin...

> Märkte också att jag inte får någon varning om att en variabel deklarerats med identiskt
> namn på mer än ett ställe och får samma cell knuten till sig.

Är det två ställen i samma ASM fil eller i två olika ASM filer ?
Har du ett exempel ?
Skriv svar