c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

[ct-bot] signed vs. unsigned char

Absender: Markus Hennecke
Datum: Fr, 24.03.2006 09:17:03


Hallo,

im Makefile wird der Datentyp für ein char auf unsigned festgelegt. In Eclipse habe ich davon bisher noch nichts bemerkt, also wäre die Standardeinstellung des Compilers aktiv. Das wäre aber ein signed char.

Nun haben wir aber in mcu/mouse.c folgenden Code:

void maus_sens_writeByte(char data){
	char i;
	MAUS_DDR  |= MAUS_SDA_PIN;              // SDA auf Output

        for (i=7; i>=0; i--){
		...

Klar, dass das eine Endlosschleife ist wenn ein char unsigned ist. Der
Compiler wirft auch eine entsprechende Warnung und "optimiert" den Code
dann zu einer Endlosschleife.

Da für den Build per Eclipse dies nicht definiert zu sein scheint sich aber beide gleich verhalten sollten würde ich folgende Änderung im Makefile vorschlagen:

--- Makefile.orig       Fri Mar 24 09:09:36 2006
+++ Makefile    Fri Mar 24 09:09:58 2006
@@ -234,7 +234,7 @@
 CFLAGS = -g
 CFLAGS += $(CDEFS) $(CINCS)
 CFLAGS += -O$(OPT)
-CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -funsigned-bitfields -fpack-struct -fshort-enums
 CFLAGS += -Wall -Wstrict-prototypes
 CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
 CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))

Die Codestelle in mcu/mouse.c scheint bisher die Einzige zu sein, die betroffen ist.

MfG
  Markus