I numeri all'interno dei tipici microcontrollori non hanno affatto punti decimali. Sono numeri interi binari. Non ci sono decimali all'interno della macchina. Il compilatore o l'assemblatore può consentire di specificare le costanti in questo modo, ma vengono convertiti in binari prima che la macchina li veda.
Tuttavia, puoi decidere quali unità desideri per i valori interi. Ad esempio, supponiamo di voler rappresentare dollari all'interno di un micro. Non può fare nativamente $ 3,21, ma potrebbe fare 321 centesimi. Il micro funziona solo sul valore 321, ma sai che rappresenta unità di 1/100 di dollari.
Questo è solo un esempio per illustrare il concetto di unità arbitrarie. Spesso i numeri sono rappresentati con diversi bit di frazione binari. Ciò equivale a dire che ogni conteggio rappresenta un valore di 2 -N , dove N è il numero di bit di frazione. Questa rappresentazione si chiama "punto fisso". Decidi in anticipo di quanta risoluzione hai bisogno e fai finta che ci siano abbastanza bit a destra del punto binario immaginato per supportare quella risoluzione. Ad esempio, supponiamo che devi rappresentare qualcosa con almeno una risoluzione di 1/100. In tal caso useresti almeno 7 bit di frazione da 2 7 = 128. Questo ti darà effettivamente una risoluzione di 1/128.
La macchina non ha idea che stia succedendo. Aggiungerà e sottrarrà questi numeri come numeri interi ordinari, ma tutto funziona ancora. Diventa un po 'complicato quando si moltiplicano e si dividono i valori in punti fissi. Il prodotto di due valori in virgola fissa con bit di frazione N avrà bit di frazione 2N. A volte tieni semplicemente traccia del fatto che il nuovo numero ha bit di frazione 2N, oppure a volte puoi spostarlo a destra di N bit per tornare alla stessa rappresentazione di prima.
La virgola mobile è la stessa cosa, ma il numero di bit di frazione viene memorizzato insieme alla parte intera in modo che questa regolazione possa essere effettuata in fase di esecuzione. L'esecuzione di operazioni matematiche su numeri in virgola mobile può richiedere diversi cicli. L'hardware in virgola mobile fa tutto questo per te in modo che le operazioni vengano completate rapidamente. Tuttavia, le stesse manipolazioni possono essere eseguite anche nel software. Non c'è motivo per cui non è possibile scrivere una subroutine per aggiungere due numeri in virgola mobile, solo che ci vorrebbe molto più tempo che l'hardware dedicato esegua la stessa cosa.
Ho definito un formato a virgola mobile a 3 byte per PIC a 8 bit e ho scritto un sacco di routine per manipolarli. I microcontrollori di solito hanno a che fare con valori del mondo reale con una precisione di 10 o 12 bit al massimo. Il mio formato a virgola mobile utilizza 16 bit di precisione, che è abbastanza buono per diversi calcoli intermedi.
Ho anche un formato a 32 bit per i PIC a 16 bit. Questo utilizza una parola a 16 bit per la mantissa, che accelera i calcoli poiché questi PIC possono operare su 16 bit alla volta.
Queste routine sono incluse nella mia versione degli strumenti di sviluppo PIC . Dopo l'installazione, guardare i file con "fp24" nel loro nome nella directory SOURCE> PIC e "fp32f" nella directory SOURCE> DSPIC.