Ich teste gerade was mit SD-Karten, funktioniert auch im Prinzip.
Programm soll eine Datei kopieren.
"buffer_sd" wird in der Subroutine offenbar nicht korrekt angelegt bzw.
wegoptimiert (-Os). "dstfile1.txt" ist 0 Byte lang.
Wenn ich buffer_sd static deklariere oder als globale Variable
vereinbare, klappt es.
Ist dieses Verhalten normal? Eigentlich müsste der Compiler/Linker doch
merken, dass buffer_sd verwendet wird. Oder habe ich was grundsätzliches
übersehen?
1
typedefunsignedcharBYTE;
2
3
...
4
5
// SDCARD
6
voidsdcard_test(void){
7
8
FATFSfs[1];/* Work area (file system object) for logical drives */
9
FILfsrc,fdst;/* file objects */
10
BYTEbuffer_sd[4096];/* file copy buffer */
11
FRESULTres;/* FatFs function common result code */
12
UINTbr,bw;/* File read/write count */
13
14
15
disk_initialize(0);
16
17
/* Register work area for each volume (Always succeeds regardless of disk status) */
buffer_sd wird auf dem Stack angelegt. Möglicherweise hat die Maschine
(welche auch immer) nicht genügend Stack. Der Linker sieht von dieser
Variablen jedenfalls nichts, für sie wird ja kein Symbol
angelegt/benötigt wenn sie nicht-statisch ist.
Ist sicher, daß f_open immer erfolgreich ist?
Ein Wegoptimiern von buffer_sd ist vorstellbar, wenn der Compiler die
Quelle von f_read und f_write zu sehen bekommt, was aber wohl nicht der
Fall ist?
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.