اطلاعیه

Collapse
No announcement yet.

Pointers to pointers

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

    Pointers to pointers

    سلام دوستان من دوتا کد دارم که توی هیچ چیزی (هیچ مغازه عطاری) :eek: ندیدم اما الان کارم باهشون گیره ولی نمیدونم دقیقا چی کار میکنن و چجوری عمل میکنن .ممنون میشم اگر میدونید راهنمایی کنید
    1-
    کد:
    ROM **rom = (ROM **)(0x1fff1ff8 + 2 * sizeof(ROM **));
    2-
    کد:
    const CAN_ODCONSTENTRY myConstOD [] = {
    // index subindex length value
    { 0x1000, 0x00, 4, 0x54534554UL }, // "TEST"
    { 0x1018, 0x00, 1, 0x00000003UL },
    { 0x1018, 0x01, 4, 0x00000003UL },
    { 0x2000, 0x00, 1, (uint32_t)'M' },
    };
    
    یا مثلا
    
    #define CAN_MSGOBJ_DAT 0x00000000UL // data frame

    این UL قضیش چیه و اصلا چجوری ممکنه تویه یه مقدار هگز ما همچین چیزیرو بدیم.
    سوال اول هم بسیار شبیه Pointers to pointers اما خیلی پیچیده تره

    توضیح نحوه عملکرد همچین کدایی برام بیشتر مهمه تا صرفا توضیح خود همین کد ممنون از همگی

    #2
    پاسخ : Pointers to pointers

    UL که به کامپایلر میفهمونه عدد جلوشو بصورت unsigned long در نظر بگیره .
    در مورد اون اشاره گر به اشاره گر هم خب همچین چیزی تو سی هست. کاش کد رو با تگ چپ چین کردن درست وارد میکردی تا بشه اونو خوند بعد نظر داد

    ROM **rom = (ROM **)(0x1fff1ff8 + 2 * sizeof(ROM **));

    دیدگاه


      #3
      پاسخ : Pointers to pointers

      خب حالا شد
      اندازه همون اشاره گر به اشاره گر (که در اصل یه اشاره گرهو تفاوتش با اشاره گرهای دیگه اینه که اینجا به یه متغیر اشاره نمیشه بلکه به یه آدرس دیگه اشاره شده oo: )
      با عملگر sizeof تعداد بایتهای این اشره گر رو (که احتمالا 4 تاست) رو ضربدر دو میکنه (اینقدر فضا لازم داره) بعد با یک عدد جمع میکنه تا آدرس درست بدست بیاد!!!
      خلاصش اینکه داخل این اشاره گر آدرس یه مکانی که از 0x1fff1ff8 به اندازه دو برابر تعداد بایتهایی که این اشاره گر برای ذخیره آدرس لازم داره رو تو خودش ذخیره کرده
      با فرض اینکه اشاره گر 4 بایتی باشه آدرس ذخیره شده میشه 0x1fff1fff

      دیدگاه


        #4
        پاسخ : Pointers to pointers

        اگه برنامه ماله میکروه که 0x1fff1ff8 احتمالا آدرس ابتدای فضای sram هست. فک کنم میکروتون 512kB حافظه ی فلش داره . تو نسلای جدید مثل arm آدرس flash و sram و رجیسترا و ... دنبال هم میان .

        اون * 2 هم احتمالا برا اینه که دیتا مثلا برا میکرو 32 بیتی ذخیره میشه ولی دیتای شما 64 بیتیه( long)
        پشت به کنکور ، رو به سربازی...

        دیدگاه

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