Kan inte skriva till en global variabel i ISR. C. ATMega48.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
*L.R*
Inlägg: 61
Blev medlem: 30 mars 2008, 13:39:15
Ort: Norra sthlm

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av *L.R* »

Vad händer om man sätter en pekare till en fast minnesadress?
Användarvisningsbild
AndLi
Inlägg: 18095
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av AndLi »

Den pekar på en fast minnesadress! :)
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av sodjan »

Vad *är* en "fast minnesadress" ?
Är inte alla adresser "fasta" ??
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av jesse »

EN variabel tilldelas ju en adress nån gång under kompileringen, sedan är den ju "fast". Men varje gång man ändrar i koden och kompilerar om så kan ju den adressen ändras. Så den är ju inte särskilt "fast" egentligen. Som jag ser det så är väl då en "fast" adress ett numeriskt värde som inte kan ändras av kompilatorn och som pekar på en minnesadress. Man kan ju ange ett sådant värde manuellt, men risken är väl stor att kompilatorn använder samma minnesutrymme till andra variabler ... Det kanske finns sätt att reservera minne till "eget bruk" - där kompilatorn inte får gå in och pilla?
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av sodjan »

> Som jag ser det så är väl då en "fast" adress ett numeriskt värde som inte kan ändras av kompilatorn...

Eller en "fast" adress som inte kan ändras under runtime (en "konstant" med andra ord).

Tja, vem vet... :-)

Dessutom finns det en otydligen i frågan om det hela avser adressen där
själva pakeren befinner sig eller adressen som pekaren "pekar" på.
Ett exempel på hur man gör det som frågan gäller vore bra.
Användarvisningsbild
AndLi
Inlägg: 18095
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av AndLi »

Nu är det väll länkaren och inte kompilatorn som styr var saker hamnar...
Bra länkare/kompilatorer kan man styra totalt, så även var variabler och funktioner hamnar
*L.R*
Inlägg: 61
Blev medlem: 30 mars 2008, 13:39:15
Ort: Norra sthlm

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av *L.R* »

Sodjan ska som vanlig märka ord.

Så här har jag lärt mig att gör för att komma åt portar och variabler i avbrott när man programmerar HC12.
Tänkte om samma sam kunde fungera i detta fall. Att man då definierar på vilken minnesplats det ska hamna på.

#define TOC5 *(unsigned short volatile *)(0x101E)
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av sodjan »

> Sodjan ska som vanlig märka ord.

Bjud inte in till det då. Slarviga och haffsiga frågor får
sällan det svar man kanske önskade.

I ditt exempel, är TOC5 en variabel i applikationen (och i RAM) eller
är det en del av processorns arkitektur (som t.ex PORTx på AVR/PIC) ?
Användarvisningsbild
AndLi
Inlägg: 18095
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Kan inte skriva till en global variabel i ISR. C. ATMega

Inlägg av AndLi »

LR visst skulle du kunna göra så och slippa volatile, men det kräver ju att du berättar för länkaren att den inte får använda den minnesadressen.
Risken finns ju att kompilatorn tittar på koden och tycker att "nä den minnesadressen har inte ändrats, då använder jag min kopia av värdet istället"

Så jag skulle vilja påstå att volatile är mer rätt... Men C och div special länkar styrningar öppnar upp för alla möjliga konstiga lösningar, mycket lättare för andra att förstå koden och väldigt mycket enklare att porta mellan olika kompilatorer om man håller sig till standard C och undviker att göra en massa specialre med länkaren som säkerligen görs olika för olika miljöer. Som hobbyutvecklare är det ju sällan ett problem, där väljer man PIC/ AVR och så håller man sig till det som värsta fotboll supporter. Men i den "riktiga" värden kan ju familjer/tillverkare bytas villt för att tjäna de där extra centen per enhet... (eller bara för att ha en second source)
Skriv svar