WinAVR, tiny2313 och DS18B20

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Jag antar att du har en hel del annan kod också? För enbart 1-wire-rutinerna kan inte uppta 2kB minne, eller hur?

Eftersom du är rätt ny på C så finns det säkert en hel del som går att skriva effektivare.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

En DS18S20 handlar ju om temperaturer, och är man lite ovan vid
C och microcontrollers är det ganska lätt att lägga värdet
i en float, vilket brukar få koden att svälla en del...

Inge aning om det är det, bara en tanke... :-)
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Jag har ju LCD-grejor också, och därmed ett gäng delaysaker, inte så mycket annat.

Har inte skrivit koden för att konvertera värdet man får till riktig temperatur, så jag har ingen float. Det är bara för att läsa av och LCD-grejorna.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Du kan kolla på den asm-kod som genereras och se om det är något som tar väldigt stor plats.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Jag skrev samma som du gör, dvs ds1820 och lcd till en at90s2313 i assembler för länge sen, och det tog inte stor plats så det måste vara något som inte kompileras som du tänkt.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Nej det är lite skumt, det tycks som att även den enklaste av funktioner tar onödigt stor plats så fort man ska skriva i C.
Börjar ångra att jag övergav assembler.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Låter som ett problem jag stötte på för ett tag sedan. Använde några flyttal för att specificera en delay (_delay_ms använder float, dumt nog!).
Så länge jag använde konstanter gick det bra, men försökte jag ge mig på en liten simpel dividering i koden, så stenvägra programmeringen av kretsen fungera (avrdude). Kompileringen gick dock toppen, konstigt nog, trots att rätt uC angavs!

Sedan SKA inte C generera onödigt mycket kod, så det måste nästan bero på något annat...

Mvh
speakman
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Kör du med någon optimering påslagen, t ex "-Os"?

Du får gärna ge ett exempel på C-kod och motsvarande Asm-kod som du tycker blir för stor.

Jag har gjort en cykeldator i C till en AT90S2313 som visade hastighet, klocka, tidtagarur och temperatur (DS18S20) på en LCD-display. Det programmet tog 1.7kB. Och då går det säkert att optimera ännu mycket mera.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Oh, yes. Optimering kan vara bra också :oops:.
Den var inte på by default. Nu blir hex-filen för tillfället bara 1900B.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det har väll inte så mycket med att göra att kompilatorn (i princip vilken
som helst, C, Pascal eller Basic från vilken tillverkare som helst)
genererar "onödigt mycket" kod. Den genererar oftast den kod som
"behövs" för att göra det som begärs av programmeraren. :-)

Det har mer att göra med att man som programmerare (speciellt om
man är lite ovan med 3GL och microcontrollers) inte riktigt förstår
vilka konsekvenser det får när man gör val mellan olika sätt
att skriva koden. Det som ser lätt och "naturligt" ut i 3GL språket
(och som inte hade varit något problem på en annan plattform
som t.ex en PC), t.ex att köra en float där det igentligen inte behövs,
kan få oanade effekter... :-)

Om man håller sig till 8/16 bitars integer variabler och undviker
allt för "tunga" funktioner, kanske kör lite direkt register manipulation
istället för färdiga funktioner o.s.v, så kan även C/Pascal/Basic bli
rellativt kompakta.
Skriv svar