-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: String auf SD-Karte mit Drivewritesector()

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    06.08.2009
    Beiträge
    45

    String auf SD-Karte mit Drivewritesector()

    Anzeige

    Hallo,

    ich sitze jetzt schon einige Stunden vor dem PC und komme nicht weiter.
    Habe auch schon lange im Internet gesucht aber keine wirkliche Erklärung gefunden.
    Und zwar habe ich mehrere Messdaten in einem String zusammengefasst und würde diese gerne in einem
    Sektor auf der SD-Karte speichern.
    Doch wenn ich es richtig verstanden habe besteht der angelegte Buffer aus Bytes und lässt sich somit auch nur in dieser Form übertragen.
    Könnte mir diesbezüglich jemand einen Tipp geben wie ich mit dem Drivewritesector()-Befehl am besten einen String speichern kann?

    MfG Fabian

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Hi,

    du könntest den String Byteweise auf die Karte schreiben. Sprich du machst nen Zähler der für die Position im String ist. Dann schreibst du das Zeichen worausf der Zähler zeigt auf die Karte und erjöhst den Zähler um eins. Und dann machste das nochmal. Den ganzen Spaß wiederholst du solange bis du am Ende vom String bist.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    06.08.2009
    Beiträge
    45
    Ok aber ich glaube ich habe noch nicht so ganz die Funktionsweise von dem Befehl Drivewritesector verstanden.
    Kann man Byteweise die Karte beschreiben weil es wird doch immer gesagt, dass man nur vollständige Sektoren Schreiben kann?
    Codeausschnitt:
    ......
    Dim Berror As Byte
    Dim Buffer(512) As Byte 'SRAM-Bereich für Transfer
    Dim Wsrampoint As Word 'Adress-Pointer für die Drive.. Routinen
    Dim Lselectornumber As Long 'Variable für Sektor-Nummer
    Wsrampointer = Varptr(buffer(1))
    Lselectornumber =1
    .....
    Druck1 = Getadc(4)
    Druck2 = Getadc(5)
    Temperatur = Getadc(6)

    Messwerte_string = Gpgga + ";" + Str(druck1) + ";" + Str(druck2) + ";" + Str(temperatur) + "*"
    ......

    Ich glaube ich stehe gerade auf dem Schlauch.. Wie kann ich dann deine Idee mit ' Berror = Drivewritesector(wsrampoint , Lsectornumber)' umsetzen?

    Danke für die schnelle antwort

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Laut der Hilfe schreibst du mit dem Befehl bis zu 512 Bytes in einen Sektor:

    Write a Sector (512 Bytes) to the (Compact Flashcard) Drive
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    06.08.2009
    Beiträge
    45
    Okay hab ich anscheinend überlesen....
    Aber wo wird bei dem Befehl definiert was ich jetzt eigentlich speichere?
    in meinem Fall gibt doch Berror einen Wert zurück, ob das Schreiben funktioniert hat, wsrampoint die Adresse von wo und Lsectornumber in welchen Sektor ich es schrieben will.
    oder wird mit wsrampoint automatisch das byte an dieser Stelle übertragen?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Fabian,
    ich habe das einfach so gemacht:
    Code:
    Dim Berror As Byte
    Dim Buffer(512) As Byte 'SRAM-Bereich für Transfer
    Dim Messwerte_string * 512 as string at Buffer(1) overlay
    Dim Wsrampoint As Word 'Adress-Pointer für die Drive.. Routinen
    Dim Lselectornumber As Long 'Variable für Sektor-Nummer
    Wsrampointer = Varptr(buffer(1))
    Lselectornumber =1
    .....
    Druck1 = Getadc(4)
    Druck2 = Getadc(5)
    Temperatur = Getadc(6)
    Messwerte_string = Gpgga + ";" + Str(druck1) + ";" + Str(druck2) + ";" + Str(temperatur) + "*"
    Berror = DriveWriteSector(Wsrampointer,Lselectornumber)
    Du schreibst in den String, durch das Overlay aber gleichzeitig auch in das Byte-Array Buffer.
    Der DriveWriteSector Befehl schreibt immer die nächsten 512 Byte ab der angegebenen Adresse auf die SD Karte.
    Beachte, dass du die Karte mit Windows nicht mehr lesen kannst, wenn du auf den Sektor 1 schreibst.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    09.03.2012
    Beiträge
    51
    Zitat Zitat von for_ro Beitrag anzeigen
    Der DriveWriteSector Befehl schreibt immer die nächsten 512 Byte ab der angegebenen Adresse auf die SD Karte.
    Beachte, dass du die Karte mit Windows nicht mehr lesen kannst, wenn du auf den Sektor 1 schreibst.
    Hallo!
    Grundsätzlich ist es bei SD-Karten möglich, innerhalb eines Sektors Schritt für Schritt zu schreiben - jedes Byte immer dann, wenn es vom Messgerät eingelesen wird. Wahrscheinlich geht das aber nicht mit den üblichen Prozeduren.
    Ich wollt nur auf die Möglichkeit hinweisen, weil ist so etwas schon einmal gemacht habe. Dadurch kann man auch mit Mikrocontrollern mit wenig Speicher (z.B. ATtiny25) auf SD-Karten schreiben.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    06.08.2009
    Beiträge
    45
    Danke for_ro,
    Genau das habe ich gesucht
    Hatte auch noch dummer Weis eine Variable falsch geschrieben... aber jetzt funktioniert es
    Hatte gedacht in Sektor 0 stehen die wichtigen Daten die man nicht verändern darf aber in Sektor 1 darf man doch schon etwas schreiben oder?

    Fabian

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von Fabian1995 Beitrag anzeigen
    Hatte gedacht in Sektor 0 stehen die wichtigen Daten die man nicht verändern darf aber in Sektor 1 darf man doch schon etwas schreiben oder?
    Wenn du die Karte mit Windows lesen willst, dann kannst du sehr viele Sektoren am Beginn der Karte nicht benutzen.
    Wieviele hängt wohl auch von der Größe der Karte und der Art der FAT ab.
    Ich hatte damals eine Karte frisch formatiert und dann einen File mit bekanntem Inhalt (1234567890123456...) draufgeschrieben. Der steht dann auf dem ersten verwendbaren Sektor. Mit dem µC habe ich dann über DriveReadSector diesen Sektor gesucht.
    Bei meiner 1GB Karte war es der Sektor 768.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von for_ro Beitrag anzeigen
    Code:
    Dim Buffer(512) As Byte 'SRAM-Bereich für Transfer
    Dim Messwerte_string * 512 as string at Buffer(1) overlay
    Man kann keinen String mit einer Länge von 512 Zeichen über ein 512 Byte Array legen, denn der String benötigt tatsächlich 512 Zeichen + 1 Endbyte. Wenn der String tatsächlich mal 512 Byte lang ist, wird die dem Array folgende Variable zerstört, hier Wsrampoint, mit unbestimmten Folgen. Auch fehlt dem String, sollte er überhaupt korrekt geschrieben werden, auf der SD-Karte das Endzeichen. Das kann dann bei der Weiterverarbeitung zu Problemen führen. Also den String nur 511 Zeichen lang dimensionieren.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Chr(0) im String
    Von Furtion im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 28.11.2008, 11:37
  2. string an lcd senden, string in pointer speichern
    Von andi.studi im Forum PIC Controller
    Antworten: 15
    Letzter Beitrag: 14.08.2008, 00:51
  3. String auf String zuweisen geht nicht
    Von Jaecko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.12.2006, 18:48
  4. Sim-Karte
    Von Speed im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 2
    Letzter Beitrag: 18.11.2006, 12:51
  5. SD-Karte oder CF-Karte?
    Von Johannes G. im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 22.08.2006, 13:28

Stichworte

Berechtigungen

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