اطلاعیه

Collapse
No announcement yet.

چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

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

    چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

    دوستان سلام

    من میخواستم یک متغیر رو در یک آدرس مشخص از حافظه مثلا 0x2009تعریف کنم کامپایلرم atmel studio و میکروم
    atxmega16a4u

    با تشکر از لطف دوستان :smile:

    #2
    پاسخ : چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

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

    کد:
    #define myvar (*(unsigned char*)0x2009)


    این تاپیک را هم ببینید:

    http://www.avrfreaks.net/index.php?n...ic&t=63859
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : پاسخ : چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

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

      کد:
      #define myvar (*(unsigned char*)0x2009)


      این تاپیک را هم ببینید:

      http://www.avrfreaks.net/index.php?n...ic&t=63859
      با این روش احتمال دارد کامپایلر یک متغییر در همین آدرس تعریف کرده باشد .
      در واقع با این روش همان طور که خود شما گفتید تنها به این آدرس با فرمت (unsigned char ) دسترسی پیدا کرده ایم .
      حالا اگر بخواهیم یک متغیر در آدرس بخصوص تعریف کنیم چه باید کرد ؟
      از جمله ی رفتگان این راه دراز
      باز آمده ای کو که به ما گوید راز
      هان بر سر این دو راهه از روی نیاز
      چیزی نگذاری که نمی آیی باز

      دیدگاه


        #4
        پاسخ : چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

        AVR Gcc دارای Section های مشخص مانند data. و bss. برای ذخیره سازی متغیرها است:

        http://www.nongnu.org/avr-libc/user-..._sections.html

        یک روش پیشنهادی این است که Section مستقلی را با حجم مشخص (مثلا 10 بایت در مثال زیر) تعریف کنید:

        کد:
        unsigned char mydata[10] __attribute__ ((section(".mysection")));


        سپس در فایل خروجی پروژه با پسوند lss محدوده آدرس این بخش را مشاهده کنید و با همان روشی که در پست قبل توضیح دادم به آدرس های موجود در این Section دسترسی پیدا کنید که در این صورت با متغیر های تعریف شده در سایر Section ها متفاوت خواهد بود. در همین رابطه امکان تعریف یک Section در محدوده آدرس مشخص هم وجود دارد که مقداری پیچیده است و در این رابطه می توانید به محتوای تاپیک های زیر مراجعه کنید:

        http://www.avrfreaks.net/index.php?n...c&t=125940

        http://www.avrfreaks.net/index.php?n...c&t=105291
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

          بطوری که در help http://127.0.0.1:47873/help/1-1380/m...p;locale=en-US
          توضیح داده شده با استفاده از این روش :-Wl,-section-start=anewdatasegment=0x800
          در قسمت memory setting میتوان یک اسکریپت به لینکر داد و آدرس سکشن دلخواه را مشخص کرد .
          ولی زمانی که این اسکریپ "Wl,-section-start=.mysection=0x800100" را وارد میکنم با خطای زیر مواجه میشوم :

          Error 1 invalid argument to option "--section-start" 1 1 GccApplication2
          از جمله ی رفتگان این راه دراز
          باز آمده ای کو که به ما گوید راز
          هان بر سر این دو راهه از روی نیاز
          چیزی نگذاری که نمی آیی باز

          دیدگاه


            #6
            پاسخ : چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

            با لحاظ اینکه در XMEGA آدرس sram از 0x2000 شروع می شود و 0x100 نمی تواند به عنوان آدرس section انتخاب شود، در صورت استفاده از محیط Toolchain در بخش Memory settings کافی است در پنجره sram فقط نام section مورد نظر را با آدرس دلخواه مساوی قرار دهید و جمع با 0x80000 هم بصورت خودکار انجام می شود. به عنوان مثال:

            کد:
            mysection=0x2100
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              #7
              پاسخ : پاسخ : چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

              نوشته اصلی توسط طراح
              با لحاظ اینکه در XMEGA آدرس sram از 0x2000 شروع می شود و 0x100 نمی تواند به عنوان آدرس section انتخاب شود، در صورت استفاده از محیط Toolchain در بخش Memory settings کافی است در پنجره sram فقط نام section مورد نظر را با آدرس دلخواه مساوی قرار دهید و جمع با 0x80000 هم بصورت خودکار انجام می شود. به عنوان مثال:

              کد:
              mysection=0x2100
              طول ایت section چقدر است؟
              سرچ کردم چیزی پیدا نکردم .
              از جمله ی رفتگان این راه دراز
              باز آمده ای کو که به ما گوید راز
              هان بر سر این دو راهه از روی نیاز
              چیزی نگذاری که نمی آیی باز

              دیدگاه


                #8
                پاسخ : چگونه می توان یک متغیر را در یک آدرس مشخص از حافظه در atmel studio تعریف کرد؟؟؟

                بسته به متغیرهایی که در این section تعریف می کنید، سایز آن در فایل lss قابل مشاهده است.
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه

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