EcoTan ha scritto:No, non mi basta ... Ma ho l'impressione di stare scrivendo cose ovvie, cos'altro c'è da dire sulla logica della realtà?
C' da dire molto.
A quanto pare tu stai facendo funzionare un micro (a 16bit) tirandolo per il collo e questo, di solito, non è cosa né buona né giusta.
Probabilmente usi il dsPIC per sfruttarne l'ADC o il DAC o tutti e due, ma sarebbe il caso di valutare la possibilità di usare un micro più potente. Un PIC32 a 80MHz, se vuoi rimanere in Microchip, fa molto di più e, soprattutto, lo fa meglio.
In che seno meglio? Nel senso che ti permette di scrivere programmi in modo ordinato e di evitare variabili globali inutili e trattare quelle utili con funzioni di set o get. In questo mdo, cioè passando attraverso una funzione, puoi controllarne meglio la gestione.
Inoltre, se hai problemi di velocità, dovresti guardare come lavora il compilatore. I compilatori della Microchip non mi piacciono, solo quello del PIC32 (in versione non lite) funziona in maniera decente.
Personalmente uso gli ARM anche perché ho visto come lavora il compilatore. Spesso e volentieri le chiamate alle funzioni setter e getter, ove queste sono semplici tipo:
- Codice: Seleziona tutto
void setVarGlobale(int val)
{
varGlobale = val;
}
int getVarGlobale(void)
{
return varGlobale;
}
vengono sostituiti con il caricamento diretto, o l'assegnazione diretta della variabile con una sola operazione.
Lo stesso dicasi per le operazioni con i puntatori, proprio per il fatto che essendo micro a 32bit il puntatore è contenuto in una singola parola. Non solo, ma si permettono l'arbitrio, se gli chiedi di ottimizzare in velocità, di trasformare a loro discrezione le funzioni normali in inline, e anche di sostituirti cicli corti con operazioni ripetute. Un esempio è la funzione della radice babilonese che avevo postato. Il compilatore fa un lavoro egregio.
Inoltre i mirco a 32bit, quando le variabili locali sono poche, usano i registri interni della CPU (ne hanno molti a disposizione) senza utilizzare lo stack, più veloci di quelli non c'è nessuno.
In base a queste considerazioni e possibilità di una buona coppia compilatore-micro si possono scrivere programmi in modo ordinato, evitando di dichiarare variabili external ma utilizzando i setter/getter. Se poi usi un sistema operativo multitasking queste funzioni sono praticamente d'obbligo.
Avrai quindi un header del mail da includere negli altri moduli (perché non si scrive un programma in un solo file ma si usano il moduli per diminuirne la complessità) con le funzioni che ti permettono di accedere a queste variabili.
Per quanto riguarda le interrupt nessuno ti vieta di scriverla in un modulo con le sue variabili visibili all'interno (quindi trattate come globali) ma non accessibili dall'esterno. In questo modo, con eventuali funzioni si set e di get, possono essere modificate in modo controllato anche dall'esterno, ma in modo controllato!
Una piccola nota sul linguaggio C: ancora oggi è quello più utilizzato per scrivere programmi per microcontrollori, che sono macchine che comunque si portano dietro limitazioni di codice e di RAM. Il C permette di sfruttarle al meglio, ed il saper programmare bene ed in modo ordinato permette di non impazzire e di garantirsi una buona manutenibilità del codice. Inoltre alcuni micro sono stati pensati e progettati sapendo che poi saranno programmati in C e quindi ottimizzati per il linguaggio.
D'altro canto colossi come la IAR (gli Dei dei compilatori), la ARM stessa scrivo applicativi e middleware tutto in C. E se lo fanno loro non sarò certo io quello che dice che è una minchiata farlo.
Macchine diverse significa anche un approccio diverso nella scelta del linguaggio. Se una macchina con microprocessore di una certa potenza, con RAM in abbondanza (mi viene in mente sistemi tipo il raspberry, tanto per fare un esempio) si va meglio di C++ perché più comodo. Nei telefonini si usa Java perché viene, in soldoni, compilato in codice nativo e quindi risulta essere comodo e veloce.
I micro che non costano, aggeggini da 0,2$ o meno, piccoli e con poche risorse, viene conveniente programmarli in assembler proprio per far fornte alle limitazioni.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





Max