Hallo,
ich habe folgendes Programm
1 | #include <stdlib.h>
|
2 | #include <stdint.h>
|
3 |
|
4 | void xprintf(const char *fmt, unsigned int val)
|
5 | {
|
6 | (void)fmt;
|
7 | volatile unsigned int xxx = val;
|
8 | (void)xxx;
|
9 | }
|
10 |
|
11 | int main(void)
|
12 | {
|
13 | volatile uint16_t val1 = 0xf001;
|
14 | volatile uint16_t val2 = 0x4f85;
|
15 | xprintf("res: %#x\n", val1 ^ (val2>>4));
|
16 |
|
17 | return 0;
|
18 | }
|
welches so kompiliert wird:
1 | msp430-gcc -mmcu=msp430g2553 -O0 -g -W -Wall -std=c99 -c -o main.o main.c
|
2 | msp430-gcc -mmcu=msp430g2553 -O0 -g -o firmware.elf main.o
|
Wenn ich dieses Programm nun auf http://www.msp430emulator.com/ laufen
lasse, dann wird der "val" Parameter der xprintf() Funktion als 0x44f9
berechnet. (Ich würde ein 0xf4f9 als Ergebnis erwarten.)
Wenn ich die Rechts-Schiebeoperation (0x4f85 >> 4) durchsteppe, dann
bekomme ich die Zwischenergebnisse:
0x4f85
0xa7c2
0xd4e1
0x69f0
0xb4f8
Im Simulator wird also manchmal eine 0, manchmal eine 1 nachgefüllt.
Laut C99 muss hier 0 nachgefüllt werden.
Da ich mich mit dem msp430 (vor allem mit dessen Maschinencode) nicht
auskenne, meine Frage: ist das ein Fehler auf meiner Seite (und ich
kompiliere für die falsche MCU) oder ist das ein Bug im Simulator?
Das Disassembly ist angehängt.
Vielen Dank,
Thomas