ايران ويج

نسخه‌ی کامل: mmc
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
چطوری میشه یه متغیر رو در فایل text ذخیره کرد
اگه میشه با C
این برنامه ای که من نوشتم اما کار نمیکنه
کد:
#include <mega128.h>

#include <ff.h>
#include <stdio.h>
#include <string.h>
#include <delay.h>
#include <stdlib.h>
/* Timer1 overflow interrupt frequency [Hz] */
#define T1_OVF_FREQ 100
/* Timer1 clock prescaler value */
#define T1_PRESC 1024L
/* Timer1 initialization value after overflow */
#define T1_INIT (0x10000L-(_MCU_CLOCK_FREQUENCY_/(T1_PRESC*T1_OVF_FREQ)))


/* USART Baud rate */
#define BAUD_RATE 19200
#define BAUD_INIT (_MCU_CLOCK_FREQUENCY_/(BAUD_RATE*16L)-1)

unsigned int nbytes;

FIL file;

unsigned char s_text[];
char path3[]="0:/Temp.txt";


/* 100Hz timer interrupt generated by ATmega128 Timer1 overflow */
interrupt [TIM1_OVF] void timer_comp_isr(void)
{
/* re-initialize Timer1 */
TCNT1H=T1_INIT>>8;
TCNT1L=T1_INIT&0xFF;
/* MMC/SD/SD HC card access low level timing function */
disk_timerproc();
}


/* error message list */
flash char * flash error_msg[]=
{
"", /* not used */
"FR_DISK_ERR",
"FR_INT_ERR",
"FR_INT_ERR",
"FR_NOT_READY",
"FR_NO_FILE",
"FR_NO_PATH",
"FR_INVALID_NAME",
"FR_DENIED",
"FR_EXIST",
"FR_INVALID_OBJECT",
"FR_WRITE_PROTECTED",
"FR_INVALID_DRIVE",
"FR_NOT_ENABLED",
"FR_NO_FILESYSTEM",
"FR_MKFS_ABORTED",
"FR_TIMEOUT"
};


/* display error message and stop */
void error(FRESULT res)
{
if ((res>=FR_DISK_ERR) && (res<=FR_TIMEOUT))
   printf("ERROR: %p\r\n",error_msg[res]);
/* stop here */
while(1);
}


/* will hold file/directory information returned by f_readdir*/
FILINFO file_info;


/* recursively scan directory entries and display them */
FRESULT directory_scan(char *path)
{
/* will hold the directory information */
DIR directory;
/* FAT function result */
FRESULT res;
int i;


if ((res=f_opendir(&directory,path))==FR_OK)
   {
   while (((res=f_readdir(&directory,&file_info))==FR_OK) &&
         file_info.fname[0])
         {
         /* display file/directory name and associated information */
         printf("%c%c%c%c%c %02u/%02u/%u %02u:%02u:%02u %9lu"                 "  %s/%s\r\n",
                (file_info.fattrib & AM_DIR) ? 'D' : '-',
                (file_info.fattrib & AM_RDO) ? 'R' : '-',
                (file_info.fattrib & AM_HID) ? 'H' : '-',
                (file_info.fattrib & AM_SYS) ? 'S' : '-',
                (file_info.fattrib & AM_ARC) ? 'A' : '-',
                file_info.fdate & 0x1F,(file_info.fdate >> 5) & 0xF,
                (file_info.fdate >> 9)+1980,
                file_info.ftime >> 11,(file_info.ftime >> 5) & 0x3F,
                (file_info.ftime & 0xF) << 1,
                file_info.fsize,path,file_info.fname);
         if (file_info.fattrib & AM_DIR)
            {
            /* its a subdirectory */
            /* make sure to skip past "." and ".." when recursing */
            if (file_info.fname[0]!='.')
               {
               i=strlen(path);
               /* append the subdirectory name to the path */
               if (path[i-1]!='/') strcatf(path,"/");
               strcat(path,file_info.fname);
               /* scan subdirectory */
               res=directory_scan(path);
               /* restore the old path name */
               path[i]=0;
               /* remove any eventual '/' from the end of the path */
               --i;
               if (path[i]=='/') path[i]=0;
               /* stop if an error occured */
               if (res!=FR_OK) break;
               }
            }
          }
   }
return res;
}


void main(void)
{
/* FAT function result */
FRESULT res;
/* will hold the information for logical drive 0: */
FATFS drive;

/* pointer to the FATFS type structure */
FATFS *pfat;

/* root directory path for logical drive 0: */
char path[256]="0:/";

/* number of free clusters on logical drive 0:*/
unsigned long free_clusters;
/* number of free kbytes on logical drive 0: */
unsigned long free_kbytes;

unsigned int a;
unsigned int d;
/* initialize Timer1 overflow interrupts in Mode 0 (Normal) */
TCCR1A=0x00;
/* clkio/1024 */
TCCR1B=(1<<CS12)|(1<<CS10);
/* timer overflow interrupts will occur with 100Hz frequency */
TCNT1H=T1_INIT>>8;
TCNT1L=T1_INIT&0xFF;
/* enable Timer1 overflow interrupt */
TIMSK=1<<TOIE1;


/* initialize the USART0 TX, 8N1, Baud rate: 19200 */
UCSR0A=0;
UCSR0B=1<<TXEN0;
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);
UBRR0H=BAUD_INIT>>8;
UBRR0L=BAUD_INIT&0xFF;


/* globally enable interrupts */
#asm("sei")


printf("Directory listing for root of logical drive 0:\r\n");


/* mount logical drive 0: */
if ((res=f_mount(0,&drive))==FR_OK)
   printf("Logical drive 0: mounted OK\r\n");
else
   /* an error occured, display it and stop */
   error(res);


/* repeateadly read directory entries and display them */
if ((res=directory_scan(path))!=FR_OK)
   /* if an error occured, display it and stop */
   error(res);


// new program

/* get the number of free clusters */
if ((res=f_getfree(path,&free_clusters,&pfat))==FR_OK)
   {
   /* calculate the number of free bytes */
   free_kbytes=free_clusters *
               /* cluster size in sectors */
               pfat->csize
               /* divide by 2 to obtain the sector size in kbytes
               512 (sector size in bytes)/1024 = 1/2 kbytes
               we need to do the division by 2 directly,
               in order to prevent unsigned long multiplication
               overflow for 8GB+ SD HC cards */
               /2;
   /* display the number of free kbytes */
   printf("Free space on logical drive 0: %lu kbytes\r\n",free_kbytes);
   }
else
   /* an error occured, display it and stop */
   error(res);  
  



/* delete an eventual old file with the same name */
f_unlink(path3);

/* create a new file in the root of drive 0:
and set write access mode */
if ((res=f_open(&file,path3,FA_CREATE_ALWAYS | FA_WRITE))==FR_OK)
   printf("File %s created OK\r\n",path3);
else
   /* an error occured, display it and stop */
   error(res);





a=20;

while(1)
    {    
      
      
        ltoa(a,s_text);
        
  
        if ((res=f_write(&file,s_text,16,&nbytes))==FR_OK)
            printf("Writing Data\r\n");
        else error(res);
                  
        // pas az neveshtan file ra mibandim
        if ((res=f_close(&file))==FR_OK)
               printf("File %s closed \r\n",path3);
        else error(res);
        
        
        
        
        delay_ms(5000);
        a=a+1;  
        
        
         if ((res=f_open(&file,path3,FA_WRITE))==FR_OK)
            printf("File opened test\r\n");  
            else error(res);
    }

}

فقط می خوام یه متغیر رو سیو بشه + اینتر خط بعد و این روند تکرار بشه