-
        

Ergebnis 1 bis 5 von 5

Thema: Arduino Speicherverbrauch

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.05.2004
    Ort
    Mannheim
    Beiträge
    79

    Arduino Speicherverbrauch

    Anzeige

    Hallo,

    programmiere im Moment gerade einen Arduino und komme langsam in Speichernöte. Daher meine Frage: Wieso kostet der folgende Code so viele Bytes? 178 um genau zu sein.
    Und ich habe Wire.h (die I2C Library) sowieso schon eingebunden... Ist da irgendeine Optimierung beim Compiler nicht eingeschalten?
    Außerdem benutze ich die Funktion noch nicht einmal... müsste GCC das nicht von sich aus weglassen?

    Code:
    byte read_Motor_Amp() {
      // erster Motor
      Wire.beginTransmission(MOTOR_address);
      Wire.send(11); // Batterieregister
      Wire.endTransmission();
      
      // Jetzt Daten bekommen
      Wire.requestFrom(MOTOR_address, 1);
      byte rdata = 0xff;
      if (Wire.available()) rdata = Wire.receive();
      // Zweiter Motor
      Wire.beginTransmission(MOTOR_address);
      Wire.send(12); // Batterieregister
      Wire.endTransmission();
      
      // Jetzt Daten bekommen
      Wire.requestFrom(MOTOR_address, 1);
      byte rdata2 = 0xff;
      if (Wire.available()) rdata2 = Wire.receive();
      if (rdata > rdata2) return rdata;
      else return rdata2;
    }
    Wäre schön, wenn mir jemand helfen könnte!
    Viele Grüße,

    Daniel

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Daniel,

    Außerdem benutze ich die Funktion noch nicht einmal... müsste GCC das nicht von sich aus weglassen?
    Dem ist leider nicht. so. Der Compiler bindet alle Funktionen ein, unabhängig davon, ob sie überhaupt verwendet werden. Das läßt sich auch nicht durch einen Optimierungsschalter ändern.

    Um das zu umgehen müßte man Libraries benutzen. Dazu müßte man die Funktionen auf mehrere Sourcefiles aufsplitten (ideal wäre 1 Funktion je Sourcefile). Daraus dann eine Object Library erstellen und diese dann zu jedem Projekt dazulinken. Dann werden nur noch Funktionen eingebunden, die auch aufgerufen werden (streng genommen werden alle Funktionen aus einem Sourcefiles mitgelinkt, auch wenn nur eine einzelne davon verwendet wird).

    Die Arduino Core Library oder die Math Lib vom avr-gcc sind z.B. Objekt Librarys.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Vielleicht spart es ein bisschen, wenn Du die Konstanten auf byte castest. Ansonsten werden die intern m.W. als 16bit Int behandelt.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    18.04.2008
    Beiträge
    14
    Hallo Daniel,

    du koenntest den arduino auch ohne bootloader benutzen um etwas mehr platz zu verfuegung zu haben. Siehe http://www.arduino.cc/en/Hacking/Programmer

    Lg Till

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Wo der Platz vertrödelt wird, kann man nur nach einem Blick ins erzeugte Assembler genau zuordnen. In Deiner Funktion gibt's immerhin 12 C++-Funktionsaufrufe. Ein Teil des Platzes geht wohl auf Kappe von C++-Overhead.
    Disclaimer: none. Sue me.

Berechtigungen

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