test µSD

Dependencies:   SD_DISCO_F469NI BSP_DISCO_F469NI BD_SD_DISCO_F469NI USBHOST

main.cpp

Committer:
bouaziz
Date:
2019-02-20
Revision:
6:f3337d7c598a
Parent:
5:5c29a3f6600b

File content as of revision 6:f3337d7c598a:

/*
 * Mbed Application program
 *  SD Card file control function with FatFs on Mbed-os5
 *
 * Copyright (c) 2018 Kenji Arai / JH1PJL
 *  http://www.page.sannet.ne.jp/kenjia/index.html
 *  https://os.mbed.com/users/kenjiArai/
 *      Created:    April      7th, 2018
 *      Revised:    April     30th, 2018
 */

//  Include --------------------------------------------------------------------
#include    "mbed.h"
//#include "USBHostMSD.h"
#include    "FATFileSystem.h"
#include    "SDBlockDeviceDISCOF469NI.h"
//#include    "mon.h"
#include    <stdlib.h>
#include    <stdio.h>
#include    <errno.h>

//  Definition -----------------------------------------------------------------
#define     USER_SW_ON      1

//  Constructor ----------------------------------------------------------------
DigitalOut      led(LED1);
DigitalOut led_orange(LED2);
DigitalOut led_red(LED3);
DigitalOut led_blue(LED4);
DigitalIn       user_sw(USER_BUTTON);
Serial          uart(USBTX, USBRX);
// Instantiate the Block Device for sd card on DISCO-F469NI
SDBlockDeviceDISCOF469NI bd;
//USBHostMSD msd;
FATFileSystem   fs("fs");
Timer tic;

//  RAM ------------------------------------------------------------------------

//  ROM / Constant data --------------------------------------------------------
char *const opening_msg0 = "microSD Card test program";
char *const opening_msg1 = " -> run on Mbed OS-5\r\n";

//  Function prototypes --------------------------------------------------------
void return_error (int ret_val);
void errno_error (void* ret_val);

//------------------------------------------------------------------------------
//  Control Program
//------------------------------------------------------------------------------
/*int main()
{
    time_t      seconds;
    uint32_t data0 = 10000U;

    if (user_sw == USER_SW_ON) {
   //     mon();
            uart.printf("Start BUTTON ON\r\n");
            
    }
    //pc.printf("line:%d\r\n", __LINE__);
    uart.printf("\r\nStart\r\n");
    int error = 0;
    error = fs.mount(&bd);
    return_error(error);
/*
    FILE* fp = fopen("/fs/test.txt", "w");
    errno_error(fp);
    if (fp != 0) {
        pc.printf("OPEN : %s%s",  opening_msg0, opening_msg1);
        fprintf(fp,"OPEN : %s%s", opening_msg0, opening_msg1);
    } else {
        pc.printf("ERROR\r\n");
    }
    fclose(fp);
 */
  
 //       uint32_t size = get_disk_freespace();
 //           seconds = time(NULL);
 //           strftime(tmp, 64, "DATE %H:%M:%S,%Y/%m/%d,", localtime(&seconds));
 /*   while(true) {
        mon();
        NVIC_SystemReset();
    }*/
/*    pc.printf("terminé\r\n");
    while(1);
}*/

void return_error (int ret_val)
{
    if (ret_val) {
        uart.printf("retrun error/Failure. %d\r\n", ret_val);
    }
}

void errno_error (void* ret_val)
{
    if (ret_val == NULL) {
        uart.printf("error #/Failure. %d \r\n", errno);
    }
}


unsigned int count=0,val1,val2;
char tmess[]="/fs/test1.txt";
    unsigned int  index;
#define TAILLEMAX (4096*4)
#define ITER 50000
unsigned flag;
unsigned char tabf[TAILLEMAX+1];

unsigned int tstat[20000];
unsigned int cal1,cal2;
double ff;
unsigned long vdebut,vfin;
int main(){
unsigned int max=0,min=200000000;
int retour;
led=1;
led_orange=1;
led_red=1;
led_blue=1;
 int error = 0;
    //led4=1;
    uart.printf("TEST\r\n");
    led_red=0;
     wait(0.1);
 /*   while(!msd.connect()) {
            wait(0.500);
    }*/
    led_red=1;    
    error = fs.mount(&bd);//bd);
    return_error(error);
    wait(0.1);
    FILE *fp = fopen(tmess, "w");
     errno_error(fp);
    if(fp==0){
  //      led1=1;
  //      led2=1;
 //       led4=0;
        uart.printf("erreur ouverture fichier\r\n");
        while(1);
    }
    uart.printf("DEBUT TEST\r\n");
    tic.reset();
    tic.start();
 //   tc1.attach(&per,0.001);
 vdebut=tic.read_us();
    while(count<ITER){
           // if(flag>0){
                            led=0;
               //     flag--;
                    val1= tic.read_us();
                    *((unsigned int*)tabf)=val1;
                 *((unsigned int*)(tabf+12))=0;
                    fwrite(tabf,1,TAILLEMAX,fp);
                 *((unsigned int*)(tabf+16))=0;
                  val2=tic.read_us();
                  cal1=val2-val1;
                    *((unsigned int*)(tabf+4))=val2;
                    *((unsigned int*)(tabf+8))=cal1;
                    //uart.printf("max = %u   min=%u    flag=%u\n",max,min,flag);
                    if(cal1>max){
                                max=cal1;
                    }
                    if(cal1<min){
                                min=cal1;
                    }
                    cal1 = (cal1+50)/100;
                    if(cal1>19999) cal1=19999;
                    tstat[cal1]=tstat[cal1]+1;
                    count++;
                    led=1;
                    wait(0.003);
                    //led3=0;
            //}
    } 
    vfin=tic.read_us();      
    fclose(fp);
    fp=fopen("/fs/fin.txt","w");
    if(fp==0){
  //      led1=1;
  //      led2=1;
 //       led4=0;
          uart.printf("erreur ouverture fichier STAT\r\n");
          while(1);
    }
    for(cal2=0;cal2<20000;cal2++){
            if(tstat[cal2]!=0){
                    ff=ff+ (cal2/10.)*(tstat[cal2]/(double)ITER);
                    fprintf(fp,"%u\t%u\r\n",cal2,tstat[cal2]);
            }
    }
   
   
    fprintf(fp,"max = %u   min=%u    moyenne=%u   tempstotal(ms)=%u\r\n",max,min,(unsigned)(ff*1000),(vfin-vdebut)/1000);
    fclose(fp);
   // led4=1; 
    uart.printf("max = %u   min=%u    moyenne=%u   tempsmanip(H)=%f\r\n",max,min,(unsigned)(ff*1000),(((vfin-vdebut)/1000000.)+1)/3600.);
    while(1);
}