اطلاعیه

Collapse
No announcement yet.

[آموزش] نحوه استفاده از کتابخانه pff.h

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

    سلام دوستان از کدوم توابع کتابخانه pff باید برای بدست اوردن حجم فایل استفاده کرد؟؟

    دیدگاه


      پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

      سلام!!!
      تمام ارسالهای این محموعه را کامل خوندم که اگه سوالم را کسی پرسیده و جواب داده شده سوال تکراری نپرسم ولی ظاهرا مشکل من مثل همیشه تکه!!!

      و اما!!!
      من این کتابخونه را گرفتم!!!
      با حوصله فراوان تمام اون تعییراتی که بصورت من درآوردی ایجاد شده بئده به حالت پایه برگردوندم!!!
      منظورم BYTE ,WORD و این جور چیزها بود!!!
      تمام رو به حالت پایه شون تغییر دادم!! و کتابخونه شد مثل کتابخونه های استاندارد!!!!
      اما مشکل کجاست!!!؟؟؟
      مشکل تو تابع Pf_read هستش!!!
      این تابع تا وقتی که آدرس pf_lseek کمتر از 4096 کرکتر باشه بافر میگیره و میخونه!
      فقط کافیه که از 4096 یه کرکتر بیشتر بشه اونوقته که بافر خوندنت null برمیگرده!!!!
      , Disk ERR هم برگشت تابع pf_read میشه!!!!

      خب اساتید عزیزم!!!
      وقتی تابع Pf_read رو برسی میکنید میبینی که موقغ خوندن از تابغ disk_readp استقاده میکنه!!!
      داخل تابغ disk_readp محدودیتی ایجاد شده که نمبفهممش!!!

      RESULT disk_readp
      (
      unsigned char *buff, /* Pointer to the read buffer (NULL:Read bytes are forwarded to the stream) */
      unsigned long lba, /* Sector number (LBA) */
      unsigned short ofs, /* Byte offset to read from (0..511) */
      unsigned short cnt /* Number of bytes to read (ofs + cnt mus be <= 512) */
      )
      {
      RESULT res;
      unsigned char rc;
      unsigned short bc;

      if (!(CardType & CT_BLOCK)) lba *= 512; /* Convert to byte address if needed */
      res = RES_ERROR;
      if (send_cmd(CMD17, lba) == 0) /* READ_SINGLE_BLOCK */
      {
      bc = 30000;
      do /* Wait for data packet in timeout of 100ms */
      {
      rc = rcv_spi();
      } while (rc == 0xFF && --bc);
      if (rc == 0xFE) /* A data packet arrived */
      {
      bc = 514 - ofs - cnt;
      /* Skip leading bytes */
      if (ofs)
      {
      do rcv_spi(); while (--ofs);
      }

      /* Receive a part of the sector */
      if (buff) /* Store data to the memory */
      {
      do
      *buff++ = rcv_spi();
      while (--cnt);
      }
      do rcv_spi(); while (--bc);
      res = RES_OK;
      }
      }
      release_spi();
      return res;
      }


      چطوری میشه یه فایلی که ممکنه تو چند تا سکتور جا خوش کرده را خوند؟؟؟
      من اون ofs رو بصورت long هم تعریف کردم!!موضوع اینه که فقط یک سکتور خونده میشه!!!
      اگه آدرستون از 4096 بیشتر باشه خط 13 این تابغ همل میکنه!!!!
      خط15 هم که میگه فقط یه بلوک خونده بشه!!!!!
      دیگه نمیدونم!!! احتمالا باید تغییر اساسی به این تابع بدیم!!!
      شاید یه حلقه تکرار برای رفتن به بلوک بعدی تو خط 15 یا شاید چیز دیگه!!!
      سر جدتون کمک کنید!!!
      دمار از روزگارم درومده!!!

      دیدگاه


        پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

        برنامه disk_readp اینجا تو خطهای آخر با dr فراخونی میشه!:
        [FONT=Yekan]RESULT pf_read ([/FONT]	void *buff,		                                    /* Pointer to the read buffer (NULL:Forward data to the stream)*/
        unsigned short btr, /* Number of bytes to read */
        unsigned short* br /* Pointer to number of bytes read */
        )
        {
        RESULT dr;
        CLUST clst;
        unsigned long sect, remain;
        unsigned char *rbuff = buff;
        unsigned short rcnt;
        FATFS *fs = FatFs;




        *br = 0;
        if (!fs) return FR_NOT_ENABLED; /* Check file system */
        if (!(fs->flag & FA_OPENED)) /* Check if opened */
        return FR_NOT_OPENED;


        remain = fs->fsize - fs->fptr;
        if (btr > remain) btr = (unsigned short)remain; /* Truncate btr by remaining bytes */


        while (btr) { /* Repeat until all data transferred */
        if ((fs->fptr % 512) == 0) { /* On the sector boundary? */
        if ((fs->fptr / 512 % fs->csize) == 0) { /* On the cluster boundary? */
        clst = (fs->fptr == 0) ? /* On the top of the file? */
        fs->org_clust : get_fat(fs->curr_clust);
        if (clst <= 1) goto fr_abort;
        fs->curr_clust = clst; /* Update current cluster */
        fs->csect = 0; /* Reset sector offset in the cluster */
        }
        sect = clust2sect(fs->curr_clust); /* Get current sector */
        if (!sect) goto fr_abort;
        fs->dsect = sect + fs->csect++;
        }
        rcnt = 512 - ((unsigned short)fs->fptr % 512); /* Get partial sector data from sector buffer */
        if (rcnt > btr) rcnt = btr;
        dr = disk_readp(!buff ? 0 : rbuff, fs->dsect, (unsigned short)(fs->fptr % 512), rcnt);
        if (dr) goto fr_abort;
        fs->fptr += rcnt; rbuff += rcnt; /* Update pointers and counters */
        btr -= rcnt; *br += rcnt;
        }


        return FR_OK;


        fr_abort:
        fs->flag = 0;
        return FR_DISK_ERR;
        }


        دلیل: ادغام دو پست برای جلوگیری از اسپم

        fpts , fs , اینها تو تابع باز کردن عدد دهی میشوند:

        RESULT pf_open (
        const char *path /* Pointer to the file name */
        )
        {
        RESULT res;
        DIR dj;
        unsigned char sp[12], dir[32];
        FATFS *fs = FatFs;




        if (!fs) /* Check file system */
        return FR_NOT_ENABLED;


        fs->flag = 0;
        fs->buf = dir;
        dj.fn = sp;
        res = follow_path(&dj, path); /* Follow the file path */
        if (res != FR_OK) return res; /* Follow failed */
        if (!dir[0] || (dir[DIR_Attr] & AM_DIR)) /* It is a directory */
        return FR_NO_FILE;


        fs->org_clust = /* File start cluster */
        #if _FS_FAT32
        ((unsigned long)LD_WORD(dir+DIR_FstClusHI) << 16) |
        #endif
        LD_WORD(dir+DIR_FstClusLO);
        fs->fsize = LD_DWORD(dir+DIR_FileSize); /* File size */
        fs->fptr = 0; /* File pointer */
        fs->flag = FA_OPENED;


        return FR_OK;
        }

        دیدگاه


          پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

          کسی نبود کمک من بده؟؟؟

          باز هم کس نخارد پشت من جز ...

          دیدگاه


            پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

            نوشته اصلی توسط offlineone23 نمایش پست ها
            کسی نبود کمک من بده؟؟؟

            باز هم کس نخارد پشت من جز ...
            سلام
            پیشنهاد اول این که کتابخونه رو ترجیحا از سورسش دانلود کنید. پیشنهاد دوم اینکه اگر اطلاع دقیقی از عملکرد کد ندارید، سعی نکنید تغییرش بدید. پیشنهاد سوم هم اینه که بهتره آموزش این کتابخونه که در سایت چان وجود داره استفاده کنید. فکر کنم چان قبلا خودش برای AVR پورتش کرده هر دو کتابخونه ff و pff رو.
            در آخرم بهتره سطح انتظارتون رو از بقیه کاهش بدید که دچار مشکل نشید!
            جدیدترین ویرایش توسط hossein.m98; ۲۲:۰۱ ۱۳۹۹/۱۰/۱۵.

            دیدگاه


              پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

              نوشته اصلی توسط hossein.m98 نمایش پست ها
              سلام
              پیشنهاد اول این که کتابخونه رو ترجیحا از سورسش دانلود کنید. پیشنهاد دوم اینکه اگر اطلاع دقیقی از عملکرد کد ندارید، سعی نکنید تغییرش بدید. پیشنهاد سوم هم اینه که بهتره آموزش این کتابخونه که در سایت چان وجود داره استفاده کنید. فکر کنم چان قبلا خودش برای AVR پورتش کرده هر دو کتابخونه ff و pff رو.
              در آخرم بهتره سطح انتظارتون رو از بقیه کاهش بدید که دچار مشکل نشید!
              در مورد بخش آخر حرفتون چشم!!!
              در مورد بخش اول اینکه کتابخونه درست کارمیکنه منتها با محدودیت خوندن یک کلاستر!!! و اینو مستقیما از سایت خود اون ژاپنی دان کردم!
              در مورد بخش دوم اینکه با تمام تلاشم دارم سعی میکنم گسترشش بدهم! اگه میتونین کمکم کنین که متوجه بشم کجا تو بخش تابع pf-read باید تغییر داده بشه تا بجای صفر کردن پرچم بره برای کلاستر بعدی!!!
              در مورد بخش سومتون هم عرش کنم خدمتتون که مطالعه کردم و ایشون فقط توضیح محدودی در مورد کارکرد این کتابخونه داده اند و ساختاررا فقط برای یک کلاستر ساخته اند! و باید برای کار بزرگتر گسترشش داد! که ایشون توضیحی در این مورد ندارند!


              خب حالا چطوری کمک میکنی حسین جان؟

              دیدگاه


                پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

                نوشته اصلی توسط offlineone23 نمایش پست ها
                در مورد بخش آخر حرفتون چشم!!!
                در مورد بخش اول اینکه کتابخونه درست کارمیکنه منتها با محدودیت خوندن یک کلاستر!!! و اینو مستقیما از سایت خود اون ژاپنی دان کردم!
                در مورد بخش دوم اینکه با تمام تلاشم دارم سعی میکنم گسترشش بدهم! اگه میتونین کمکم کنین که متوجه بشم کجا تو بخش تابع pf-read باید تغییر داده بشه تا بجای صفر کردن پرچم بره برای کلاستر بعدی!!!
                در مورد بخش سومتون هم عرش کنم خدمتتون که مطالعه کردم و ایشون فقط توضیح محدودی در مورد کارکرد این کتابخونه داده اند و ساختاررا فقط برای یک کلاستر ساخته اند! و باید برای کار بزرگتر گسترشش داد! که ایشون توضیحی در این مورد ندارند!


                خب حالا چطوری کمک میکنی حسین جان؟
                من که دقیقا نمیدونم چکار داری میکنی و قصدت چیه دقیقا. ولی اگر به امکانات بیشتری نیاز داری، کتابخونه ff هم هست که خیلی مفصل تر از pff هستش. pff رو صرفا چان نوشته برای میکروکنترلرهای ضعیفی مثل 8051 که با حداقل امکانات میخوان از سیستم فایل fat استفاده کنن و طبیعتا محدودیت هایی هم داره. در کل فکر نمیکنم برای خوندن و نوشتن روی فایل ها لازم باشه انقدر سطح پایین و توی لول سکتور و کلاستر تغییری داد!
                در مورد اون نوع داده هایی که تغییرشون دادی هم دلیلی داشته که از WORD و DWORD و امثال اینا استفاده شده. دلیلش اینه که قابل استفاده در همه کامپایلرها باشن و مشکل اختصاص حافظه پیش نیاد.

                دیدگاه


                  پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

                  نوشته اصلی توسط hossein.m98 نمایش پست ها
                  من که دقیقا نمیدونم چکار داری میکنی و قصدت چیه دقیقا. ولی اگر به امکانات بیشتری نیاز داری، کتابخونه ff هم هست که خیلی مفصل تر از pff هستش. pff رو صرفا چان نوشته برای میکروکنترلرهای ضعیفی مثل 8051 که با حداقل امکانات میخوان از سیستم فایل fat استفاده کنن و طبیعتا محدودیت هایی هم داره. در کل فکر نمیکنم برای خوندن و نوشتن روی فایل ها لازم باشه انقدر سطح پایین و توی لول سکتور و کلاستر تغییری داد!
                  در مورد اون نوع داده هایی که تغییرشون دادی هم دلیلی داشته که از WORD و DWORD و امثال اینا استفاده شده. دلیلش اینه که قابل استفاده در همه کامپایلرها باشن و مشکل اختصاص حافظه پیش نیاد.
                  خب میرم که FF رو بریزم بهم!!!!!
                  همینکه یکی باشه آدمو راهنمایی کنه خودش دلگرمیه!!!!!
                  بهت خبر میدهم چکارکردم!!!
                  دمت گررررررم!!!

                  دیدگاه


                    پاسخ : [آموزش] نحوه استفاده از کتابخانه pff.h

                    سلام و احترام
                    امیدوارم حال شما عالی باشه.
                    من به طراحی مدار کنترلر ۴ رله که توسط آقای هادی اسدی انجام شده احتیاج دارم. ممنون میشم لطفا لینک این مدار یا لینک page جناب هادی اسدی رو برای من ارسال بفرمایین.

                    دیدگاه

                    لطفا صبر کنید...
                    X