- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Rechenoperationen nur bis 16bit

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.10.2008
    Ort
    Wien
    Alter
    44
    Beiträge
    38

    Rechenoperationen nur bis 16bit

    Hallo,

    kann das sein, dass das Rechnen (+,-,*,/) nur bis 16Bit möglich ist?

    Das Terminal spuckt mir bei unten stehende Code kein brauchabres Ergebnis aus (bzw. eigentlich gibt es mir den Wert aus "Ergebnis - 65535 -1"!? Und das obwohl meine Variablen mit 32Bit deklariert worden sind!?

    THX for Help...

    mfg
    Aircode

    Code:
    #include "RP6RobotBaseLib.h" 
    
    // -------------------------------------------------------------------------------------
    // -------------------------------------------------------------------------------------
    // -------------------------------------------------------------------------------------
    
    int main(void) 
    { 
       
      initRobotBase();
      powerON();
      
      while(true) 
      { 
    	  
    	  uint32_t wert1 = 89200;
    	  
    	  uint32_t wert2 = wert1 + 32800;
    	  	  
    	  writeInteger(wert1, DEC);writeString("\n");
    	  writeInteger(wert2, DEC);writeString("\n");
    
    	  mSleep(5000);
       
       } 
       return 0; 
    }

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    Nur weil du uint32_t schreibst heisst das nicht das der Compiler da auch ne 32Bit Variable draus macht.

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    writeInteger() erwartet eine 16bit-Variable.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    26.10.2008
    Ort
    Wien
    Alter
    44
    Beiträge
    38
    ok, anders:

    der code funzt ohne probleme:

    Code:
    #include "RP6RobotBaseLib.h" 
    
    // -------------------------------------------------------------------------------------
    // -------------------------------------------------------------------------------------
    // -------------------------------------------------------------------------------------
    
    int main(void) 
    { 
       
      initRobotBase();
      powerON();
      
      while(true) 
      { 
    	  
    	  uint32_t wert1 = 700 / 100 * 100;
    	  	  
    	  writeInteger(wert1, DEC);writeString("\n");
    
    	  mSleep(5000);
       
       } 
       return 0; 
    }
    der code gibt einen anderen wert aus, und das obwohl zu dem zeitpunkt, wo "wert1" ausgegeben werden soll, "wert1" nur 16Bit groß ist!?

    Code:
    #include "RP6RobotBaseLib.h" 
    
    // -------------------------------------------------------------------------------------
    // -------------------------------------------------------------------------------------
    // -------------------------------------------------------------------------------------
    
    int main(void) 
    { 
       
      initRobotBase();
      powerON();
      
      while(true) 
      { 
    	  
    	  uint32_t wert1 = 700 * 100 / 100;
    	  	  
    	  writeInteger(wert1, DEC);writeString("\n");
    
    	  mSleep(5000);
       
       } 
       return 0; 
    }
    THX
    aircode

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    Ähm, wo ist der Unterschied in den Codes?!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    26.10.2008
    Ort
    Wien
    Alter
    44
    Beiträge
    38
    code 1: uint32_t wert1 = 700 / 100 * 100;
    code 2: uint32_t wert1 = 700 * 100 / 100;

    im code 1 wird erst dividert, dann multipliziert und umgekehrt...

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    Glatt übersehen.

    Code1: 700 / 100 = 7(geht) * 100 = 700 (geht)
    Code2: 700 * 100 = 70000 (geht nicht!) / 100 = 700 (ginge auch)

    Punkt vor Strichrechnung scheint ihn da nicht zu interessieren.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    26.10.2008
    Ort
    Wien
    Alter
    44
    Beiträge
    38
    Code2: 700 * 100 = 70000 (geht nicht!) / 100 = 700 (ginge auch)

    warum geht nicht? wert1 = 32Bit und 32Bit geht ja bis 4294967295!

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    Zitat Zitat von KingTobi
    Nur weil du uint32_t schreibst heisst das nicht das der Compiler da auch ne 32Bit Variable draus macht.
    Mach das mal:
    Code:
    int main(void) 
    { 
        
      initRobotBase(); 
      powerON(); 
      
      while(true) 
      { 
         
         uint32_t wert1 = 700 * 100 / 100; 
              
         writeInteger(sizeof(wert1), DEC);writeString("\n"); 
    
         mSleep(5000); 
        
       } 
       return 0; 
    }
    Dann siehst du wieviel Speicher (Bytes) für wert1 reservieret wurde.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    26.10.2008
    Ort
    Wien
    Alter
    44
    Beiträge
    38
    1. beim compilieren kommt ein fehler "owerflow"

    2. sizeof(wert1) = 4 ... laut terminal

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test