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.
Dimensione firmware compilato per 8 bit oppure per 16 bit
Moderatore: Paolino
47 messaggi
• Pagina 1 di 5 • 1, 2, 3, 4, 5
0
voti
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?
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?
-
Candy
32,5k 7 10 13 - CRU - Account cancellato su Richiesta utente
- Messaggi: 10129
- Iscritto il: 14 giu 2010, 22:54
1
voti
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?
Il codice C è già tutto ottimizzato e spacca i bit in 4?

0
voti
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)
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.
-
lelerelele
2.627 3 7 9 - Expert EY
- Messaggi: 3002
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
3
voti
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.
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.

0
voti
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.
-
lelerelele
2.627 3 7 9 - Expert EY
- Messaggi: 3002
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
0
voti
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.
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.
-
TardoFreak
73,7k 8 12 13 - -EY Legend-
- Messaggi: 15763
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
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.
-
lelerelele
2.627 3 7 9 - Expert EY
- Messaggi: 3002
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
0
voti
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.
Se non vado errato il PIC18F25K50 è identico al PIC18F24K50 ma con il doppio di FLASH.
Sarebbe la soluzione migliore e più conveniente.
-
TardoFreak
73,7k 8 12 13 - -EY Legend-
- Messaggi: 15763
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
47 messaggi
• Pagina 1 di 5 • 1, 2, 3, 4, 5
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 2 ospiti