PDA

Επιστροφή στο Forum : προσημασμένος Μετρητής



picdev
02-09-13, 19:33
έχω έναν 16bit μετρητή σε έναν μΕ, ο οποίος δουλεύει σε up count ή down count ανάλογα κάποιο σήμα που θα πάρει, αυτό που θέλω είναι να έχει πρόσημο, γίνεται με συμπλήρωμα ως προς 2? ή μόνο με συμπλήρωμα ως προς1?
δηλαδή θέλω να τον περνάω σε μία signed μεταβλητή στη C,ο c30 ξέρουμε πως αναπαριστά τους signed?
είναι λίγο σπαζοκεφαλιά και έχω κολλήσει.

gsmaster
03-09-13, 00:08
Απ όσο έχω δουλεψει στην CCS αν έχεις οποιαδήποτε signed μεταβλητή (8-16-32bit) τότε το MSb του, αναφέρεται στο πρόσημο των επόμενων bit που ακολουθούν. Άρα αν έχεις εναν 16bit signed δεν ειναι 0 εώς 65535 αλλά -32768 εώς 32768.

Γιατί δεν τον κάνεις signed απ την αρχή να ξεμπερδεύεις?

picdev
03-09-13, 01:06
όταν λες να τον κάνεις signed απο την αρχή?
ο μετρητής είναι ένας κλασικός counter στον μΕ, που ανάλογα απο ένα σήμα που παίρνει ανεβαίνει ή κατεβαίνει

klik
03-09-13, 04:01
Θα χρησιμοποιήσεις signed και θα κάνεις κανονικά τα --/++ όταν χρειάζεται. Η αναπαράσταση
του signed είναι σε 2's complemet.

Το πρόβλημα σου είναι στην απεικόνιση αν δεν χρησιμοποιείς sprintf κλπ
π.χ.


if(counter<0){
display('-');
display(-counter);
} else
display(counter);
}


υγ1. οι signed int 16bit είναι απο το διάστημα [-32768,+32767] (τα άκρα περιλαμβάνονται)
οι unsigned int 16bit από το διάστημα [0,65535](τα άκρα περιλαμβάνονται)
υγ2. η αναπαράσταση των signed είναι θέμα επεξεργαστή (και όλοι είναι 2's complement) και όχι compiler.

gsmaster
03-09-13, 11:53
όταν λες να τον κάνεις signed απο την αρχή?
ο μετρητής είναι ένας κλασικός counter στον μΕ, που ανάλογα απο ένα σήμα που παίρνει ανεβαίνει ή κατεβαίνει

Εννοείς hardware counter?
Με λίγες δοκιμές του τύπου unsigned=signed και unsigned=-signed θα δεις πως πάει το θέμα.

picdev
03-09-13, 20:30
ευχαριστώ για τη βοήθεια