اطلاعیه

Collapse
No announcement yet.

ذخیره متغیر در flash

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

    ذخیره متغیر در flash

    سلام دوستان
    کسی میدونه تو برنامه نویسی Xmega با اتمل استدیو چطور میشه مقادیر ثابت را به حافظه فلش منتقل کرد؟ دستوری مثله flash وجود داره که قبل از اسم متغیر قرار بگیره و اونو تو حافظه فلش ذخیره کنه.
    من یه آرایه دارم میخوام به فلش منتقلش کنم چون تعداد اعدادش زیاده.
    اینم کدم باید چی بهش اضافه کنم؟
    کد:
    static const uint16_t Data[4000]={};
    با تشکر

    #2
    پاسخ : ذخیره متغیر در flash

    می توانید بصورت زیر بنویسید:

    کد:
    #include <avr/pgmspace.h>
    
    const unsigned uint16_t Data[4000] PROGMEM ={
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : ذخیره متغیر در flash

      نوشته اصلی توسط طراح
      می توانید بصورت زیر بنویسید:

      کد:
      #include <avr/pgmspace.h>
      
      const unsigned uint16_t Data[4000] PROGMEM ={
      آرایه Data تعریف شده برای مقدار دهی به DAC استفاده میشد ولی وقتی من مطابق فرمایش شما عبارت PROGMEM را بعد از تعریف قرار دادم خروجی DAC دچار مشکل شد و با وجود اینکه مقادیر من پیوسته تغییر میکنن خروجی مثل سوئیچ بین چندتا مقدار ثابت تغییر میکنه و بیشتر وقتا صفره به نظر شما مشکل از کجاست؟

      دیدگاه


        #4
        پاسخ : ذخیره متغیر در flash

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

        دیدگاه


          #5
          پاسخ : ذخیره متغیر در flash

          کد:
          const unsigned int Data [2661] PROGMEM =
          این نمونه کده تعریف ماتریس داد و پایین هم کدی که داده را از آرایه میخونم
          کد:
          ISR (TCC0_OVF_vect)
          {
          	
          	// dac_wait_for_channel_ready(&DACA, DAC_CH0); 
          	dac_set_channel_value(&DACA,DAC_CH0,Data[i+1]);
          	dac_set_channel_value(&DACB,DAC_CH0,Data[i+2]);
          	PORTJ_OUT= (Data[i]<<2);
          	//PORTB_OUT=(Data[i]<<7);
          	i=i+3;
          	i%=i/Points_Num;
          	
          }

          دیدگاه


            #6
            پاسخ : ذخیره متغیر در flash

            نوشته اصلی توسط کنت مونت کریستو
            کد:
            const unsigned int Data [2661] PROGMEM =
            این نمونه کده تعریف ماتریس داد و پایین هم کدی که داده را از آرایه میخونم
            کد:
            ISR (TCC0_OVF_vect)
            {
            	
            	// dac_wait_for_channel_ready(&DACA, DAC_CH0); 
            	dac_set_channel_value(&DACA,DAC_CH0,Data[i+1]);
            	dac_set_channel_value(&DACB,DAC_CH0,Data[i+2]);
            	PORTJ_OUT= (Data[i]<<2);
            	//PORTB_OUT=(Data[i]<<7);
            	i=i+3;
            	i%=i/Points_Num;
            	
            }
            برای استفاده از مقدار ذخیره شده در حافظه فلش باید از ماکروی pgm_read_byte و ماکروهای هم خانوادش استفاده کنید.

            دیدگاه

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