Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Noch vorhandene Bugs in Version 1.6 Kategorie: Programmierung C (von PeterS - 24.04.2009 11:53)
Als Antwort auf Re: Noch vorhandene Bugs in Version 1.6 von jodo63 - 24.04.2009 10:08

> Hallo,
>
> ich habe von eurem Problem mit der unsigned Division gelesen. Hier hat der Compiler wohl noch einen
> Fehler mit dem Bit 15, das bei signed Variablen die negativen Zahlen des Einerkomplements darstellt.
> Folgender Code wird falsch ausgeführt:
>
> word Var1;
>
> Var1 = 50000;
> Var1 = Var1 / 10000; >>> Ergebnis = -1

Wenn man hinter die Zahlen ein "u" für unsigned schreibt, dann bekommt an auch die richtigen Ergebnisse.
Ansonsten geht der Compiler von einer signed Zahl aus.

Gruss Peter

>
> Für die Werte werden folgende Ergebnisse berechnet:
> 32768 >>> -3
> 40000 >>> -2
> 50000 >>> -1
> 60000 >>> 0
>
> Folgender Code wird richtig ausgeführt:
>
> word Var1, Var2
>
> Var1 = 50000;
> Var2 = 10000;
> Var1 = Var1 / Var2; >>> Ergebnis = 5
>
> Hier gibt es noch Aufgaben für Conrad electronic ;-)
>
> Gruss
>
> Joachim
>
>  > Danke für die Info, ich wünschte nur, ich hätte die Liste 2-3 Wochen früher gehabt.
> >
> > Bitte Fehler an ccpro@gmx.de schicken! Ich kann leider nicht immer das Forum verfolgen, da wie schonmal
> > gesagt, Conrad mich nicht mehr bezahlt und auch der Conrad Support mich zu 90% nicht über Support-
> > anfragen informiert.
> >
> >
> > Gruss Peter
> >
> > >
> > > 1. Fenster in der IDE lassen sich nicht mehr öffnen
> > >
> > > wenn das linke vertikale Fenster ganz nach links geschoben wird bis es verschwindet
> > > und das untere horizontale Fenster ganz nach unten und man die IDE beendet und dann
> > > wieder startet.
> > Ich schau mal, das ich unterbinden kann, das die Fenster zu klein gemacht werden.
> >
> > >
> > >
> > > ============================================================================================
> > >
> > > 2. Datentyp Char - keine Zuordnung von neg. Werten
> > >
> > > char a;
> > >
> > > void main(void)
> > > {
> > >     for (a=5; a>-6; a--)
> > >     {
> > >         Msg_WriteInt(a);
> > >         Msg_WriteChar(0x20);      // Leerzeichen
> > >         AbsDelay(500);
> > >     }
> > >
> > >
> > >
> > >     while(1);
> > > }
> > >
> > >
> > >
> > > Ausgabe:
> > >
> > > Interpreter gestartet - 2kb RAM                                                
> > > 5 4 3 2 1 0 255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240 239
> > > 238 237 236 235 234 233 232 231 230 229 228 227 226 225 224 223 222
> > >
> > >
> > >
> > >
> > > Ausgabe mit Datentyp Int:
> > >
> > > Interpreter gestartet - 2kb RAM                                                
> > > 5 4 3 2 1 0 -1 -2 -3 -4 -5
> > >  
> > >
> > >
> > >
> > > ===========================================================================================
> > >
> > > 3. Divisionsfehler - falsche Ergebnisse wenn der Dividend >32700 wird
> > >
> > > word a,b;
> > >
> > > void main(void)
> > > {
> > >     for (a = 31000; a < 34000; a=a+100)
> > >     {
> > >         b = a/10;
> > >         Msg_WriteWord(a);
> > >         Msg_WriteChar(0x20);        // Leerzeichen
> > >         Msg_WriteWord(b);
> > >         Msg_WriteChar(0x0D);        // CR
> > >         AbsDelay(200);
> > >     }
> > >
> > >     while(1);
> > > }
> > >
> > >
> > > Ausgabe:
> > >
> > > Interpreter gestartet - 2kb RAM                                                
> > > 31000 3100                                                                      
> > > 31100 3110                                                                      
> > > 31200 3120                                                                      
> > > 31300 3130                                                                      
> > > 31400 3140                                                                      
> > > 31500 3150                                                                      
> > > 31600 3160                                                                      
> > > 31700 3170                                                                      
> > > 31800 3180                                                                      
> > > 31900 3190                                                                      
> > > 32000 3200                                                                      
> > > 32100 3210                                                                      
> > > 32200 3220                                                                      
> > > 32300 3230                                                                      
> > > 32400 3240                                                                      
> > > 32500 3250                                                                      
> > > 32600 3260                                                                      
> > > 32700 3270                                                                      
> > > 32800 62263                                                                    
> > > 32900 62273                                                                    
> > > 33000 62283                                                                    
> > > 33100 62293                                                                    
> > > 33200 62303                                                                    
> > > 33300 62313                                                                    
> > > 33400 62323                                                                    
> > > 33500 62333                                                                    
> > > 33600 62343                                                                    
> > > 33700 62353                                                                    
> > > 33800 62363                                                                    
> > > 33900 62373
> > >


    Antwort schreiben


Antworten:

Re: Noch vorhandene Bugs in Version 1.6 (von jodo63 - 25.04.2009 19:59)