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


von Micha (Gast)


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):
1
 
2
    ...
3
4
    xil_printf("-- Writing test.bmp ...\r\n");
5
    
6
    hFile = sysace_fopen("a:\\test.bmp", "w");
7
    
8
    if (hFile == 0) {
9
        xil_printf("error opening file\r\n");
10
    }
11
    else {
12
        xil_printf("file opened\r\n");
13
    }
14
    
15
    error = sysace_fwrite(headerBuffer, 1, 54, hFile);
16
    
17
    if (error == 0) {
18
        xil_printf("error writing header\r\n");
19
    }
20
    else {
21
        xil_printf("header written: %d\r\n", error);
22
    }
23
    xil_printf("- writing random data");
24
        
25
    for (i = 0; i < 19200; i++) {
26
        if (i % 48 == 0) {
27
            xil_printf("\r\n [ %d ]", i);
28
        }
29
        tmp = rand() % 255;
30
        xil_printf(" %x", tmp);
31
        error = sysace_fwrite(tmp, 1, 1, hFile);
32
        if (error == 0) {
33
            xil_printf("\r\n -- error writing data: %d --\r\n", i);
34
        }
35
    }
36
    
37
    xil_printf("data written\r\n");
38
39
    ...

Die minicom Ausgabe dieht so aus:
1
-- Entering main() --
2
file opened for reading
3
header: 54
4
file closed
5
-- Writing test.bmp ...
6
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

von Micha (Gast)


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

von Micha (Gast)


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:
1
  for (i = 0; i < 192; i += 4) {
2
    if (i % 48 == 0) {
3
      xil_printf("\r\n [ %d ]", i);
4
    }
5
    tmp[0] = rand() % 255;
6
    tmp[1] = rand() % 255;
7
    tmp[2] = rand() % 255;
8
    tmp[3] = rand() % 255;
9
    xil_printf(" %x %x %x %x", tmp[0], tmp[1], tmp[2], tmp[3]);
10
    error = sysace_fwrite(tmp, 1, 4, hFile);
11
    if (error < 1) {
12
      xil_printf("\r\n -- error writing data: %d --\r\n", i);
13
    }
14
  }

Die restlichen Probleme bleiben.

Viele Grüße, Micha

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.