اطلاعیه

Collapse
No announcement yet.

راهنمایی

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

    راهنمایی

    با سلام
    من میخوام 10تا رشته رو داخل حافظه eeprom در atmega32 ذخیره کنم کسی میتونه کمکم کنه چطوری این کارو انجام بدم؟
    نمیخوام اول کار مقدار بدم. میخوام از طریق گیرنده یه رشته رو بگیرم و در eeprom ذخیره کنم

    کد HTML:
    <abbr=کاربر گرامی : لطفا از عنوان مناسب برای ایجاد تاپیک استفاده نمائید. ></abbr>

    #2
    پاسخ : راهنمایی

    بهتر اینه که برای هر رشته یک طول ماکزیمم تعریف کنین تا بتونین آدرس شروع هر رشته رو در eeprom بدست بیارین. بعد از دریافت رشته ها اونا رو تا حداکثری که برای طولشون در نظر گرفتین در eeprom قرار بدین و بقیه بایتها رو صفر کنین. یا اینکه یک بایت اول رو طول رشته قرار بدین و کاراکتر هارو بعد از اون قرار بدین. مسلما دیگه خوندنش رو هم خودتون میدونین چطوری میشه.

    دیدگاه


      #3
      پاسخ : راهنمایی

      لطفا اول زبان برنامه نویسیتون رو هم بگین.

      اگه با بسکام کار میکنین با دستور dim var as Eram var type میتونین یه متغیر رو تو حافظه eeprom تریف و از اون استفاده کنین.
      که var نام متغیر و var type نوع متغیر که میتونه single,long,integer,word,byte,string باشه.
      و با دستور dim var(10) as Eram byte یک ارایه از نوع بایت ایجاد کنین.

      راستی میتونین با دستور WRITEEEPROM var,address نیز متغیر var رو در هر آدرسی از eeprom که بخواین هم ذخیره کنین.

      و اگه با کد ویژن کار میکنین:

      با دستور eeprom n m که n نوع متغیر و m نام متغیر میباشد. توجه کنید که این متغیرها سراسری هستند و باید قبل main برنامه نوشته بشن. و میتونین با همین کلمه کلیدی eeprom ارایه نیز تاریف کنید مثلا eeprom char a[10] .
      اگر روزی هیچ مشکلی سر راهم نبود ؛ میفهمم که راه را اشتباه رفته ام!

      دیدگاه


        #4
        پاسخ : راهنمایی

        من با کدویژن کار میکنم. ده تا رشته به طول 320 کارکتر میخوام ذخیره کنم!!!!!! شدنی هست؟ اگه ممکنه بیشتر راهنمایی کنید (چطوری ذخیره کنم و چطوری بخونمشون)
        البته میتونم تعداد رو از ده تا کمتر کنم ولی نمیتونم طولشون رو کمتر کنم
        باز هم ممنون به خاطر راهنماییهاتون

        دیدگاه


          #5
          پاسخ : راهنمایی

          تعداد رشته هامو کردم دوتا ولی طولشون همون 320 هست :read:

          دیدگاه


            #6
            پاسخ : راهنمایی

            با مگا 32 شما فقط 1024 بایت حافظه در ایپرام جا دارین. بنا بر این فقط سه تا رشته رو میتونین با این طول ذخیره کنین. میشه بپرسم این رشته ها حاوی چه اطلاعاتی هستن؟ شاید بشه ظرفیت اسمی رو بالاتر برد. وگرنه راحتترین کار استفاده از یک ایپرام سریال مثلا AT24C32 هست که میشه 4096 بایت اطلاعات رو یعنی با حساب شما 12 رشته رو توش ذخیره کرد. فقط دو تا پین از میکروتون حروم میکنه.

            دیدگاه


              #7
              پاسخ : راهنمایی

              همین 3 رشته هم کافیه برام فقط تو نوشتن وخوندنشون مشکل دارم در واقع دستوراتشون رو نمیدونم در زبان c چطور باید استفاده کنم
              این رشته هه چندتا جمله هستن برای همینه که طولشون اینقدر زیاده

              دیدگاه


                #8
                پاسخ : راهنمایی

                چرا اینقدر دیر دیر پاسخ میدید؟

                دیدگاه


                  #9
                  پاسخ : راهنمایی

                  چون با عرض معذرت پاسخ دادن وظیفه ما نیست. کارهای دیگری هم برای انجام دادن داریم. درسته که پاسخ دادن به جنابعالی به نوعی کمک به بهتر دانستن دانسته های خودمون هم هست ولی قاعدتا نبایستی برای &quot;عدم پاسخ دادن به موقع&quot; شماتت هم بشیم.

                  بگذریم.
                  اگر مسئله نوشتن اطلاعات داخل eeprom باشه شما میتونین با فرض اینکه طول رشته ها حداکثر 320 کاراکتر باشه از روالهای زیر استفاده کنین:


                  void write_string(int no, char *text)
                  {
                  int base = no * (320+1);
                  int i;
                  char c;

                  for(i=320; i; i--, base++)
                  {
                  c = *text++;
                  if( !c )
                  break;
                  eeprom_write_byte(base, (unsigned char)c);
                  }
                  eeprom_write_byte(base, 0);
                  }


                  void read_string(int no, char *text)
                  {
                  int base = no * (320+1);
                  int i;
                  char c;

                  for(i=320; i; i--, base++)
                  {
                  c = (char)eeprom_read_byte(base);
                  if( !c )
                  break;
                  *text++ = c;
                  }
                  *text = &#039;\0&#039;;
                  }


                  ضمنا جسارتا یه کمی حوصله کن. با این تیپ پیغام دادن ممکنه بقیه از پاسخ دادن بهتون پشیمون بشن.
                  راستی در هنگام خواندن فرض بر این هست که بافر ورودی میتونه تا 320+1 بایت جا داشته باشه.

                  دیدگاه


                    #10
                    پاسخ : راهنمایی

                    من منظور بدی نداشتم فقط منظورم این بود که حالا که زحمت کشیدین و دارین راهنماییم میکنید اینو تکمیلش کنید.
                    بازم اگه بد نوشته بودم معذرت میخوام
                    بابت کد هم ممنون

                    دیدگاه

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