mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilinx virtex2p: xilfatfs Datei schreiben


Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite momentan mit einem Xilinx ML 310 Board mit Virtex 2 Pro 
FPGA. In meinem Software Teil möchte ich eine BMP Datei mittels der 
Biliothek "xilfatfs" auf die Compact Flash Karte schreiben. Problem ist 
dabei aber, dass die Software immer hängen bleibt, wenn ich versuche 
Daten zu schreiben. Bis vorgestern konnte ich noch die 54 Byte BMP 
Header und 1994 weitere Byte schreiben, bis sich das Programm 
aufgehangen hat (kleine BMP Datein konnte ich also vollständig und ohne 
Probleme schreiben). Heute wird nicht mal das erste Byte geschrieben. 
Jemand eine Idee, woran das liegen kann? Ich arbeite mit ISE 9.1 SP 3 
und EDK 9.1 SP 2. Hier noch der C Code (ich will erst mal nur zufällige 
Daten schreiben. Die Header Daten habe ich aus einer anderen BMP Datei):
 
    ...

    xil_printf("-- Writing test.bmp ...\r\n");
    
    hFile = sysace_fopen("a:\\test.bmp", "w");
    
    if (hFile == 0) {
        xil_printf("error opening file\r\n");
    }
    else {
        xil_printf("file opened\r\n");
    }
    
    error = sysace_fwrite(headerBuffer, 1, 54, hFile);
    
    if (error == 0) {
        xil_printf("error writing header\r\n");
    }
    else {
        xil_printf("header written: %d\r\n", error);
    }
    xil_printf("- writing random data");
        
    for (i = 0; i < 19200; i++) {
        if (i % 48 == 0) {
            xil_printf("\r\n [ %d ]", i);
        }
        tmp = rand() % 255;
        xil_printf(" %x", tmp);
        error = sysace_fwrite(tmp, 1, 1, hFile);
        if (error == 0) {
            xil_printf("\r\n -- error writing data: %d --\r\n", i);
        }
    }
    
    xil_printf("data written\r\n");

    ...

Die minicom Ausgabe dieht so aus:
-- Entering main() --
file opened for reading
header: 54
file closed
-- Writing test.bmp ...
file opened

Alles über "-- Writing test.bmp ..." steht weiter ober im Programm ist 
aber meiner Meinung nach nicht wichtig. Falls jemand das komplette 
Programm sehen möchte, dann reich ich das gerne nach.

Danke im Voraus und viele Grüße,
Micha

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin jetzt wieder auf Anfang. Das Schreiben der Datei funktioniert erst 
mal wieder, aber immernoch nur der Header und die weiteren 1994 Byte. 
Ich hab jetzt erstmal versucht kleinere Dateien zu schreiben und bin 
dabei wieder auf zwei neue Probleme gestoßen:

1. Wenn die Datei geschrieben ist und ich sie mir im Hex Editor 
anschaue, dann ist der Header ordnungsgemäß geschrieben, alle weiteren 
Byte sind aber immer 0x00.

2. Wenn ich versuche zwei Dateien nacheinander zu schreiben, dann hängt 
sich das Programm sofort auf, wenn das erste Byte der zweiten Datei 
geschrieben werden soll.

Irgendwelche Ideen?

Viele Grüße, Micha

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ein Problem habe ich gelöst. Wenn ich die for-Schleife auf diese Art 
abändere (und die entsprechende Deklaration von "tmp"), dann werden auch 
die zufälligen Daten in die BMP Datei geschrieben und ich habe ein 
schönes buntes Bild:
  for (i = 0; i < 192; i += 4) {
    if (i % 48 == 0) {
      xil_printf("\r\n [ %d ]", i);
    }
    tmp[0] = rand() % 255;
    tmp[1] = rand() % 255;
    tmp[2] = rand() % 255;
    tmp[3] = rand() % 255;
    xil_printf(" %x %x %x %x", tmp[0], tmp[1], tmp[2], tmp[3]);
    error = sysace_fwrite(tmp, 1, 4, hFile);
    if (error < 1) {
      xil_printf("\r\n -- error writing data: %d --\r\n", i);
    }
  }

Die restlichen Probleme bleiben.

Viele Grüße, Micha

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.