-         

Ergebnis 1 bis 7 von 7

Thema: Findet den Fehler

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49

    Findet den Fehler

    Anzeige

    Hallo,

    ich habe schon einige Erfahrungen mit C++ und dem Arduino aber ich finde den Fehler nicht wieso das hier nicht funktioniert
    Code:
    void loop()
    {
      
      Serial.print("Initializing SD card...");
      // make sure that the default chip select pin is set to
      // output, even if you don't use it:
        // see if the card is present and can be initialized:
      if (!SD.begin(chipSelect)) {
        Serial.println("Card failed, or not present");
        // don't do anything more:
        return;
      }
      Serial.println("card initialized.");
      
      
      // make a string for assembling the data to log:
      String dataString = "";
    
      // read three sensors and append to the string:
      for (int analogPin = 0; analogPin < 3; analogPin++) {
        int sensor = analogRead(analogPin);
        dataString += String(sensor);
        if (analogPin < 2) {
          dataString += ",";
        }
      }
    
      // open the file. note that only one file can be open at a time,
      // so you have to close this one before opening another.
      File dataFile = SD.open("datalog.txt", FILE_WRITE);
    
      // if the file is available, write to it:
      if (dataFile) {
        dataFile.println(dataString);
        dataFile.close();
        // print to the serial port too:
        Serial.println(dataString);
      }
      // if the file isn't open, pop up an error:
      else {
        Serial.println("error opening datalog.txt");
      }
    }

    und das hier schon
    Code:
    void setup()
    {
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
    
    
      pinMode(10, OUTPUT);
      
      Serial.print("Initializing SD card...");
      // make sure that the default chip select pin is set to
      // output, even if you don't use it:
        // see if the card is present and can be initialized:
      if (!SD.begin(chipSelect)) {
        Serial.println("Card failed, or not present");
        // don't do anything more:
        return;
      }
      Serial.println("card initialized.");
      
      
    
    }
    
    void loop()
    {
      
      
      // make a string for assembling the data to log:
      String dataString = "";
    
      // read three sensors and append to the string:
      for (int analogPin = 0; analogPin < 3; analogPin++) {
        int sensor = analogRead(analogPin);
        dataString += String(sensor);
        if (analogPin < 2) {
          dataString += ",";
        }
      }
    
      // open the file. note that only one file can be open at a time,
      // so you have to close this one before opening another.
      File dataFile = SD.open("datalog.txt", FILE_WRITE);
    
      // if the file is available, write to it:
      if (dataFile) {
        dataFile.println(dataString);
        dataFile.close();
        // print to the serial port too:
        Serial.println(dataString);
      }
      // if the file isn't open, pop up an error:
      else {
        Serial.println("error opening datalog.txt");
      }
    }
    Im Quellcode finde ich auch keinen zusammenhang.

    Vill erkennt hier jemand auf die schnell das Problem...


    Gruß

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    Manchmal sieht man den Wald vor lauter Bäumen nicht.... den Fehler daran hab ich gefunden!!!


    Was anderes, ich schreibe gerade an einem Datenlogger der Laufzeitdaten aus einem Steuergerät kopiert (ca 106 Byte ,Serial ) , einen RTC und SD Karte verwaltet und dabei noch ein kleines Menü am TFT ausgibt ...
    Jetzt gibt der Compiler schon jedes mal die Meldung "Low memory available, stability problems may occur." aus weil ich bisher ca 87% des dynamischen Speichers verbraten hab. Der Dynamische Speicher ist doch der SRAM oder ?
    Kann ich wenigstens Teile davon auslagen ?
    Bisher hatte ich noch nie das Problem das mein UNO Speicher Probleme bekommt,daher kenne ich bisher keine Abhilfe.

    Das Programm ist bisher schon 20kbytes groß und wird sicher noch um 5-8kbytes wachsen.

    Die lib die ich bisher benütze sind...

    #include <AltSoftSerial.h>
    #include <SPI.h>
    #include <SD.h>
    #include "RTClib.h"
    #include <Wire.h>

    Ich bin mir nicht sicher ob es vill an meinem Code liegt ,ich hab jetzt immer öfter Probleme mit der Seriellen Kommunikation Probleme. Mir kommt es so vor das wenn ich den Code stark um lib s und Zeilen erleichtere das es besser wird.

    Gruß

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von jok3r Beitrag anzeigen
    Hallo,

    ich habe schon einige Erfahrungen mit C++ und dem Arduino aber ich finde den Fehler nicht wieso das hier nicht funktioniert
    ...

    Im Quellcode finde ich auch keinen zusammenhang.

    Vill erkennt hier jemand auf die schnell das Problem...


    Gruß
    Du hast es schon selbst gefunden, ... aber nein! Keine Ahnung auf erster Sicht. Und nun immer noch nicht, aber du schon. (Hint!) Es wurde netter sein wenn du uns am Anfang ein Eingrenzung von das Problem gegeben hatte. Was sind die Symptomen woraus du zu der Meinung gekommen bist das etwas fehlt? Fehler-meldungen? Ich sehe nur Code. Und nicht alles davon. (Die erste Code hat kein Setup) Erwartest du das ich das Kompiliere ohne zu wissen welcher Bibliotheken ich dazu benötige?

  4. #4
    Unregistriert
    Gast
    Nett das du antwortest aber dieses Thema ist abgeschlossen!!!

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von jok3r Beitrag anzeigen
    Was anderes, ich schreibe gerade an einem Datenlogger der Laufzeitdaten aus einem Steuergerät kopiert (ca 106 Byte ,Serial ) , einen RTC und SD Karte verwaltet und dabei noch ein kleines Menü am TFT ausgibt ...
    Jetzt gibt der Compiler schon jedes mal die Meldung "Low memory available, stability problems may occur." aus weil ich bisher ca 87% des dynamischen Speichers verbraten hab.Kann ich wenigstens Teile davon auslagen ?
    Bisher hatte ich noch nie das Problem das mein UNO Speicher Probleme bekommt,daher kenne ich bisher keine Abhilfe.
    Dein RAM wird in 3 Teile aufgeteilt:
    1. Platz für statische Variablen.
    2. Stack. Auf dem Stack werden alle automatischen Variablen und die Parameter bei einem Funktionsaufruf abgelegt. Hinzu kommen noch die Rücksprung-Adressen bei Funktionsaufrufen und die Interrupts benötigen auch noch Platz auf dem Stack.
    3. Heap. In C wird der Heap mit alloc() und Free() verwaltet in C++ meistens mit new und free.

    Besonders der Stackbereich kann Probleme machen, wenn dieser überläuft, dann überschreibt er meistens einen der anderen beiden Bereiche.

    Deine Bibliotheken benötigen auch entsprechenden Platz im RAM.

    Das dies alles ins RAM passt, ist eine der Aufgaben der Programmierers.

    Wie das aufgeteilt ist, verrät dir teilweise das Listing des Linkers.
    Wie viel dynamischen Platz der Stack belegt, kannst du mit dem Debugger herausfinden.

    Zitat Zitat von jok3r Beitrag anzeigen
    Der Dynamische Speicher ist doch der SRAM oder ?
    Es gibt zwei Arten von dynamischem RAM:
    1. Hardware: Hier bezeichnet es den Aufbau der Speicherzellen. Bei dynamischem RAM werden die Bits im Prinzip in Kondensatoren gespeichert. Da sich die Kondensatoren mit der Zeit entladen, muss die Information dauernd gelesen und neu gespeichert werden.
    2. Programmtechnik: Wie oben beschrieben, z.B. der Heap. Das Programm kann zur Laufzeit einen Speicherblock anfordern und diesen dann benutzen. Braucht es diesen nicht mehr, gibt es ihn an den Heap zurück. Fordert das Programm erneut einen Block an, bekommt es einfach den nächsten passenden freien Block zugeteilt. Der Vorteil liegt einerseits darin, dass man beim Schreiben des Programms, noch nicht wissen muss, wie gross der Datenblock sein muss, das muss man erst bei der Anfrage an den Heap wissen. Andererseits kann man so das RAM besser ausnutzen, indem das RAM nur solange belegt wird, wie dieser Speicherblock auch benötigt wird.


    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von Unregistriert Beitrag anzeigen
    Nett das du antwortest aber dieses Thema ist abgeschlossen!!!
    Und wir möchten auch gern davon lernen.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.09.2013
    Beiträge
    49
    Danke für deine Antwort, ich habe mich damit den restlichen Abend noch beschäftigt um habe den SRAM um 20% mit dem F() macro und PROGMEM erleichtert.
    Das war aber wohl ein typischer fall von leistung gegen Stabilität.....

    Wieviel % sollte man dem Prozessor zum arbeiten im SRAM lassen vor allem wenn man in jedem Zyklus 106 Byte empfangen will ? Kann ich den abfragen wie weit er ausgelastet wird ?

    Mich nervt der Arduino Compiler eigentlich schon sehr, daher wäge ich es ab ob ich nicht auf ATMEL Studio oder Codeblocks ( damit hab ich schon erfahrungen) umsteigen sollte. Gibt es im allgemeinen gebrauch von Microcontroller diese Setup Funktion auch, oder hat das nur der Arduino?

    Setup wird doch zum einmaligen Aufruf oder zur Deklaration gebraucht
    das kann man doch auch mit

    #if (!test) then
    test ;
    #endif;

    vergleichen oder ?

    Gruß

Ähnliche Themen

  1. Ausuro sucht solange bis er den Durchgang findet...
    Von Thund3r im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 10.01.2009, 14:08
  2. Compiler findet i bewährt Deklarationen neue Fehler (gelöst)
    Von oberallgeier im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 22.10.2008, 15:25
  3. (Problem gelöst, DANKE)sehe den Fehler nicht
    Von jar im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.04.2007, 20:11
  4. Wer findet den Programmfehler? ..
    Von Lenox im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 25.02.2007, 14:03
  5. Wer findet den Trick??
    Von Roboter n00b im Forum Kopfnüsse / Wissensquiz
    Antworten: 10
    Letzter Beitrag: 07.07.2005, 00:00

Berechtigungen

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