Newsgroup: it.hobby.elettronica.digitale
Titolo: ccs compiler

in questi giorni sto facendo qualche prova con piu' micro, ultimamente ho 
scaricato uhna versione demo del ccs compiler per microcontrollori della 
microchip.
in casa ho una scheda della olimex con su montato un Pic16F627 ho voluto 
fare qualche prova usando la seriale, ho usato un loro esempio dato insieme 
al compilatore EX_STR.C, ho scoperto che la usart hardware del pic si 
bloccca alla meraviglia, in particolare se si inviano molti dati, ad esempio 
se si tiene il tasto invio premuto fisso al 100% si blocca.
Sono andato sul forum della CCS ed ho trovato un messaggio dove consigliano 
nella inizializzazionhe di usare la voce errors cioe' dalla originale 
configurazione:
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
si deve modificarla cosi'
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1,ERRORS)
In questo modo effettivamente le cose migliorano di molto ma non si 
risolvono del tutto nel senso che mentre prima il blocco era del 100% ora e' 
dell' 80% cioe' insistendo con l'invio dei caratteri si ha il blocco totale 
della usart.
Il messaggio del forum dice che la cosa succede se non si usa interrupt 
sulla seriale, quindi l'unica soluzione sarebbe di ricorrere all'interrupt, 
questo perche' puo' ricevere caratteri solo se la funzione get_string() e' 
in esecuzione.
Voi cosa dite puo' essere che questi diano delle librerie con bug cosi' 
evidenti? 

 evidenti?
Il micro ha un buffer interno di ricezione di ben 2 (due) caratteri.
Il codice della funzione get_string lo puoi benissimo vedere esaminando il 
file input.c.
Se invii dati a raffica, non c'è libreria che ti possa aiutare se ti perdi 
caratteri per strada a causa di chiamate troppo 'lente' alla routine di 
gestione.
Non c'è nessun bug, semplicemente non è la funzione da utilizzare per ciò 
che vuoi fare tu....
L'esempio che riporti prevede:
"This program allows a user to enter in a string of text.  The  program then 
calculates how many words were entered, how many  unique words were entered, 
and how many numbers were entered.
This program demonstrates the use of many differnent string functions."
con l'ulteriore per la dimensione della stringa in ingresso di 51 caratteri 
da processare (STRING_SIZE)
Quindi, non so bene quale sia il tuo scopo finale, ma ti consiglio di 
utilizzare gli esempi per quello che sono e servono, ovvero come spunto per 
verificare funzionalità di elaborazione o di processo, adattando poi il 
tutto alle tue esigenze.
NB: non sono un sostenitore agguerrito del ccs..
Lo utilizzo come ne utilizzo altri sia per microchip che per altri core, ma 
(purtroppo) ognuno di essi ha i suoi problemucci con i quali occorre volenti 
o nolenti convivere, cercando di porre rimedio fino all'uscita della 
patch...

 della patch...
Non so se quello che voglio fare io posso ottenerlo con questo compilatore 
senza ricorrere agli interrupt, di sicuro provando un compilatore basic 
malvisto da tutti non avviene in nessun caso il blocco della usart hardware. 

 hardware.
Probabilmente si appoggia ad una routine in interrupt che gestisce 
(pericolosamente, a mio parere) autonomamente, oppure utilizza un ciclo di 
poll molto rapido sui caratteri ricevuti .
Alcuni miei dispositivi utilizzano pic18 con 2 seriali che funzionano 
contemporaneamente e una di loro è collegata ad un gsm, con la gestione 
della ricezione ad interrupt non ho mai avuto nessun problema.
Ricordati che un programma che lavora bene non dipende (quasi) mai dal 
linguaggio che si utilizza per scriverlo.... 

 linguaggio che si utilizza per scriverlo....
Sara' come dici, ma sinceramente dagli esempi dati dalla casa che produce il 
compilatore mi aspettavo maggiore attenzione, magari una nota e l'aggiunta 
nella configurazione della seriale con ERRORS, noto comunque che anche il 
manuale non e' il massimo per chi inizia, ti riporto quanto scritto a pagina 
308 del manuale scaricabile attualmente dal sito della CCS, riguarda la 
possibilita' di leggere ed anche scrivere nei registri del microcontrollore, 
a riguardo fanno l'esempio:
#BYTE timer 0 = 0x 01 cosi' come scritto nel manuale il compilatore da tre 
errori perche' c'e' uno spazio fra timer e 0 ed uno spazio fra 0x e 01, 
ovvero per non avere errori si deve scrivere #BYTE timer0 =0x01
Spero solo che si siano impegnati in fondo per cose piu' importanti.
Ho dato uno sguardo al compilatore di Mikrolektronika parlo del MikroC ma il 
fatto che le librerie non siano editabili per studiarle e capire come 
assolvono le funzioni non mi piace.
Ho preso in considerazione dopo aver letto molti messaggi di questo 
newsgroup di usare gli Atmel, ma mi sono fatto l'idea che per uso hobbystico 
non siano la scelta migliore, per il fatto che non si trovano a prezzi 
analoghi o inferiori ai corrispettivi della Microchip, inoltre sempre a 
livello di hobby sembra che siano di piu' difficile repetibilita', basta 
fare una ricerca su ebay per notare questa cosa. 

 evidenti? 
il ccs è uno dei migliori compilatori sulla piazza... il problema è che 
stai usando una routine software progettata per acquisire stringhe da 
tastiera e quindi non adatta al tuo scopo
secondo me o usi gli interrupt oppure rallenti la trasmissione oppure 
velocizzi il micro
-ice-

 fare una ricerca su ebay per notare questa cosa.
A livello di hobby il costo non è così fondamentale visto che la 
differenza può essere al massimo di qualche euro e le quantità irrisorie.
Quanto alla reperibilità Distrelec ad esempio vende a privati e ti vende 
gli ATmega48 (con cui ci puoi fare un mucchio di cose) a 2,45 euro per 
10 pz.
Ad esempio un PIC18F4520 costa 5,60 euro sempre per 10 pz.
Marco


Hai ragione, addirittura il PIC16F628 costa 2,60 euro per 10 pezzi, sono 
ancora di piu' disorientato sul da farsi :-)
Tu che compilatore usi? per la programmazione e debug? 

 Tu che compilatore usi? per la programmazione e debug?
AVRStudio + WinAVR (gratuito)
e da poco CodeVision AVR
Come programmatore ho un AVRISP MkII, un suo clone cinese e una 
AVRDragon. Ma nel 99% dei casi uso il primo.
Non uso 'debugger', nel senso che utilizzo il simulatore oppure eseguo 
il debug tramite linea seriale o quello che ho a disposizione sulla 
scheda. Per le parti di codice non relative a I/O è comodo un normale 
compilatore C + debugger.
Marco

 e da poco CodeVision AVR
Potrei sapere i motivi dell'uso di CodeVision?

 Potrei sapere i motivi dell'uso di CodeVision?
Potrei riassumerteli, ma se cerchi in questo newsgroup ci sono stati 
diversi interventi (ad es. di Bertolazzi) dove venivano esposti i vari 
vantaggi.
Comunque qui trovi le caratteristiche:
http://www.hpinfotech.ro/html/cvavr_features.htm
tra le cose più interessanti c'è senz'altro la nutrita collezione di 
librerie e il fatto che ti lascia liberi dei registri per utilizzarli ad 
esempio per scrivere veloci ISR in asm.
Marco