اطلاعیه

Collapse
No announcement yet.

چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

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

    چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

    سلام دوستان عزیز.
    من مدتیه که دارم برنامه نویسی AVR رو باکامپایلر IAR انجام میدم. منتهی مشکلی که دارم اینه که نمیدونم چطوری یک داده ثابت یا یک آرایه رو در حافظه فلش میکرو تعریف کنم و سپس اونو بخونم.
    من با WinAVR و Codevision کار کردم . میدونم که در Winavr با فایل pgmspace.h میشه این کارو کرد و در مورد Codevision که همه اطلاع دارن.ولی تو IAR نتونستم. فقط تو Help برنامه یه چیزایی پیدا کردم،
    مثلاً: __flash char str1[] = "Message 1";
    اگه از دوستان کسی هست که راهنماییم کنه خیلی ممنون میشم.

    #2
    پاسخ : چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

    در ابتدای تعریف متغیر
    __flash

    بگذارید تا در فلش قرار گبرد.

    راهنمای کامپایلر را مطالعه کنید

    دیدگاه


      #3
      پاسخ : چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

      دوست عزیز ممنون که جواب دادید.
      ولی شاید بنده سوالم رو درست مطرح نکردم. من در مورد تعریف متغیر (ثوابت) مشکلی ندارم. مشکل من اینه که نمیدونم چطور این متغیر ها رو بخونم. مخصوصاً اگه این متغیر رشته ای باشه و بخوام اونها رو در یک تابع فراخوانی کنم.
      ببینید به عنوان مثال در WinAVR با استفاده از ماکروی pgm_read_byte یا pgm_read_word که در فایل pgmspace.h موجوده میشه متغیر های ذخیره شده در فلش رو خوند:

      static unsigned int LCD_SegTable[] PROGMEM =
      {
      0xEAA8, // '*'
      0x2A80, // '+'
      0x4000, // ','
      0x0A00, // '-'
      0x0A51, // '.' Degree sign
      0x4008, // '/'
      }

      و با دستور زیر میشه این آرایه رو در یک تابع فراخوانی کرد:
      pgm_read_word(&LCD_SegTable[4])



      ولی با اینکه فایل pgmspace.h در IAR موجوده ولی تا حدودی با WinAVR متفاوته و منم هر چی تو Help برنامه میگردم توضیح واضحی نمیبینم.

      آیا از دوستان کسی میدونه چطوری میشه متغیرهای ذخیره شده در Flash رو به عنوان آرگومان به تابع فرستاد؟

      دیدگاه


        #4
        پاسخ : چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

        سلام؛

        GCC چون اساساً یک کامپایلر Multi-platfom است که ابتدا برای ماشین های با معماری Von-nueman و Modified Harvard نوشته شده روی پورت های ماشین های Harvard مانند AVR با کمک توابع pgmspace دسترسی به فضای برنامه را امکان پذیر میکنه که IAR اینطور نیست و این مسایل Transparent-to-user است. بنابراین شما با یک اشاره گر عادی می تونید دسترسی به جداول و داده های حافظه ی Flash داشته باشید.
        There is nothing so practical as a good theory. — Kurt Lewin, 1951

        دیدگاه


          #5
          پاسخ : چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

          سلام جناب سپاس یار .
          خیلی ممنونم که جوابم دادین . متوجه شدم. تو Help نرم افزار هم به همین مواردی که فرمودید برخوردم که میشد داده ها رو از طریق اشاره گر مورد استفاده قرار داد مثل Codevision. باز هم از توضیحات شما متشکرم.

          دیدگاه


            #6
            پاسخ : چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

            ok

            دیدگاه


              #7
              پاسخ : چگونه میتوان در کامپایلر IAR AVR آرایه ها و ثوابت را در Flash نوشت و خواند؟

              در IARدسترسی به آرایه های نوشته شده در flash به سادگی میسر است و کافی است آرایه را با index مورد نظر در برنامه بکار ببرید. مثال:
              #include<ioavr.h>
              __flash unsigned char a[]={0,1,5,0xff};
              void main()
              {
              unsigned char b;
              b=a[2];
              ...
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه

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