Pagina 1 di 5
Dimensione firmware compilato per 8 bit oppure per 16 bit

Inviato:
11 dic 2015, 16:17
da lelerelele
ho realizzato una stazione barometrica, con lettura temperatura, umidità, pressione e via che c'ero calcolo anche l'atimetro, il tutto visualizzato da display grafico, controllo con PIC18F24K50, controllore a 8bit, questo ha 16K di memoria programma, è l'ho riempita tutta, non riesco ad infilarci altro ed avrei la necessità di implementare qualche altra routine, il programma è in C con MplabX.
Mi chiedevo se passando ad un controllore a 16bit, (mi pare che abbiano un moltiplicatore hardware), quindi mi aspetterei di avere una quantità di programma compilato minore, almeno per quanto riguarda la notevole quantità di calcoli svolti a 16 bit e qualcuno a virgola mobile, é così'?
posso quindi prendere un 16bit, per esempio da 16K ed aspettarmi che non si riempia, oppure devo comunque avere una memoria interna superiore?
Data la mia poca esperienza in merito chiedo a chi li usa tutti i giorni, sicuramente ha un''esperienza maggiore della mia.
Saluti a tutti.
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
11 dic 2015, 16:32
da Candy
Non sapendo nulla sul codice è impossibile dire. Però 16k sono già una bella quantità di codice. Sicuro che sia ben ottimizzato e non opulento di inutilità? Alle volte un programma funzionante non è sinonimo di scritto bene.
Lo dico per avere fatto programmi anche complessi con pochi k di codice...
Ti serve per forza il real? 16 o 32 bit in virgola fissa non risolve?
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
11 dic 2015, 16:33
da IlGuru
Puoi compilare quel programma in un progetto per un PIC a 16 bit e vedere quante righe di file .hex vengono fuori.
Il codice C è già tutto ottimizzato e spacca i bit in 4?
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
11 dic 2015, 17:51
da lelerelele
Candy ha scritto:Sicuro che sia ben ottimizzato e non opulento di inutilità? Alle volte un programma funzionante non è sinonimo di scritto bene.
Bella domanda....a livello di routine non ho generato doppioni, se è questo che intendi, ogni sub o funzione ha un suo compito ben definito, ed è richiamata all'occorrenza. L'ottimizzazione del codice la fa mplabx, altro non saprei dire.
Candy ha scritto:Ti serve per forza il real? 16 o 32 bit in virgola fissa non risolve?
Ho cercato invano una marea di notizie in merito, riuscirei a fare tutto con interi o con segno a 32 bit, a parte un calcolo dell'altimentro
![altitudine=44300*[1-({\frac{p}{p0}})^{\frac{1}{5.255}}] altitudine=44300*[1-({\frac{p}{p0}})^{\frac{1}{5.255}}]](/forum/latexrender/pictures/d0159aa1825d488c21971666e1e14f47.png)
, l'elevazione a potenza non sono riuscito a farla senza calcoli a virgola mobile!
IlGuru ha scritto:Il codice C è già tutto ottimizzato e spacca i bit in 4?
Non te lo so dire, mplab compila in codice ottimizzato.
comunque grazie ad entrambi per le risposte.
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
11 dic 2015, 18:02
da Candy
Per l'elevazione a potenza, e tutto il restante calcolo, non riesci a sostituirlo con una tabella di costanti precalcolate e poi interpolare linearmente?
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
11 dic 2015, 18:03
da IlGuru
Cioè voglio dire, tante volte per comodità si usano array di 8 caratteri per salvarci degli zeri e degli uni, quando lavorando con i bit di un char si risparmierebbe spazio, ed istruzioni utilizzando operatori bitwise..
Oppure si fanno divisioni in virgola mobile quando basterebbero una serie di differenze ecc...
Con i micro controllori si imparano certi sgami che programmando sul PC non verrebbero mai in mente.
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
11 dic 2015, 18:25
da lelerelele
Candy ha scritto:Per l'elevazione a potenza, e tutto il restante calcolo, non riesci a sostituirlo con una tabella di costanti precalcolate e poi interpolare linearmente?
Probabilmente si, certamente posso farlo, a scapito della precisione......
IlGuru ha scritto:Cioè voglio dire, tante volte per comodità si usano array di 8 caratteri per salvarci degli zeri e degli uni, quando lavorando con i bit di un char si risparmierebbe spazio, ed istruzioni utilizzando operatori bitwise..
purtroppo devo lavorare con 12 variabili da 16 bit, con e senza segno, che contengono valori costanti letti dal sensore, e poi effettuare tutti gli altri calcoli, non ho quasi per niente varibili ad un bit, ed in caso uso la definizione BOOL di mplab.
ringrazio nuovamente per le info, vedrò come risolvere il problema.
Saluti.
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
12 dic 2015, 2:05
da TardoFreak
Le operazioni matematiche (in generale) sono più ottimizzate su un PIC24 che su un PIC18.
Inoltre i PIC18 non hanno un vero pe proprio stack mentre i PIC24 si.
Questo vuol dire che, in linea teorica, lo stesso programma su un PIC24 occupa meno codice.
Però dipende anche molto dal compilatore.
Bisognerebbe provare.
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
12 dic 2015, 13:41
da lelerelele
Tardofreak ha scritto:Le operazioni matematiche (in generale) sono più ottimizzate su un PIC24 che su un PIC18.
Inoltre i PIC18 non hanno un vero pe proprio stack mentre i PIC24 si.
Questo vuol dire che, in linea teorica, lo stesso programma su un PIC24 occupa meno codice.
Ti ringrazio per la risposta, in effetti era quello che supponevo, avendo il programma molte operazioni, potrebbe essere utile usare un PIC24 o superiore, da quanto capisco non è possibile quantizzare il risparmio di codice/spazio usando controllori 16 bit rispetto agli 8bit.
Alla peggio riprogetterò il tutto su PIC superiore.
saluti.
Re: Dimensione firmware compilato per 8 bit oppure per 16 bi

Inviato:
12 dic 2015, 14:42
da TardoFreak
Di solito, invece di riprogettare tutto, si passa ad un micro identico con taglio di FLASH superiore.
Se non vado errato il PIC18F25K50 è identico al PIC18F24K50 ma con il doppio di FLASH.
Sarebbe la soluzione migliore e più conveniente.