Perché molti di voi programmano in C o Basic i PIC? Ok per pilotare display vari, ma per il resto? Non è meglio usare assembly, che almeno non si perdono mai d'occhio i registri?
- pubblicata
18 anni fa
Perché molti di voi programmano in C o Basic i PIC? Ok per pilotare display vari, ma per il resto? Non è meglio usare assembly, che almeno non si perdono mai d'occhio i registri?
Io non uso i pic da molto tempo, ma ti rispondo in generale. Il C e il BASIC sono linguaggi di alto livello che permettono di descrivere algoritmi più complessi in maniera più semplice per il programmatore. Il codice scritto (se scritto bene) inoltre diventa più mantenibile (puoi fare modifiche con più facilità) e portabile (lo puoi riusare in altre applicazioni, anche di altri microcontrollori).
Non è importante tenere d'occhio i registri, se non in fase di debug, ma è importante quello che il programma deve fare.
Come contro, i linguaggi di alto livello, generano un programma compilato un po' più grande dello stesso scritto in assembly, ma questo viene ripagato appena il codice che devi scrivere ha un minimo di complessità: in C o basic si fa molto prima a scriverlo. Inoltre i microcontrollori moderni cominciano ad avere RAM e ROM a sufficienza per cui il problema dello spazio non si sente.
E se in un'applicazione lo spazio di memoria non basta, beh, significa che è stato fatto un errore di progetto e il microcontrollore scelto non era adatto ^^
Ciao
ha scritto:
Io non ho esperienza in questo campo, ma un po' di nozioni teoriche sì.
Come implementi la funzione logaritmo in assembler? ;-)
Ciao Boiler
-- questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it
ha scritto nel messaggio news:M3EHe.1125$ snipped-for-privacy@twister1.libero.it...
Per lo stesso motivo per cui se vuoi cucinarti la pasta al pesto non cominci dalla coltivazione del grano duro, ma vai al supermercato. Le procedure che definiscono algoritmi complessi, come la gestione delle variabili (che non siano di tipo binario o byte), i cicli, le macchine a stati, operazioni matematiche, possono tranquillamente essere descritte ad alto livello, lasciando ad un compilatore il compito improbo di esplicitarle e linkarle. Nel caso (non così frequente) che tu stia cercando un controllo stretto del flusso del programma, per esempio per esigenze di timing o di occupazione di memoria da parte del codice, puoi sempre inserire degli algoritmi descritti a basso livello. Come se, dico, tocco di chef sulla pasta, metti un vaso di basilico in terrazza e lo tiri su senza schifezze chimiche, aggiungendo alla pasta compilata il sapore del basilico fresco e genuino. (ore 12.25, si vede...?)
Il giorno Tue, 02 Aug 2005 12:05:04 +0200, snipped-for-privacy@bluemail.ch (Boiler) ha scritto:
L'algoritmo no, ma la radice quadrata l'ho implementata in Assembler su Z80.
Comunque non è impossibile nemmeno fare l'algoritmo, una volta si calcolava con la matita...
Certo dovendo fare cacoli complessi adesso molto meglio usare un linguaggio più evoluto come il C, anche perchè i compilatori attuali sono efficienti, non come quelli delle prime versioni che erano lentissimi.
ciao Stefano
Francesco Sacchi ha scritto:
Io ho incominciato da poco a muovere qualche passo con i pic e la programmazione in C mi ha aiutato tantissimo in quanto è molto facile. Purtroppo online ho trovato tantissimo materiale sull'assembler e pochissimo sul C :(
E poi non so perchè a volte scrivendo programmi semplicissimi dopo qualche secondo si bloccano in parte e funzionano male. Ad esempio una volta volevo solo far attivare 4 uscite in sequenza ed invece di farmele 1-2-3-4 1-2-3-4 mi faceva 1-2-3-4-3 1-2-3... Un'altra volta dovevo fare attivare una tra due uscite a caso, alla seconda o terza volta si inchiodava attivando sempre la stessa.
Che siano questi i problemi del programmare in C?
Ciao!
-- www.madprice.it Il nuovo sito di notizie ed informazione sul mondo dei computer! Vuoi collaborare o dare consigli? Guarda la sezione contatti e scrivici. www.madprice.it
Il giorno Tue, 02 Aug 2005 10:50:40 GMT, SB ha scritto:
Il LOGARITMO
il LOGARITMO
CALCOLI
e a pranzo ho bevuto solo acqua, lo giuro.. :-)
ciao Stefano
SB ha scritto:
con
Sì, lo so che si possono fare gli sviluppi in serie di praticamente tutte le funzioni. La domanda è: conviene?
Ciao Boiler
-- questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it
snipped-for-privacy@nospam-inwind.it ha scritto:
Perchè il C è di alto livello, l'assembler lo userei *solo* per cose real-time [ a parte il fatto che ormai i compilatori più recenti riescono a ottimizzare così tanto il codice che non si vede più la differenza tra un programma scritto in asm da un programmatore skilled e uno generato dal linker... ]. Perchè il C è semplice, puoi implementare facilmente algoritmi difficili anche riguardanti i timing [ voglio vederti a fare uno sleep preciso contando quanti cicli di clock portano via una jump e una nop :P ]. Comunque, dentro il codice C puoi comunque inserire del codice assembler [ nel caso come dici tu, voglia essere sicuro dei registri, oppure una porzione di programma che è particolarmente delicata ].
Ci sono tanti altri vantaggi nell'usare il C [ ci sono anche degli svantaggi, ma per un qualsiasi progetto io userei il C, a meno che... come ho scritto sopra :) ], io ho scritto solo quelli che mi venivano in mente. Ciao,
-- Oderint, dum metuant. WWW: http://xjp.altervista.org E-Mail: michele @ nectarine . it MSN [IM]: michele @ nectarine . it IRC: xjp @ FreeNode
dipende a volte ci sei costretto
scenario:
programma che richiede i logaritmi , scritto in C ma nno hai a disposizione la virgola mobile, non fosse altro perche' occupa troppo spazio o si mangia meta' della RAM per le variabili della libreria
per carita' il C e' comodissimo l'ho adottato per i miei progetti appena ho potuto ,dopo aver sviluppato un programma da 8K di codice in assembler, ma il C embedded spesso e' un altra storia rispetto a quello dei PC sopratutto se il tuo micro poi ha 4K di codice e/o 256 byte di RAM tutto compreso.
chiaramente scordatevi la printf :-(((((
su lunghe sequenze di codice questo e' vero , l'assembler ha pero' il vantaggio di poter sfruttare a pieno certe peculiarita' del processore che il C non puo', per le sue caratteristiche, usare: un esempio classico e' il bit-banging dove si puo' sfruttare, in assembler, il carry per velocizzare il codice nel trasferimento dei bit
sui pezzi di codice lunghi la superiorita' del C e' quasi palese.
qui ho dei seri dubbi perche' se il ritardo di un ciclo semplice lo puoi calcolare con precisione in assembler perche' SAI quali e quante istruzioni verranno utilizzate, in C e' il compilatore a fare le scelte sul codice generato ...
( fermo restando gli interrupt che fanno sballare i timing calcolati ocn tanta fatica )
ogni linguaggio ha svantaggi e svantaggi
secondo me la cosa migliore e' saperli incrociare in modo da prendere il meglio da tutti.
Anch'io :-). E in 10 byte in tutto!
Sarei un po' scettico. Matita e tavole.
-- Franco Derzeit keine Unterschrift verfügbar.
Si`, le librerie fanno cosi` :-). Anzi non usano gli sviluppi in serie (di taylor) che convergono male, usano l'algoritmo cordic e polinomi di cebiceff.
-- Franco Derzeit keine Unterschrift verfügbar.
Beh... non per nulla esiste l'inline assembly in C.
Però sui processori moderni non puoi in generale sapere quanti cicli di clock impiega ogni istruzione perché non puoi sapere se hai un hit del branch predictor, un hit della cache di primo/secondo livello, etc...
Infatti, per fare attese con un loop si usano istruzioni apposite.
Ciao,
-- Daniele Orlandi
che pero' e' assembler :-) e non piu' C
questa veramente non la sepevo e mi rende curioso , comunque non si applica a micro piccoli come PIC o AVR o 8051
Ri-Ciao
e buona programmaziaone a tutti che sia Basic C Assembler o Forth ( ce ne eravamo dimenticati :-) )
ognuno scelga secondo le proprie preferenze!
Franco ha scritto:
Argh! Ero quasi riuscito a dimenticare questo nome, evocatore di materie PITA (Pain In The Ass)...
Boiler
-- questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it
Allora per te tschebischev.
-- Franco Derzeit keine Unterschrift verfügbar.
Franco ha scritto:
Rispondo con Cholesky ;-)
Boiler
-- questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it
Un bel giorno Boiler digitò:
Allo stesso modo in cui l'hanno implementata gli sviluppatori del compilatore C. :)
-- asd
E se avessero programmato il compilatore in Visualbasic ? XDXDXDXDXDXDXDXDXDXDXD
Bye,
P.s.: Ma in asm c'è la logica fuzzy? P.p.s.: Ha senso programmare byte per byte. P.p.p.s.: Per implementare quella funzione (credo) basti studiare il source di gcc o mingw... :)
-- Carmine ( pikachu31NOSPAM@gmail.com (Togli la scritta NOSPAM) ) Webmaster di The Total Site (http://www.tekkentag.altervista.org/ ) Webmaster di SceptilePage (http://www.sceptilepage.altervista.org/ ) Account Messenger: thetotalsite@msn.com MyBLOG (NEW!!) http://spaces.msn.com/members/itanet/
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.