S-Ram Atmel c kod problem

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

S-Ram Atmel c kod problem

Inlägg av Samot »

Hej.

Törs påstå att jag kan assambler till avr ganska så bra. Men nu har jag bestämt mig till att gå över till C. Har sökt på nätet utan framgång vilket jag tycker är konstigt. Vad jag vill hitta är:

Skriv såhär för att läsa vad som finns på 0x60 i sramet och skriv såhär för att läsa vad som finns på 0x60.
Skamligt av google och inte ha det som första svar när man söker ;)

På svenska: Ange adress, läs till valfri variabel. Eller, ange address skriv till valfri variabel.

På C : ?????????
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Utan att veta närmare vad du vill åstakomma, men varför
vill du läsa på en specifik adress ? Normalt så hanterar man ju allt
via just variabler, och då via *namnen*, inte deras adresser (OK,
kanske indirekt via pekare, men det är i alla fall symbolerna man
använder)...
Mupp
Inlägg: 134
Blev medlem: 25 februari 2006, 10:30:38
Ort: Linköping

Inlägg av Mupp »

Nja... Nu är jag nog inte helt med på vad du menar, men säg såhär:

Om det du vill komma åt är ett namngivet register så kan du använda registernamnet, tex:

Kod: Markera allt

TIMSK = 0x01;

if(TIMSK == 0x01)...
eller nåt annat lämpligt. Iaf med rätt include och med GCC, har inte testat andra C-kompilatorer men jag kan inte tänka mig annat än att det funkar.

Vill du istället ha en variabel, vilken som helst, men på en av dig angiven adress så är väl första tipset att låta bli. Det är kompilatorn som ska sköta det, det är sånt den gillar. Om du vill komma åt externa register på en avr med minnesbuss utåt så kan det ju vara enda chansen att göra så, men isf råder jag dig att titta hur det ser ut i IO-definitionerna i lämplig .h-fil, och skapa vettiga registernamn på samma sätt i en egen .h-fil, det blir under alla förhållanden snyggast.


Edit, så går det när man knappar sakta, det var alltså första inlägget jag syftade på i första meningen.
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Inlägg av Samot »

Ok, tror just en pollet trillade ner. Kanske är en av fördelarna med c att man kan dekarera variablar på ett annat sätt än i asm.

Jag behöver inte spara på en specifik adress i sramet. Utan jag vill spara data på 10 efter varandra förljande positioner. Men då kanske det helt enkelt går att deklarera en array av ngt slag och sedan peka ut olika positioner i den och helt enkelt skita i var kompilatorn tycker att de ska sparas?
henkebenke
Inlägg: 521
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Vill du läsa en specifik address behöver du en pekare.

Kod: Markera allt

data = *(0x60);

eller

pointer = 0x60;
data = *pointer;
Det borde funka.

Edit: Annars är lämpligt att använda en array. Absolut addressering har man egntligen bara nytta av om man har en extern addressbuss. Eller om man saknar registerdefinitioner.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Japp, i C (och precis som i *snygg* assemblerkod) är de faktiska
adresserna där kompilatorn (eller assemblern) väljer att lägga
"variabler" helt ointressanta...

Om man ändå är nyfiken brukar det finnas en MAP fil där
man kan se de fysiska adresserna...
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

och

Kod: Markera allt

INT8 data = 23;
pointer = &data;
tilldelar adressen för data till en pekare. Vad den än må vara :)
JJ
Inlägg: 366
Blev medlem: 16 maj 2005, 21:33:02

Inlägg av JJ »

*((char*)0x60) = 42;
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Inlägg av Samot »

Löst!

Gjorde en array helt enkelt, f*n C är ju fusk jämfört med assambler.

Tack för hjälpen
JJ
Inlägg: 366
Blev medlem: 16 maj 2005, 21:33:02

Inlägg av JJ »

Gott att du fixade det. C is the shit!

Och du, om elementen du vill ordna i din array egentligen har olika storlek så glöm inte att du har 'struct' också!

Har du boken "The C programming language" av Kernigham och Richie? (Oftast kallad K&R) Det är Veckans boktips!
Skriv svar