MDX-20用の改造
Dependencies: FatFileSystemCpp
Revision 9:280ae971e7cb, committed 2018-10-14
- Comitter:
- suupen
- Date:
- Sun Oct 14 09:39:45 2018 +0000
- Parent:
- 8:6e23bf867e38
- Child:
- 10:cce9366e2d73
- Commit message:
- usbMemory.cpp???????????????
Changed in this revision
MSCFileSystem.cpp | Show annotated file Show diff for this revision Revisions of this file |
usbMemory.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/MSCFileSystem.cpp Sun Dec 18 08:29:59 2016 +0000 +++ b/MSCFileSystem.cpp Sun Oct 14 09:39:45 2018 +0000 @@ -18,7 +18,7 @@ * PRINT CONFIGURATION ************************************************************************************************************** */ -#define DEBUG +//#define DEBUG #ifdef DEBUG #define DEBUG_PRINT(...) printf(__VA_ARGS__) #else
--- a/usbMemory.cpp Sun Dec 18 08:29:59 2016 +0000 +++ b/usbMemory.cpp Sun Oct 14 09:39:45 2018 +0000 @@ -101,7 +101,7 @@ if ( fp != NULL ) { char buf[256]; while ( NULL != fgets(buf, sizeof(buf), fp) ) { - DEBUG_PRINT("%s", buf); + // DEBUG_PRINT("%s", buf); numMax++; } *numberLine = numMax; @@ -122,16 +122,75 @@ * @param dataNumber : *dataのbyte数 * @param numberLine : 取得する行数 * @return false:失敗 true:成功 + * + * 181014 数万行になると読み込みが遅くなるのでtempNumber行分バッファし、毎回指定行まで空回りさせないようにする */ uint32_t fileOneLineRead(char *fileName, char *data, int32_t dataNumber, int32_t numberLine) { // static FILE *fp; + uint32_t i; int32_t ans = false; + +#define tempNumber 600 +#define tempSize 30 + static char temp[tempNumber][tempSize]; // tempNumber行分のデータをバッファしておく + static uint32_t tempLineStartNo = 0; // tempの先頭行番号 + static int32_t tempCheck = -1; // tempにデータがあるか判別 -1:なし それ以外あり + #define bufferNumber 100 char buffer[bufferNumber]; - sprintf(buffer,"/msc/%s",fileName); + + + if (((numberLine / tempNumber) == (tempLineStartNo / tempNumber)) && (tempCheck != -1)){ + // tempにデータがあればそこから取り出す + strcpy(data, &temp[numberLine % tempNumber][0]); + ans = true; + DEBUG_PRINT("temp numberLine = %d, tempNumber = %d\r\n",numberLine, (tempLineStartNo / tempNumber)); + } + else{ + // tempにデータがなければUSBから取り出し、tempにも保存する + sprintf(buffer,"/msc/%s",fileName); + fp = fopen( buffer, "r"); + if ( fp != NULL ) { + tempLineStartNo = (numberLine /tempNumber) * tempNumber; + + // 目的の行まで空回し + for(i = 0; i < ((numberLine / tempNumber) * tempNumber) ; i++) { + fgets(buffer, sizeof(buffer), fp); + } + // 目的の行からtempに保管していく + for(i = 0; i < tempNumber ; i++) { + if(NULL != fgets(&temp[i][0], tempSize, fp)){ + tempCheck = 1; + } + else { + // fileにデータがなければ強制終了 + break; + //i = tempNumber; + } + } + + // fileから取り出した回もtempからデータを取得 + if((numberLine % tempNumber) <= i){ + strcpy(data, &temp[numberLine % tempNumber][0]); + ans = true; + DEBUG_PRINT("temp = %d\r\n",numberLine % tempNumber); + } + else{ + // nothing + } + + } else { + // Don't file open + // nothing + } + fclose(fp); + + } + +/* 181014変更前 fp = fopen( buffer, "r"); if ( fp != NULL ) { for(uint32_t i = 0; i < numberLine; i++) { @@ -150,6 +209,8 @@ } fclose(fp); +181014変更前 */ + return ans; }