PIC18F252, CCS-IDE 3.9
Um überhaupt ein Debug-Mittel bei der Erweiterung eines Uralt-Systems
zur
Hand zu haben, wollte ich in einem Fifo zwischengespeicherte Debug-Werte
alternierende zur Temperatur üner die serielle Schnittstelle ausgeben.
In einem ersten Schritt habe ich mal zwei Nibble meines ms-Timers
ausgegeben
und schon damit Problem:
- gebe ich die beiden unteren Nibble des 16bit Return-Wertes aus,
klappern
auch die beiden Nibble auf der RS232-Leitung
- gebe ich aber die mittleren beiden Nibble aus (time = ((uint16_t)
msTime()) >> 4;),
klappert auf der RS232-Leitung nur noch der untere Nibble
- und gebe ich schließlich die oberen beiden Nibble aus ( >> 8 ),
klappert gar nichts mehr, ich habe permanent die Ausgabe "@00".
Das Gleiche dann wiederholt mit einer lokalen statischen Variablen
(tick), mit dem gleichen Ergebnis - wenn ich das ober Byte der 16bit
Variable ausgebe ( >> 8), sehe ich auf der RS232-Leitung nur "@00" -
überschreibe ich die berechneten Werte mit den Werten, die ich beim
ersten Durchlauf erwarte, erhalte ich als Ausgabe auch "@12", das
Problem muss also bei shift/and/or liegen! Sieht jemand meinen Fehler?
1 | static signed int tick = 0x1234;
|
2 |
|
3 | static uint8_t toggle = 0;
|
4 |
|
5 | tick += 7;
|
6 |
|
7 | toggle ^= 1;
|
8 |
|
9 | if (toggle)
|
10 |
|
11 | {
|
12 |
|
13 | uint16_t time;
|
14 |
|
15 | char h, l;
|
16 |
|
17 | //time = ((uint16_t) msTime()) >> 8;
|
18 |
|
19 | time = ((uint16_t) tick);
|
20 |
|
21 | time >>= 8;
|
22 |
|
23 | h = (char) (((time >> 4) & 0xF) | 0x30);
|
24 |
|
25 | l = (char) (((time >> 0) & 0xF) | 0x30);
|
26 |
|
27 | //h = '1';
|
28 |
|
29 | //l = '2';
|
30 |
|
31 | tx_state_a[1] = '@';
|
32 |
|
33 | tx_state_a[2] = h;
|
34 |
|
35 | tx_state_a[3] = l;
|
36 |
|
37 | //tx_state_a[2] = Conv4bitsToAscii(((char) ((time >> 4) & 0xF)));
|
38 |
|
39 | //tx_state_a[3] = Conv4bitsToAscii(((char) ((time >> 0) & 0xF)));
|
40 |
|
41 | }
|