Newsgroup: it.hobby.elettronica.digitale
Titolo: compilatore codevision

Salve!
Che ne pensate del compilatore in C CodevisionAvr? 

 Che ne pensate del compilatore in C CodevisionAvr? 
L'ho usato alcuni anni fa. Senza scendere in particolari direi che 
valgono le medesime considerazioni fatte per gli altri compilatori 
"proprietari" come quelli di mikroElektronika e della CSS per i PIC.
Hanno librerie già pronte ma ti costringono a rimanere legato al loro 
compilatore (e quindi ai target supportati).
Ciao!
Marco / iw2nzm

 Che ne pensate del compilatore in C CodevisionAvr? 
Io circa una decina di anni fa l'avevo comprato.
Era carino, funzionava bene e aveva anche un po' di librerie.
Aveva però un sistema di licenze che lo legavano alla macchina su cui 
era installato in un modo complicato.
Mi capitò una volta di trovare un bug, il compilatore sbagliava a fare 
le divisioni in certi casi. Anche altre persone se ne accorsero e il 
fix venne messo abbastanza velocemente su una nuova versione del 
compilatore. Io avevo la vecchia e non avevo accesso all'upgrade 
gratuito. Avrei dovuto riacquistare un'altra licenza per correggere il 
bug.
Poco dopo sono passato al GCC :-)
-- 
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ 
http://www.develer.com/
 - 
http://www.bertos.org

 Poco dopo sono passato al GCC :-)
Io continuo ad usare Codevision, ma non l'ho più aggiornato da un anno
(trovo che il costo della "assistenza" sia sproporzionato) e contavo di
passare a GCC anche perché il sistema di sviluppo dei moduli MeshNetics è
basato appunto su GCC.
Una cosa mi trattiene: con GCC è possibile dire al compilatore di lasciar
liberi alcuni registri? La velocità di trattamento degli interrupt cambia
radicalmente se non bisogna fare tonnellate di push e pop...

 radicalmente se non bisogna fare tonnellate di push e pop...
In che senso lasciarli liberi?
Il compilatore sa da solo quali rigistri usa all'interno di una ISR e 
pusha poppa solo quelli che ha usato.


 pusha poppa solo quelli che ha usato.
Se, come spessissimo capita, per processare un interrupt hai bisogno di due
o tre variabili statiche ed una o due dinamiche (ma capita spesso anche
solo una in totale), se le allochi nei registri, Codevision pusherà solo
status e program counter. Non solo: l'efficienza del codice supererà anche
quella di un assembler scritto a manina ma che usa variabili in memoria.
Ad esempio un mio prodotto ha 4 seriali software a 4800 baud e non ce la
farebbe dovesse pushare mezzo mondo 9600 volte al secondo a 4 MHz.
In questo caso ho anche variabili in memoria, che però uso solo dopo aver
ricevuto un intero carattere valido, ovvero una volta su 10. Solo allora
richiamo un'altra funzione che farà i push e pop per le variabili in
memoria.

 memoria.
Complimenti (non è sarcasmo) per il perfetto incastro che hai creato. 
Una volta misi 2 seriali software a 19200 su un PIC 12qualcosa a 8 pin.
Tutto però dipende dal ciclo di vita del prodotto che stai sviluppando.
Io non lo farei mai su un prodotto che devo mantenere per anni con 
modifiche, aggiornamenti etc...
-- 
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ 
http://www.develer.com/
 - 
http://www.bertos.org/

 modifiche, aggiornamenti etc...
A dire il vero, 5 anni e 6 versioni dopo (solo aggiunte, bachi non ne
faccio mai :D) ed essere stato passato da ATmega8 ad ATmega88 non sembra
aver ancora ceduto. C'è da dire che non c'è motivo per cambiare un simile
pezzo di codice, una volta che va. Almeno non per me, visto che sulle navi
si usa solo il protocollo NMEA 0183, quindi 4800 baud sono e rimarranno per
gli anni a venire (NMEA HS e NMEA200 non sono stati adottati praticamente
da nessuno), e il checksum (che calcolo al volo) quello è.
Anzi, l'ho portato da ATmega8 ad ATmega161 per un altro prodotto, con 2+2
seriali a 9600 baud senza checksum e non ha fatto una grinza, è andato alla
prima.

 prima.
Io sto parlando di mantenere il firmware sullo stesso hardware, non di 
fare nuove board. E' chiaro che se puoi cambiare l'hw i problemi si 
risolvono.
Ma un incastro così magico e dipendente dal carico della CPU è molto a 
rischio se la CPU comincia a fare più cose o anche semplicemente cose 
diverse.
5 versioni non sono nulla, io mi riferisco a firmware che richiedono 
migliaia di cambiamenti e aggiunte nel corso degli anni con un lavoro 
praticamente costante e giornaliero.
In quest'ottica usare il microcontrollore in modo così spinto è 
deleterio perché rende tutto troppo critico per essere mantenuto 
agevolmente nel tempo.


 agevolmente nel tempo.
Si hanno però altri vantaggi, tipo bassi consumi e quindi maggior
affidabilità. Anche se però non ha molto senso paragonare i nostri mondi
che mi pare, purtroppo per me, abbiano assai poco in comune. :-)

 che mi pare, purtroppo per me, abbiano assai poco in comune. :-)
Bhe, conoscere cose nuove o diverse io credo faccia sempre bene.
A tutti e in qualunque contesto :-)
Ciao
-- 
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ 
http://www.develer.com/
 - 
http://www.bertos.org/

 A tutti e in qualunque contesto :-)
Scusami, ma il "bhe" mi urta davvero i nervi, quindi lasciati insegnare che si scrive "beh". :-)

AVR con 4 seriali non mi pare ce ne siano.
L'AtMega 1280 ha 4 uart, io in un app. le uso tutte e 4.
http://www.atmel.com/dyn/resources/prod_documents/2549S.pdf
--
ciao
  Stefano

 L'AtMega 1280 ha 4 uart, io in un app. le uso tutte e 4.
Si, avevo il dubbio, ma per me non esiste, dato che è estremamente
difficile da trovare in DIP. ;-)
In realtà esiste eccome e l'ho usata, ma solo in quanto processopre
parzialmente disponibile in
http://www.meshnetics.com/zigbee-modules/chip-antenna/
ZigBee, sulle navi, è un po' che ci provo, ma nun je piace proprio...

ZigBee, sulle navi, è un po' che ci provo, ma nun je piace proprio...
Ci credo, a quelle frequenze e con tutto quel ferro in giro...
--
ciao
  Stefano

 Ci credo, a quelle frequenze e con tutto quel ferro in giro...
No, loro porelli semmai, in line-of-sight, funzionerebbero pure.
E' il fatto di spargere radiofrequenza in giro che non piace al mio cliente
mentre il fatto che siano solo 10mW non lo tange.

 
http://www.atmel.com/dyn/resources/prod_documents/2549S.pdf
Ma a me, in realtà, ne servivano 5, visto che devo ricevere a 4.800  su 4
canali e trasmettere a 4.8K, 38.8K, 115.2K o 500K su di un canale.
Tié. ;-)

 ha scritto:

Il quinto lo fai via software sul 1280, o usi un inexpensive AtTiny tipo il
Tiny2313.
Ma ti devo proprio insegnare tutto ?    ;-)
--
ciao
  Stefano

 Scusami, ma il "bhe" mi urta davvero i nervi, quindi lasciati insegnare che si scrive "beh". :-)
Hai ragione, mi è sfuggito, chiedo venia.


 Ma ti devo proprio insegnare tutto ?    ;-)
Tutto no, quasi.