HC08 - Confronto Assembler / C: possibile?

Buongiorno a tutti, nei giorni scorsi ho effettuato delle prove per confrontare l'occupazione di memoria di un piccolo programma scritto prima in Assembler e poi in C su un microcontrollore della famiglia HC08. Il programma è molto semplice: utilizzando la gestione in interrupt del timer interno gestisce tre cicli "paralleli" che fanno lampeggiare con cadenza diversa altrettanti led. Le due versioni del programma, per quanto possibile, sono state sviluppate con la stessa filosofia (altrimenti che confronto sarebbe?). I risultati della mia prova sono che il codice Assembler occupa 120 byte, il codice C 350 byte (quasi 3 volte!!!): come è possibile? Io mi aspettavo che il codice C fosse leggermente meno compatto... però così mi sembra un po' eccessivo. Qualcuno di voi ha mai fatto prove analoghe? Con che risultati?

Grazie a tutti in anticipo,

Stefano B.

Reply to
Stefano B.
Loading thread data ...

"Stefano B." ha scritto nel messaggio news: snipped-for-privacy@posting.google.com...

E' assolutamente normale! Anzi, di solito il codice generato da C occupa anche molto di più (perfino 10 volte) di quello scritto a mano in assembler... Non solo, in genere è anche meno ottimizzato in termini di utilizzo delle risorse, ed è anche più lento! Del resto se c'è gente che utilizza ancora l'asembler ci sarà un perchè... L'abilità e l'intelligenza dei compilatori non sono ancora paragonabili a quelle umane. Se il C ed altri linguaggi ad alto livello si stanno diffondendo sempre di più anche per la programmazione di piccoli processori e microcontrollori, è solo perchè essi permettono una maggiore produttività...

Ciao, A.D.

Reply to
Antonio Di Stefano

Per un programma di piccole dimensioni, la differenza e' notevole tra C e ASM. Questo perche' il C deve linkare una serie di librerie che nei programmi piu' semplici possono risultare solo un peso inutile.

Prova a dare un'occhiata all'output del linker, e vedrai cosi' come viene occupata la memoria.

Per i programmi piu' complessi, invece, il C (se il compilatore e' buono e il programmatore anche) puo' risultare paragonabile all'ASM (e anche meglio), checche' ne dicano gli adoratori dell'assembler.

L'ideale sta nel mezzo: uso misto di C e ASM a seconda dei vantaggi di ognuno.

Ne ho fatte un sacco. I risultati sono quelli che ti ho detto: per un programma di due righe l'ASM surclassa il C, ma per un programma SERIO la differenza di occupazione ROM e' molto meno evidente, mentre i vantaggi dell'uso del C in alcune parti del programma sono moooooolto evidenti. Questo presumendo che il programmatore C sia uno che sa quello che fa, perche' altrimenti in C e' facile abbandonarsi a pessime abitudini di programmazione ("pessime" in ambiente microcontroller 8 bit, naturalmente) che fanno lievitare le dimensioni del compilato.

Diciamo che per un micro ad 8 bit, i programmi piu' piccoli di 1 o 2Kb sono molto avvantaggiati dall'essere scritti interamente in ASM.

--
Faumarz
Reply to
FauMarz

Io tempo fa ho dovuto rifare in C un programma per AVR che funzionava bene in ASM su precisa richiesta di un cliente che sosteneva una miglior documentabilità del C, tutto soprattutto perchè il nuovo responsabile tecnico sosteneva di conoscerlo bene. (Poi non ci capiva un granchè e si è visto...)

I risultati sono stati sufficienti ma il programma da meno di 2k è diventato oltre 4k, e la velocità di risposta (ricevo gli inputs da un accelerometro e devo intervenire su un controllo motore, quindi è importante) si è all'incirca raddoppiata.

Inoltre bisogna ricordare che il core degli AVR è ottimizzato per il C, in effetti io mi aspettavo un peggioramento delle prestazioni più marcato.

Comunque le performance che si ottengono in ASM come velocità/ dimensione del codice non sono paragonabili, restando in ambiente microcontroller.

ciao Stefano

Reply to
SB

"Antonio Di Stefano" ha scritto nel messaggio news:c89plr$nrv$ snipped-for-privacy@newsfeed.cineca.it...

... snip...

Non solo, aumenta anche il grado di manutenibilita' del codice sorgente.

Saluti

--
GG

Ogni giorno, ogni ora ti cambia: ma mentre negli altri la rapina del tempo
e' piu' evidente, in te invece non e' manifesta poiche' non avviene sotto i
tuoi occhi - Seneca
Reply to
GG

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.