اطلاعیه

Collapse
No announcement yet.

کتابخانه ff.h

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

    #31
    پاسخ : کتابخانه ff.h

    pdf دو تابع تا اینجای کار به قرار زیر می باشد :
    http://www.4shared.com/document/mwAOIO-8/FF_1h.html

    البته انشا الله مابقی را هم به همین صورت دو تا دوتا قرار خواهم داد تا دوستانی که Dial Up دارند راحت تر دانلود کنند.
    همچنین مطالعه مطالب اصلی بدون جزییات و در فضای pdf بهتر از فضای شلوغ سایت است .
    در انتها هم انشا الله یک pdf کلی قرار خواهم داد.
    مولای من
    نخواهمت که بگریی ولی به گریه دعا کن که وقت رفتن ایام انتظار بیاید

    یا رب الحسین بحق الحسین اشف صدر الحسین بظهورالحجه

    دیدگاه


      #32
      پاسخ : کتابخانه ff.h

      با تشکر از اقای کینژاد عزیز و دیگر دوستان از جمله اقای ساعی که فایل PDF رو نوشتند
      اقای ساعی اگر لطف کنی و PDF رو از حالت گفتاری به کتابی تغییر بردی و غلط های املاییشو اصلاح کنی خیلی عالی تر میشه
      در ضمن سعی کن جملات و سوالاتی که به تابع ربط نداره حذف بشه :redface:


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

      دیدگاه


        #33
        پاسخ : کتابخانه ff.h

        سلام آقای اسدی:
        یک سوال:
        فرض کنیم یک فایل txt تو mmc از طریق کامپیوتر ریختیم توش . از کجا بفهمیم که این فایل تو کدوم درایو هستش؟
        آنکس که بداند و بداند که بداند /، اسب شرف از گنبد گردون بجهاند
        آنکس که بداند و نداند که بداند / ، بيدارش نماييد که بسي خفته نماند
        آنکس که نداند و بداند که نداند / ، لنگان خرک خويش به مقصد برساند
        آنکس که نداند و نداند که نداند / ، در جهل مرکب ابدالدهر بماند

        دیدگاه


          #34
          پاسخ : کتابخانه ff.h

          نوشته اصلی توسط king_of_hearts90
          سلام آقای اسدی:
          یک سوال:
          فرض کنیم یک فایل txt تو mmc از طریق کامپیوتر ریختیم توش . از کجا بفهمیم که این فایل تو کدوم درایو هستش؟
          دوست من شما توی مموری نمیتونی بیشتر از یه درایو داشته باشین مگر اینکه چند تا مموری داشته باشید بعدش هم اگر بشه میتونید با توابع اینده درایوها رو جستجو کنید
          البته مولتی درایو بودن یکی از امکانات این توابع هست که به صورت پیشفرض غیر فعاله اگر هم فعال کنید حتما توی میکرو های کوچیک 32 یا 16 کیلو فلش AVR رم و فاش کم خواهید اورد
          تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
          به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

          دیدگاه


            #35
            پاسخ : کتابخانه ff.h

            تابع سوم f_close

            کد:
            FRESULT f_close (
             FIL* FileObject   /* Pointer to the file object structure */
            );


            (اشاره گر فایل)f_close
            هست
            حالا این تابع چیه و به چه درد میخوره؟
            برای بستن فایل هایی که قبلا باز کردیم به کار میره

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

            ورودی و خروجی هاش؟
            یک ورودی داره
            اشاره گر فایل FileObject یه اشاره گر به متغیری که باید قبل از این تابع از نوع استراکچر FIL تعریف شده باشه

            و یک خروجی خطا داره که 6 حالت داره
            FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_INVALID_OBJECT, FR_TIMEOUT
            توضیح خطا ها هم مثل توابع قبلی هست
            برای چک کردن خطا بهتره خطا هایی که برای ما مهمه رو چک کنیم !!!

            بعد از این تابع ما سه تا تابع مهم برای فایل و سه تای دیگه برای پوشه داریم البته توابع دیگه ای هم هست که برای کارهای معمولی خیلی مهم نیستند
            تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
            به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

            دیدگاه


              #36
              پاسخ : کتابخانه ff.h

              نوشته اصلی توسط POLESTAR
              با تشکر از اقای کینژاد عزیز و دیگر دوستان از جمله اقای ساعی که فایل PDF رو نوشتند
              اقای ساعی اگر لطف کنی و PDF رو از حالت گفتاری به کتابی تغییر بردی و غلط های املاییشو اصلاح کنی خیلی عالی تر میشه
              در ضمن سعی کن جملات و سوالاتی که به تابع ربط نداره حذف بشه :redface:
              با سلام و تشکر
              غلط های املایی را سعی کردم حذف کنم ولی گفتار را عمدا" تغیییر ندادم گفتم شاید شما دوست نداشته باشید ولی حالا که خودتان می فرمایید به روی چشم.
              بقیه موارد را هم فکر کنم فعلا" باشند بهتر است (فکر می کنم در یادگیری آسان و ساده موثرند) ولی در pdf نهایی یک آموزش منسجم و بدون سوالات متفرقه می نویسیم.
              البته نظر نهایی با شماست.

              نوشته اصلی توسط POLESTAR
              دوست من شما توی مموری نمیتونی بیشتر از یه درایو داشته باشین مگر اینکه چند تا مموری داشته باشید بعدش هم اگر بشه میتونید با توابع اینده درایوها رو جستجو کنید
              البته مولتی درایو بودن یکی از امکانات این توابع هست که به صورت پیشفرض غیر فعاله اگر هم فعال کنید حتما توی میکرو های کوچیک 32 یا 16 کیلو فلش AVR رم و فاش کم خواهید اورد
              قبلا" گفته بودید عددی که به درایو اختصاص می دهیم از 0 تا 9 است آیا تفاوتی ندارد زمانی که یک مموری داریم از کدامیک از این 10 عدد استفاده کنیم؟
              (منظور درون تابع f_mount می باشد)
              با تشکر
              مولای من
              نخواهمت که بگریی ولی به گریه دعا کن که وقت رفتن ایام انتظار بیاید

              یا رب الحسین بحق الحسین اشف صدر الحسین بظهورالحجه

              دیدگاه


                #37
                پاسخ : کتابخانه ff.h

                نوشته اصلی توسط محمد صادق ساعی
                قبلا" گفته بودید عددی که به درایو اختصاص می دهیم از 0 تا 9 است آیا تفاوتی ندارد زمانی که یک مموری داریم از کدامیک از این 10 عدد استفاده کنیم؟
                (منظور درون تابع f_mount می باشد)
                با تشکر
                در صورتی که مولتی درایو فعال نباشه باید این عدد 0 باشه
                تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                دیدگاه


                  #38
                  پاسخ : کتابخانه ff.h

                  سلام
                  کجا تعیین می کنیم این مولتی درایو بودن را (یعنی چطور فعالش می کنیم؟)؟ بستگی به تعداد دفعات استفاده از تابع f_mount دارد؟ و یا در تابع دیگری این حالت را فعال می نماییم؟ اصلا" نیازی هست که تعریفش کنیم یا اینکه اگر چندین بار از تابع f_mount با شماره درایوهای متفاوت استفاده کنیم کفایت می کند؟
                  با تشکر
                  مولای من
                  نخواهمت که بگریی ولی به گریه دعا کن که وقت رفتن ایام انتظار بیاید

                  یا رب الحسین بحق الحسین اشف صدر الحسین بظهورالحجه

                  دیدگاه


                    #39
                    پاسخ : کتابخانه ff.h

                    با سلام به تمام عزیزان و استاد خوبمون مهندس اسدی عزیز

                    در ابتدا از تمام زحمات عزیزان تشکر میکنم فقط جسارتا یه درخواست داشتم ، لطف کنید و کدهایی که قرار میدید رو بزارین داخل تگ زیر تا فرم کدهاتون حفظ بشه تا من تازه کار هم بهتر متوجه بشم ممنون از توجهی که میکنید :

                    [l t R]
                    [c o d e]

                    [/c o d e]
                    [/l t R]


                    فقط اول اسپیس های بین حروف رو حذف کنید، بعد کدتون رو داخلش بنویسید ممنون .
                    2- میکروی ما 5 ولته و ما نمیتونیم ولتاژشو بیایم پایین حالا برای تغذیه میتونیم از یه رگلاتور 3.3 استفاده کنیم که نمیسرفه ولی من یه راه دیگه دارم و با 2 تا دیود فقط 1N4148 سری شده به جای رگلا تور استفاده میکنیم یعنی 5 ولت رو میدیم به دیود اول و بعد یه دیود دوم و بعد به مموری حالا برای اون سه تا دیتا باید با یه تقسیم مقاومت ولتاژ رو به 3.3 برسونیم که برای این کار به سه تا 1.5 کیلو و سه تا 1 کیلو مقاومت نیاز داریم که چون ساده هست دیگه توضیح نمیدم
                    مهندس جان منظورتون یه همچین چیزیه :

                    دیدگاه


                      #40
                      پاسخ : کتابخانه ff.h

                      نوشته اصلی توسط محمد صادق ساعی
                      سلام
                      کجا تعیین می کنیم این مولتی درایو بودن را (یعنی چطور فعالش می کنیم؟)؟ بستگی به تعداد دفعات استفاده از تابع f_mount دارد؟ و یا در تابع دیگری این حالت را فعال می نماییم؟ اصلا" نیازی هست که تعریفش کنیم یا اینکه اگر چندین بار از تابع f_mount با شماره درایوهای متفاوت استفاده کنیم کفایت می کند؟
                      با تشکر
                      با سلام
                      اگر یادتون باشه توی پستهای قبلی در مورد فایل ffconf.h صحبت کرده بودم این فایل در واقع بخش کنترل تنظیمات این توابع هست

                      این جا میتونید امکانات این توابع رو فعال یا غیر فعال کنید که بعضی جاهای مهمشو توضیح میدم

                      کد:
                      #define	_FS_TINY		0	// 0:Normal or 1:Tiny

                      برای کم کردن میزان بافر استفاده میشه و برای میکروهایی که رم پایینی داند به درد میخوره مثل همین mega32 یا 16 ما

                      کد:
                      #define _FS_READONLY	0	// 0:Read/Write or 1:Read only

                      با یک کردنش میتونید حالت فقط خواندنی به درایوتون بدین موجب کاهش رم و حجم فلش میشه (دیگه هرگونه نوشتن غیر فعال خواهد شد)

                      کد:
                      #define _FS_MINIMIZE	0	// 0 to 3

                      بعضی از توابع رو که نیاز نداریم حذف میکنه موجب پایین اومدن حجم فلش میشه چهار حالت داره
                      0 : تابع کامل
                      1 : توابع f_stat، f_getfree، f_unlink، f_mkdir، f_chmod، f_truncate و f_rename حذف میشه
                      2 : علاوه بر توابع یک f_opendir و f_readdir هم حذف می شه
                      3 : علاوه بر توابع یک و دو f_lseek هم حذف می شه

                      کد:
                      #define	_USE_STRFUNC	0	// 0:Disable or 1-2:Enable

                      برای فعال کردن توابع رشته ای به کار میره

                      کد:
                      #define	_USE_MKFS		0	// 0:Disable or 1:Enable

                      برای فعال کردن تابع f_mkfs هست در صورتی که FS_READONLY_ صفر باشه

                      کد:
                      #define	_USE_FORWARD	0	// 0:Disable or 1:Enable
                      برای فعال کردن تابع f_forward هست در صورتی که FS_TINY_ یک باشه

                      کد:
                      #define	_USE_FASTSEEK	0	// 0:Disable or 1:Enable

                      برای بالا بردن سرعت SEEK به کا میره

                      ================================================== ========
                      کد:
                      #define _CODE_PAGE	437

                      انتخاب کد پیج فونت برای فایل هست که برای 10 12 تا زبان مختلف نوشته شده
                      در صورت انتخاب نادرست امکان خراب شدن فایل های ادیت یا ایجاد شده وجود دارد

                      کد:
                      #define	_USE_LFN	0		// 0 to 3

                      حالت های مختلف LFN رو تنظیم میکنه این LFN همان مخفف Large File Name هست که برای استفاده از نام کامل فایل به درد میخوره که 4 حالت داره
                      0 : غیر فعال کردن ویژگی LFN و MAX_LFN_ و LFN_UNICODE_ موثر نخواهد بود در این حالت نام فایل از سیستم 6.3 استفاده میکنه 6 کاراکتر نام و یک دات(.) و 3 پسوند فایل
                      1 : فعال کردن LFN با بافر استاتیک بر روی BSS
                      2 : فعال کردن LFN با بافر پویا یا داینامیک بر روی STACK
                      3 : فعال کردن LFN با بافر پویا یا داینامیک بر روی HEAP

                      کد:
                      #define	_MAX_LFN	255		// Maximum LFN length to handle (12 to 255)

                      ماکزیمم کاراکتر LFN رو تنظیم میکنه که میتونه از 12 کاراکتر تا 255 کارکتر باشه

                      کد:
                      #define	_LFN_UNICODE	0	// 0:ANSI/OEM or 1:Unicode

                      ابن هم که تونی کد رو فعال میکنه البته اگر LFN فعال باشه

                      کد:
                      #define _FS_RPATH		0	// 0 to 2

                      0: غیر فعال کردن ویژگی های مسیر و حذف توابع مربوط بهش
                      1 : مسیر های نسبی را فعال میکند و توابع () f_chdrive و ()f_chdir در دسترس هستند
                      2 : علاوه بر توابع 1 () f_getcwd هم در دسترس خواهد بود

                      کد:
                      #define _VOLUMES	1

                      تعریف تعداد درایو

                      کد:
                      #define	_MAX_SS		512		// 512, 1024, 2048 or 4096

                      انتخاب میزان سایز سکتور
                      برای مموری و هارد دیسک از 512 استفاده بشه
                      برای فلاپی درایو و دیسکهای نوری که دارای سکتورهای بزرگتی هستند مقدار های بالا تر

                      کد:
                      #define	_MULTI_PARTITION	0	// 0:Single partition, 1/2:Enable multiple partition

                      0 برای فقط یک پارتیشن و 1 برای مولتی پارتیشن

                      کد:
                      #define	_USE_ERASE	0	// 0:Disable or 1:Enable

                      برای فعال کردن بخش از ویژگی های پاک کردن به درد میخوره

                      تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                      به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                      دیدگاه


                        #41
                        پاسخ : کتابخانه ff.h

                        نوشته اصلی توسط mojtaba_led

                        مهندس جان منظورتون یه همچین چیزیه :
                        دقیقا
                        تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                        به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                        دیدگاه


                          #42
                          پاسخ : کتابخانه ff.h

                          با تشکر از زحمتتان
                          کاملا" متوجه شدم ولی یک سوال اینکه این فعال و یا غیر فعال کردن امکانات بواسطه دست بردن درون تابع کتابخانه ای ffcong.h صورت می گیرد و یا اینکه در طول برنامه ی جاری ، بسته به خواسته مان آنرا تنظیم می کنیم؟
                          چه موقع مثالی می زنید تا کاربرد عملی شان را هم به وضوح متوجه شویم؟
                          با سپاس فراوان
                          مولای من
                          نخواهمت که بگریی ولی به گریه دعا کن که وقت رفتن ایام انتظار بیاید

                          یا رب الحسین بحق الحسین اشف صدر الحسین بظهورالحجه

                          دیدگاه


                            #43
                            پاسخ : کتابخانه ff.h

                            نوشته اصلی توسط محمد صادق ساعی
                            با تشکر از زحمتتان
                            کاملا" متوجه شدم ولی یک سوال اینکه این فعال و یا غیر فعال کردن امکانات بواسطه دست بردن درون تابع کتابخانه ای ffcong.h صورت می گیرد و یا اینکه در طول برنامه ی جاری ، بسته به خواسته مان آنرا تنظیم می کنیم؟
                            چه موقع مثالی می زنید تا کاربرد عملی شان را هم به وضوح متوجه شویم؟
                            با سپاس فراوان
                            بطور مثال شما میخواید با یک MEGA16 یک WAV Player درست کنید در اینجا نیازی به نوشتن نیست و فقط امکانات خواندن کفایت میکند پس خیلی از این توابع به درد ما نمیخوره وچون نیاز به فلش داریم تا برنامه های دیگمون رو بنویسیم بنا بر این میایم
                            FS_TINY_ رو یک میکنیم
                            FS_READONLY_ رو یک میکنیم
                            FS_MINIMIZE_ رو هم یک میکنیم (اگر نیاز به باز کردن پوشه ها و خوندنشون هم نباشه میتونیم 2 کنیم)
                            اگر قراره نام کامل فایل رو مثلا توی LCD نشون بدیم USE_LFN_ رو هم یک میکنیم
                            و MAX_LFN_ رو هم برای ماکزیمم کاراکتر نام فایلمون تنظیم میکنیم
                            و به قسمت های بعدی دست نمیزنیم و چیزهای دیگه رو فعال نمیکنیم چون نیازی بهشون نداریم

                            این تغییرات رو قبل از کامپایل میدیم و تغییر این امکانات در داخل برنامه امکانش نیست
                            اصلا یه سوال منظور از دیفاین چیه؟ مگه میشه داخل برنامه دیفاین رو تغییر داد ؟ مگه متغیر هست که بشه تغییرش داد؟
                            فقط به کامپایلر میگه کجا ها رو کامپایل کن کجارو هم نمیخواد کامپایل کنی یا مقدار فلان چیزها این عدد یا دستورهاست اون هم فقط جایگزین میکنه همین
                            در ابتدای این پست هم گفتم که کتابهای C رو یه مطالعه بکنید و من شمارو به حساب یه برنامه نویس حرفهای یا حد اقل اشنا با C گذاشته و در مورد برنامه نویسی C توضیح نمیدم تا از بحث اصلی خارج نشیم ولی برعکس شده ها اون از استراکچرها و این هم از دیفاین ها oo:
                            البته از نظر بنده مشکلی نیست و توضیح میدم به شرطی که کسی که اینهارو میخونه و یا قراره PDF کنه به صورت پاورقی بخونه :agree:

                            در مورد مثال باید حتما توابع خوندن یا نوشتن فایل یا پوشه ها رو اموزش داده باشیم بدون اونها مثال فایده ای نداره
                            امید وارم کافی باشه :nice:
                            تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                            به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                            دیدگاه


                              #44
                              پاسخ : کتابخانه ff.h

                              خیلی خیلی ممنونم
                              زبان c را که آشنایی دارم مفهوم define را هم می دانستم فقط در اثر بی توجهی بود و دیگر هیچ .نمی دانم شاید هم به خاطر این است که تا به حال اقدام به ساخت کتابخانه نکرده باشم (البته نه به این مفهوم که با دستورات و یا سینتکس زبان سی آشنا نباشم )که یکی از خواسته های بنده از شما هم همین است که اگر امکانش باشد بعد از اینکه این توابع به اتمام رسید و در یک تاپیک دیگر به همین نحو (ساده و منسجم) شیوه ی ساخت کتابخانه را هم بطور کامل توضیح بدهید البته در صورتی که فرصت دارید و امکانش هست
                              باز هم سپاسگذارم.
                              مولای من
                              نخواهمت که بگریی ولی به گریه دعا کن که وقت رفتن ایام انتظار بیاید

                              یا رب الحسین بحق الحسین اشف صدر الحسین بظهورالحجه

                              دیدگاه


                                #45
                                پاسخ : کتابخانه ff.h

                                تابع چهارم f_read

                                کد:
                                FRESULT f_read (
                                 FIL* FileObject,  /* Pointer to the file object structure */
                                 void* Buffer,    /* Pointer to the buffer to store read data */
                                 UINT ByteToRead,  /* Number of bytes to read */
                                 UINT* ByteRead   /* Pointer to the variable to return number of bytes read */
                                );


                                (اشاره گر تعداد بایت خوانده شده,تعداد بایتی که قراره خونده بشه,اشاره گر بافر,اشاره گر فایل)f_read
                                هست
                                حالا این تابع چیه و به چه درد میخوره؟
                                برای خوندن دیتای فایل هایی که قبلا باز کردیم به کار میره

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

                                ورودی و خروجی هاش؟
                                چهار تا ورودی داره
                                1 : اشاره گر فایل FileObject یه اشاره گر به متغیری که باید قبل از این تابع از نوع استراکچر FIL تعریف شده باشه
                                2 : اشاره گر فافر Buffer یه یه اشاره گر به متغیر یا تابعی که باید قبل از این تابع تعریف شده باشه
                                3 : تعداد بایتی که قراره از فایل خونده بشه و در بافر قرار بگیره ByteToRead که باید یه متغیر از نوع UINT یا عدد ثابت باشه
                                4 : اشاره گر به متغیری که قراره تعداد بایت خونده شده در اون قرار بگیره ByteRead و باید قبل از تابع از نوع UINT تعریف شده باشه

                                و یک خروجی خطا داره که 6 حالت داره
                                FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_INVALID_OBJECT, FR_TIMEOUT
                                توضیح خطا ها هم مثل توابع قبلی هست

                                ByteRead رو باید بعد از این تابع چک کنیم که برابر مقدار ByteToRead باشه تا انتهای فایل رو تشخیص بدیم اگر مقدار ByteRead کوچکتر از ByteToRead باشه یعنی دیتای فایل به پایان رسیده است

                                مثال

                                کد:
                                void main (void)
                                    {
                                    FATFS fs;     	// Work area (file system object) for the volume
                                    FIL fs;   		// file objects 
                                    BYTE buff[16];   	// File read buffer
                                    UINT br;      	// File read count
                                    FRESULT res;    	// Petit FatFs function common result code
                                
                                
                                    // Mount the volume
                                    f_mount(0, &fs);
                                    if (res) die(res);
                                
                                    //در درایو 0 srcfile.dat  باز کزدن فایل 
                                    res = f_open(&fs, "0:srcfile.dat", FA_OPEN_EXISTING | FA_READ);
                                    if (res) die(res); 
                                    // حلقه خواندن فایل و انجام کاری که قراره روی فایل انجام بدیم 
                                    do{
                                    	
                                        // خوندن 16 بایت از فایل 
                                    	res = f_read(&fs, buff, 16, &br);  
                                        // کارهایی که قراره روی دیتای خونده شده فایل انجام بدیم
                                        .
                                        .
                                        .
                                        . 
                                    // چک کردن مقدار خطا که بزرگتر از صفر نباشه و مقدار دیتای خونده شده تا کمتر از 16 نباشه
                                    }while (res || br != 16); 
                                    
                                    // بستن فایل
                                    f_close(&fs);
                                    // بستن درایو
                                    f_mount(0, NULL);
                                    }
                                تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                                به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                                دیدگاه

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