NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3380 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 6 از 6

موضوع: معادل متغییر overlay تو زبان c

  1. #1
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    Exclamation معادل متغییر overlay تو زبان c

    سلام
    توی کامپایلر بیسیک یه نوع متغییر هست به نام overlay
    که به نظر من خیلی عالی هست
    شما مثلا یه آرایه ۲۰ بایتی داری که توش ۵ تا متغییر ۳۲ بیتی ذخیره شده
    حالا اگر عدد ۳۲ بیتی مثلا سوم رو بخواهی
    یه آرایه ۳۲ بیتی با طول ۵ تعریف میکنی بصورت overlay که آدرس شروعش ،آدرس شروع اون آرایه ۲۰ بایتی هست و حالا برای بدست اوردن متغیر سوم ارایه سوم رو می خونی
    اینکار نیاز به تبدیل و... حین اجرای برنامه از بین میبره و زمان کامپایل ،کامپایلر آدرس دهی میکنه
    حالا سوال من اینه که معادل روش تو زبان C چی هست؟
    توضیحات رو دادم که اگر کسی بیسیک رو آشنایی نداره و سی رو بلد هست در جریان قرار بگیره
    ممنون

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام
    فکر کنم من درست نفهمیدم.
    توی c هم شما می تونی یه آرایه 32 بیتی با هر طولی که می خواه تعریف کنی و به آرایه هاش دسترسی داشته باشی مشکلش چیه؟

  4. تشکرها از این نوشته :


  5. #3
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    کد:
    char Array[20];
    unsigned long *pArray=(unsigned long *)Array;
    unsigned long data=pArray[3];

  6. کاربران : 2 تشکر کرده اند از شما mrm برای ارسال این پست سودمند:


  7. #4
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    پیش فرض

    دستت درد نکنه ولی این نمونه رو امتحان کردم جواب نداد
    اینطوری امتحان کردم
    کل آرایه رو مقدار صفر دادم به هر آیتمش
    بعد تو متغییر data یه عدد ریختم، بعد چک کردم ببینم عناصر آرایه تغییر کردن؟ که تغییر نمی کنن
    اگه آدرسها یکی شده باشند بایستی وقتی من تو متغییر دیتا عدد میریزم عناصر متناظرش تو آرایه تغییر کنن که نشد.
    یعنی من اگر یه متغییر ۱۶ بیتی داشته باشم و دوتا متغییر هشت بیتی که اولیش آدرسش آدرس بایت اول ۱۶ بیتی باشه و دومیش آدرس بایت دوم ۱۶ بیتی
    حالا من هروقت تو متغییر ۱۶ بیتی مینویسم چیزی رو مثل این می مونه که تو اون دوتا متغییر هشت بیتی نوشتم و بالعکس
    ویرایش توسط ppittl : 22-01-2015 در ساعت 17:44

  8. #5
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    سلام
    ببینید الان pArray به صورت 32 بیتی به ارایه Array اشاره میکنه.
    شما اگر بخواید مقدار ارایه رو به صورت 32 بیتی تغییر بدید از pArray[i]s
    استفاده کنید و اگر بخواید به صورت 8 بیتی تغییر رو بدید باید از Array استفاده کنید.
    متغییر data رو فقط برای نشان دادن خونه سوم ارایه pArray گذاشتم.
    کاری که شما گفتید روش های دیگه ایی هم داره مثل استفاده از union
    شاید این دو مثال زیر بهتر باشه:

    کد:
    // Example 1 : Using pointer
    dword Data = 0xAABBCCDD;
    word *pwData = (word *)&Data;
    byte *pbData = (byte *)&Data;
    pwData[1] = 0xFFEE;
    pbData[2] = 0x00;
    
    // Example 2 : Using union
    typedef union 
    {
        dword    Data;
        struct
        {
            word Data_L;
            word Data_H;
        }w;
        struct 
        {
            byte Data_Byte[4];
        }b;
    }DwordStruct;
    
    DwordStruct    dw;
    dw.Data = 0xAABBCCDD;
    dw.Data_H = 0xFFEE;
    dw.b.Data_Byte[2] = 0x00;
    تنها نکته ایی که باید بهش توجه کنید little-endian و یا big-endian بودن پردازنده هست .

  9. تشکرها از این نوشته :


  10. #6
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    پیش فرض

    خودشه
    با کیل تست کردم ok بود
    دست گلت درد نکنه

موضوعات مشابه

  1. [درخواست] طراحی محافظ اتو پاور
    توسط Ma3ood در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 2
    آخرين نوشته: 31-12-2013, 18:39
  2. سوال : 1768 تو لیتوکس (ابونتو)
    توسط microprocesor_2002 در انجمن LPC series (NXP)
    پاسخ: 7
    آخرين نوشته: 19-05-2013, 13:47
  3. مشکل تو پروگرمر کمممممممک
    توسط sky_man847 در انجمن AVR
    پاسخ: 27
    آخرين نوشته: 04-08-2012, 19:48
  4. پروژه gsm تو مجله دهم
    توسط n340 در انجمن AVR
    پاسخ: 0
    آخرين نوشته: 29-06-2010, 01:05

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •