From f1f836bdc79e7766509ba6c1b276fb6418bb5fc0 Mon Sep 17 00:00:00 2001 From: optixx Date: Mon, 10 Aug 2009 16:29:36 +0200 Subject: [PATCH] disable file write function and save 4kb progmem --- avr/usbload/fat.c | 3 ++- avr/usbload/fat.h | 4 ++-- avr/usbload/file.c | 18 ++++++++++++------ avr/usbload/testing.c | 6 ++++++ 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/avr/usbload/fat.c b/avr/usbload/fat.c index cc0fa2c..fd67355 100644 --- a/avr/usbload/fat.c +++ b/avr/usbload/fat.c @@ -4,7 +4,8 @@ #include "fat.h" #include "file.h" -#include "hardware.h" +#include "mmc.h" +#include "config.h" struct Fat fat; // wichtige daten/variablen der fat struct File file; // wichtige dateibezogene daten/variablen diff --git a/avr/usbload/fat.h b/avr/usbload/fat.h index d05aa3b..0074342 100644 --- a/avr/usbload/fat.h +++ b/avr/usbload/fat.h @@ -6,8 +6,8 @@ // ************************************************************************************************************************** // WICHTIGE SCHLATER: -> hier kann die code größe angepasst werden, zu lasten der funktionalität ! #define SMALL_FILE_SYSTEM 0 // wenn 1 dann ist kleines file system, wenn 0 dann komplette file unterstützung ! - #define WRITE 1 // wenn 1 dann ist write an, wenn 0 dann read only ! - #define OVER_WRITE 1 // wenn 1 dann kann ffwrite dateien überschreiben (nicht performant), wenn 0 dann nur normales schreiben ! + #define WRITE 0 // wenn 1 dann ist write an, wenn 0 dann read only ! + #define OVER_WRITE 0 // wenn 1 dann kann ffwrite dateien überschreiben (nicht performant), wenn 0 dann nur normales schreiben ! #define MAX_CLUSTERS_IN_ROW 256 // gibt an wie viele cluster am stück ohne fat lookup geschrieben bzw gelesen werden können, wenn die fat nicht fragmentiert ist ! // 1. fat_getFreeRowOfCluster -> fat_getFreeRowOfDir -> fat_makeRowDataEntry -> fat_makeFileEntry -> fat_writeSector "eintrag gemacht !!" diff --git a/avr/usbload/file.c b/avr/usbload/file.c index 4f56c04..c60ac71 100644 --- a/avr/usbload/file.c +++ b/avr/usbload/file.c @@ -2,11 +2,10 @@ #include #include -#include "hardware.h" +#include "mmc.h" #include "fat.h" #include "file.h" - - +#include "config.h" //******************************************************************************************************************************* // 2 möglichkeiten beim öffnen, datei existiert(return 1) oder muss angelegt werden(return 2) @@ -27,7 +26,6 @@ unsigned char ffopen(char name[]){ file.lastCluster=fat_secToClust(fat.endSectors); // letzter bekannter cluster der datei return 1; } - #if (WRITE==1) // anlegen ist schreiben ! else{ /** Datei existiert nicht, also anlegen ! (nur wenn schreiben option an ist)**/ fat_getFreeClustersInRow(2); // leere cluster suchen, ab cluster 2. @@ -43,7 +41,6 @@ unsigned char ffopen(char name[]){ #endif } - //******************************************************************************************************************************* // schließt die datei operation ab. eigentlich nur nötig wenn geschrieben wurde. es gibt 2 möglichkeiten : // 1. die datei wird geschlossen und es wurde über die alte datei länge hinaus geschrieben. @@ -72,6 +69,8 @@ unsigned char ffclose(void){ // füllt den aktuell beschriebenen sektor mit 0x00, da sonst die datei nicht richtig angezeigt wird. // darf nur während schreibe operationen aufgerufen werden ! // ******************************************************************************************************************************* +#if (WRITE==1) + void fileUpdate(void){ unsigned int comp_cntOfBytes=file.cntOfBytes; // sicher nötig wegen schleife... @@ -90,6 +89,8 @@ void fileUpdate(void){ fat_writeSector(fat.currentSectorNr); } +#endif + // ******************************************************************************************************************************* // offset byte wird übergeben. es wird durch die sektoren der datei gespult (gerechnet), bis der sektor mit dem offset byte erreicht @@ -97,10 +98,13 @@ void fileUpdate(void){ // die "vorgesucht" wurden, müssen noch weitere sektoren der datei gesucht werden (sec > fat.endSectors). // ******************************************************************************************************************************* void ffseek(unsigned long int offset){ + +#if (WRITE==1) #if (OVER_WRITE==1) // man muss den dateieintrag updaten, um die daten zu retten !! if( file.seek > file.length ) fileUpdate(); // fat verketten und datei update auf der karte ! #endif +#endif fat_getFatChainClustersInRow(file.firstCluster); // suchen von anfang der cluster chain aus ! unsigned long int sec=fat.startSectors; // sektor variable zum durchgehen durch die sektoren @@ -211,6 +215,8 @@ unsigned char ffcdLower(void){ // der "." hat den 1. cluster des eigenen dirs. der ".." eintrag ist der 1. cluster des parent dirs. // ein dir wird immer mit 0x00 initialisiert ! also alle einträge der sektoren des clusters ( bis auf . und .. einträge)! // ******************************************************************************************************************************* +#if (WRITE==1) + void ffmkdir(char name[]){ unsigned char i; @@ -240,7 +246,7 @@ void ffmkdir(char name[]){ fat_makeRowDataEntry(1,".. ",0x10,fat.dir,0); // macht ".." eintrag des dirs fat_writeSector(fat_clustToSec(file.firstCluster)); // schreibt einträge auf karte ! } - +#endif //WRITE #endif // ffmkdir wegen atmega8 #endif diff --git a/avr/usbload/testing.c b/avr/usbload/testing.c index d487679..0b7cd39 100644 --- a/avr/usbload/testing.c +++ b/avr/usbload/testing.c @@ -29,6 +29,7 @@ #include "sram.h" #include "debug.h" #include "crc.h" +#include "config.h" #include "info.h" #include "mmc.h" @@ -127,13 +128,18 @@ void test_sdcard(void){ ffls(); char datei[12]="test.txt"; // hier muss platz für 11 zeichen sein (8.3), da fat_str diesen string benutzt !! fat_str(datei); +#if (WRITE==1) ffrm( datei ); // löschen der datei/ordner falls vorhanden +#endif printf("open %s\n",datei); ffopen( datei ); +#if (WRITE==1) printf("write %s\n",datei); ffwrites((char*)"Hallo Datei :)"); ffwrite(0x0D); ffwrite(0x0A); +#endif + printf("close %s\n",datei); ffclose(); printf("open %s\n",datei);