Shimmer2r записывает SD-карту FR_DISK_ERROR на FatFs.fopen - PullRequest
0 голосов
/ 18 февраля 2020

Я использую Shimmer 2r и мне нужно писать на SD-карту, используя TinyOs и FatFS.

Это мой файл TestSD_ C .ns:

#define NEW_PRINTF_SEMANTICS
#include "printf.h"
#include "FatFs.h"

configuration TestSD_C {
}

implementation {
  components MainC, TestSD_P;
  TestSD_P -> MainC.Boot;

  components FatFsP, diskIOC;
  TestSD_P.FatFs     -> FatFsP;
  FatFsP.diskIO             -> diskIOC;
  FatFsP.diskIOStdControl   -> diskIOC;

  components new TimerMilliC() as Timer;
  TestSD_P.Timer -> Timer;

  components PrintfC, SerialStartC;
}

Это мой файл SDTest_P.ns:

#include "FatFs.h"
#include "Timer.h"
#include "printf.h"


module TestSD_P {
  uses {
    interface Boot;
    interface FatFs;
    interface Timer<TMilli> as Timer;
  }
}

implementation{

  FATFS fs;
  FIL fp;

  uint8_t mount;
  uint8_t open;


  void printError(uint8_t resWrite);

  event void Boot.booted() {
    call Timer.startPeriodic( 1000 );
    mount = call FatFs.mount(&fs);
    open = call FatFs.fopen(&fp, "test.txt", (FA_CREATE_ALWAYS | FA_WRITE | FA_READ));

  }

  event void Timer.fired(){
    open = call FatFs.fopen(&fp, "test.txt", (FA_CREATE_ALWAYS | FA_WRITE | FA_READ));
    printf("Mount: ");
    printError(mount);
    printf("   Open: ");
    printError(open);
    printf("\n");
    printfflush();

  }

  async event void FatFs.mediaAvailable() {}

  async event void FatFs.mediaUnavailable() {}

  void printError(uint8_t resWrite){

    if( resWrite == FR_OK )
        printf( "OK" );

    else if( resWrite == FR_INT_ERR )
        printf( "FR_INT_ERR" );

    else if( resWrite == FR_NOT_READY )
        printf( "FR_NOT_READY" );

    else if( resWrite == FR_INT_ERR )
        printf( "FR_INT_ERR" );

    else if( resWrite == FR_NO_FILE )
        printf( "FR_NO_FILE" );

    else if( resWrite == FR_INT_ERR )
        printf( "FR_INT_ERR" );

    else if( resWrite == FR_INVALID_NAME )
        printf( "FR_INVALID_NAME" );

    else if( resWrite == FR_DENIED )
        printf( "FR_DENIED" );

    else if( resWrite == FR_WRITE_PROTECTED )
        printf( "FR_WRITE_PROTECTED" );

    else if( resWrite == FR_INVALID_OBJECT )
        printf( "FR_INVALID_OBJECT" );

    else if( resWrite == FR_TIMEOUT )
        printf( "FR_TIMEOUT" );

    else if( resWrite == FR_DISK_ERR )
        printf( "FR_DISK_ERR" );

    else
        printf( "ALTRO" );
}                                                                   

}

Я всегда получаю FR_DISK_ERROR, когда пытаюсь открыть файл; и если это существует, и если это не так. Я пытался отформатировать SD: ничего не изменилось. Я пытался использовать:

  /* Format the default drive with default parameters */
res = call FatFs.mkfs("", 0, work, sizeof work);
printError(res);
res = call FatFs.mount(&fs, "", 0);
printError(res);

, но компилятор сообщает:

TestSD_P.nc:41: too many arguments to function `FatFs.mkfs'
TestSD_P.nc:45: too many arguments to function `FatFs.mount'

Как я могу устранить ошибку?

...