WinAVR, tiny2313 och DS18B20
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
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
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.
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.
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.
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.