Sida 1 av 1

C programmering och pekare till uc

Postat: 29 april 2006, 18:59:38
av björn
När är det lämpligt att använda pekare vid C-programmering av uc och när är det inte lämpligt?
Hur hanterar uc'n pekare?

Postat: 29 april 2006, 19:10:57
av Icecap
Tja.... det är väl du som bestämmer om det är lämpligt eller hur?

Om du deklarerar:
const char TestText[] = "This is a test";
och sedan referar till den med:
sprintf(Buffer,"%s!!",TestText);
kommer TestText att faktisk vara en pekare, likaså 'Buffer'.

En pekare är när man referer till ett värde med dess adress i stället för värdet själv, det är väldigt användbart om man t.ex. har en block data som kan bytas ut (t.ex. olika över/under variabler), då kan man peka på blocken när man kaller rutinen, skitsmidigt.

Postat: 29 april 2006, 23:25:21
av sodjan
Dessutom varierar stödet för "indexerad adressering" mycket
mellan olika "uc", så båda frågorna är lite svåra att svara på.

Om man har en viss specifik C-kompilator och en viss processor,
så blir det enklare. Men det räcker inte med bara t.ex "PIC" eftersom
det skiljer sig en del i detta avseende mellan PIC16 och PIC18.
PIC18 har betydligt bättre möjlighet till indexerad adressering.

Postat: 30 april 2006, 09:24:11
av björn
Ok, ja det var i första hand AVR atmega8 och atmega88 jag tänkte på. Och frågan var igentligen mest tänkt som en uindran om pekare tar mindre plats eller om assembler koden blir effektivare.

EDIT: Kompilator är iccavr eller avr-gcc.

Postat: 30 april 2006, 10:31:26
av speakman
"Problemet" med Harvard-arkitekturen är att kompilatorn även måste hålla reda på vilket minne pekaren pekar på, vilket oftast verkar sparas i ytterligare en byte intill pekaren.
Alltså, en 16-bitars pekare tar i praktiken upp 3 byte.
Har man en rutin som anropas ofta eller måste utföras väldigt snabbt, så kan det löna sig att skriva den i (inline) assembler om man vet vilket minne den ska hämta allt ifrån.
Dels går man omkring hela kontrollen av den extra byten, och den "switch"-sats den i sin tur genererar, och dels sparar man lite minne.

Mvh
speakman

Postat: 30 april 2006, 10:33:32
av Icecap
Det blir ingen större skillnad utom i vissa fall, assemblerkodens effektivitet beror definitivt inte på om man använder pekare eller inte men mycket mer på kompilerns optimering.

Effektivitet uppnås med bra programmering, inte med pekare/inte-pekare.

Postat: 30 april 2006, 10:52:05
av björn
OK, då har jag fått lite mer insikt tror jag. Då använder jag endast pekare när jag tycker att det känns bra/enklare.

Postat: 30 april 2006, 13:31:34
av sodjan
Som vanligt är allt en "trade-off".

D.v.s att om C-koden blir "renare" på ett visst sätt, och processorn
har tillgängliga cykler (även om det inte är den allra snabbast lösningen)
så är det bara att köra... :-)