Hallo Leute
Ich hab ein Problem.
Ich hab ne Routine, die nen uint32_t auf dem LCD Display ausgiebt:
1 | void LCD_putn(uint32_t n)
|
2 | {
|
3 | unsigned char i = 0;
|
4 | unsigned char buf[7];
|
5 | do //fill the buffer iteratively...
|
6 | {
|
7 | buf[i++] = '0' + n % 10;
|
8 | n = n / 10;
|
9 | } while (n != 0);
|
10 |
|
11 |
|
12 | while( i > 0) //...and print it backwards
|
13 | {
|
14 | lcd_data( buf[ --i ] ); // lcd_data sendet ein char auf das Display
|
15 | }
|
16 | }
|
Das funktioniert auch wunderbar in der main Routine, dort gibt er mir
für
LCD_Putn(0xffff) 65535 aus. Wenn ich das aber in der ISR von INT1 mache,
gibt er 4294901766 aus.
Wenn ich void LCD_putn(uint32_t n) zu void LCD_putn(uint16_t n)
umändere, funktioniert es auch in der ISR. Wenn ich uint32_t zu uint64_t
mache, funktioniert es auch nicht.
Ist man in einer ISR irgendwie beschränkt bei der Zahlengröße, oder hat
jemand ne Ahnung wo der Fehler sonst liegen könnte?
Gruß enton