اطلاعیه

Collapse
No announcement yet.

مشکل با آرایه

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

    مشکل با آرایه

    سلام سه تا سوال در رابطه با آرایه دارم
    سوال اولم اینه: چجور میشه دو تا آرایه رو باهم مقایسه کرد؟که مثلا اگر مثل هم بودن یک کاریو انجام بده؟
    سوال دومم:در eeprom چجوری میشه متغیری از جنس آرایه ذخیره کرد؟تکنیک خاصی داره؟
    سوال سومم: چجوری میشه مثلا تو یک لایبرری توابع اون لایبرری و دید؟مثلا تابع delay_ms رو در کتابخانه delay.h چجوری میشه داخلش و دید؟
    تشکر پیشاپیش از دوستانی که جواب میدن

    #2
    پاسخ : مشکل با آرایه

    اول: اگر از نوع string باشه، میشه از strcmp استفاده کرد، در غیر این صورت خونه های متناظر رو باید تک به تک مقایسه کنی
    دوم: تکنیک خاصی نداره! همه چیز در حافظه ای بایت به بایت ذخیره میشن
    سوم: اگر از codevision استفاده میکنی، این امکان نیست. ولی تو avr gcc تقریبا همه چیز باز هست و قابل دسترس

    دیدگاه


      #3
      پاسخ : مشکل با آرایه

      سلام برای کار کردن با آرایه ها می تونی از توابع مربوط به رشته ها که در کتابخانه ی ;string.h هست استفده کنی .

      کد:
      [LEFT]signed char strcmp(char *str1, char *str2)
      
      //compares the string str1 with the string str2.
      //Returns <0, 0, >0 according to str1<str2, str1=str2, str1>str2.[/LEFT]
      برای تعریف هر نوع متغییری هم کافیه کلمه ی eeprom رو اول اعلانت بنویسی
      کد:
      [LEFT]eeprom unsigned char Test[]= "Salaam";[/LEFT]
      و تا اونجایی که من میدونم نمیتونی داخل توابع رو ببینی.
      زمان تنها واحد حقیقی اندازه گیریه
      زمان وجود ماده رو اثبات میکنه
      بدون زمان هیچکدوم ما وجود نخواهیم داشت
      زمان یکتاست

      دیدگاه


        #4
        پاسخ : مشکل با آرایه

        در مورد سوال دوم یعنی ذخیره یک ارایه در eeprom سوال رو ریز تر می کنم
        اول اینکه در کدویژن چجوری میشه محل یا خانه حافظه eeprom را تعیین کرد؟
        اگر بشه خونه حافظه رو تعیین کرد با حلقه for میخام ارایه رو ذخیره کنم
        جدیدترین ویرایش توسط masror; ۲۰:۲۷ ۱۳۹۵/۱۰/۲۱.

        دیدگاه


          #5
          پاسخ : مشکل با آرایه

          توی کدویژن بصورت معمول نمیشه آدرس خونه eeprom رو تعریف کرد. در واقع شما باید مثل یه متغیر معمولی اونو در نظر بگیرید و فقط هنگام تعریف اون متغیر کلمه eeprom رو قبلش بیارید.
          www.gam-co.blogsky.com

          دیدگاه


            #6
            پاسخ : مشکل با آرایه

            نوشته اصلی توسط masror نمایش پست ها
            ول اینکه در کدویژن چجوری میشه محل یا خانه حافظه eeprom را تعیین کرد؟
            تو کدویژن به برنامت فایل eeprom.h رو الحاق کن
            بعد میتونی از یسری توابع که برای خواندن و نوشتن به صورت byte,worf,dword,float هست استفاده کنی.
            مثلن فرض کن میکروت مگا 32 باشه،این میکرو 1024 بایت ادرس حافظه داره،ینی میتونی 1024 آدرس برای ذخیره کردن اطلاعات داشته باشی،تو هر ادرس هم یه بایت میتونی ذخیره کنی اگه از تابع

            eeprom_write_byte(addr,value)
            استفاده کنی،استفاده ازشم مشخصه. مثلن فرض کن میخای ارایه زیرو ذخیره کنی،اینطور مینویسی :

            unsigned char array1[6]="salam";

            for(i=0;i<=4;i++)
            {
            eeprom_write_byte(i,array1[i]);
            delay_ms(5);
            }
            برای خوندن از ایپرام هم اینطور عمل میکنی :


            unsigned char array2[6];

            for(i=0;i<=4;i++)
            {
            array2[i]=eeprom_read_byte(i);
            }



            برای هربار نوشتن تو ایپرام به 5 میلی ثانیه زمان برای تثبیت نوشتن نیازه،پس فراموشش نکن تا دادت به طور صحیح ذخیره بشه.
            هر آرایه همیشه باید آخرین خونش به کاراکتر 0 یا 0\ ختم بشه،پس تعداد خونه های آرایتو همیشه یکی بیشتر انتخاب کن. من یبار سره همین 2 هفته درگیر بودم.چون توابعی که تو قراره باشون کار کنی که عمومن هم توی string.h هستن تهه یه آرایرو از همین کاراکتر میفهمن. مثلن اگه ارایت و 5تایی تعریف کنی و به همه 5 تاش یه کاراکتر بدی،بعد با تابع printf ارسالش کنی،چون تابع نمیتونه تهه آرایرو تشخیص بده شروع میکنه به ارسال کردن ارایه های بی معنی تا رندم به کاراکتر 0 برسه.

            دیدگاه


              #7
              پاسخ : مشکل با آرایه

              نوشته اصلی توسط ardeshir74 نمایش پست ها
              تو کدویژن به برنامت فایل eeprom.h رو الحاق کن
              بعد میتونی از یسری توابع که برای خواندن و نوشتن به صورت byte,worf,dword,float هست استفاده کنی.
              مثلن فرض کن میکروت مگا 32 باشه،این میکرو 1024 بایت ادرس حافظه داره،ینی میتونی 1024 آدرس برای ذخیره کردن اطلاعات داشته باشی،تو هر ادرس هم یه بایت میتونی ذخیره کنی اگه از تابع

              eeprom_write_byte(addr,value)
              استفاده کنی،استفاده ازشم مشخصه. مثلن فرض کن میخای ارایه زیرو ذخیره کنی،اینطور مینویسی :

              unsigned char array1[6]="salam";

              for(i=0;i<=4;i++)
              {
              eeprom_write_byte(i,array1[i]);
              delay_ms(5);
              }
              برای خوندن از ایپرام هم اینطور عمل میکنی :


              unsigned char array2[6];

              for(i=0;i<=4;i++)
              {
              array2[i]=eeprom_read_byte(i);
              }



              برای هربار نوشتن تو ایپرام به 5 میلی ثانیه زمان برای تثبیت نوشتن نیازه،پس فراموشش نکن تا دادت به طور صحیح ذخیره بشه.
              هر آرایه همیشه باید آخرین خونش به کاراکتر 0 یا 0\ ختم بشه،پس تعداد خونه های آرایتو همیشه یکی بیشتر انتخاب کن. من یبار سره همین 2 هفته درگیر بودم.چون توابعی که تو قراره باشون کار کنی که عمومن هم توی string.h هستن تهه یه آرایرو از همین کاراکتر میفهمن. مثلن اگه ارایت و 5تایی تعریف کنی و به همه 5 تاش یه کاراکتر بدی،بعد با تابع printf ارسالش کنی،چون تابع نمیتونه تهه آرایرو تشخیص بده شروع میکنه به ارسال کردن ارایه های بی معنی تا رندم به کاراکتر 0 برسه.
              برای تعریف هر نوع متغییری هم کافیه کلمه ی eeprom رو اول اعلانت بنویسی
              کد:
              eeprom unsigned char Test[]= "Salaam";



              دوراه پیشنهاد شد توسط دو دوست عزیز میشه بدونم این دو روش چه تفاوتی باهم دارند؟
              این دو فرم چه تفاوتی باهم دارند؟؟؟؟

              دیدگاه


                #8
                پاسخ : مشکل با آرایه

                این دو فرم چه تفاوتی باهم دارند؟؟؟؟

                دیدگاه


                  #9
                  پاسخ : مشکل با آرایه

                  نوشته اصلی توسط masror نمایش پست ها
                  این دو فرم چه تفاوتی باهم دارند؟؟؟؟
                  هیچ فرقی ندارن
                  اگه یه داده رو به روش آدرس دهی تو ایپرام ذخیره کنی، ینی اون روشی ک من گفتم، تنها مزیتش اینه که میدونی هر داده تو چه آدرسی ذخیره شده، ضمن اینکه دگ نیاز نیست ایپرام میکرو رو بهمراه فلش پروگرام کنی چون خود میکرو با توجه به برنامت و ادرسی که میدی داده رو تو ایپرام ذخیره میکنه، روش دیگه چون ادرسی نمیدی خود کامپایلر باید یه آدرس در نظر بگیره،این ادرس برای ایپرامه که مجبورت میکنه علاوه بر فایل hex فایل eep رو هم پروگرام کنی.
                  از نظر کارایی یجورن، بستگی به خودت داره، تو روش robo-amir باید حتمن یه متغیر تعریف کنی که این باعث اشغال رم میشه،البته اگه برنامت زیاد نباشه این مهم نیست و لی بدونیش بد نیست.

                  دیدگاه

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