اطلاعیه

Collapse
No announcement yet.

آدرس متغیر چند بایتی در C ؟

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

    آدرس متغیر چند بایتی در C ؟

    دوستان من میخوام بدون فراخونی یه تابع تو C ، یه متغیر 2 بایتی X تعریف کنم و مقدار دو تا رجیستر (1بایتی) رو بدون عمل شیفت داخل این متغیر بریزم.
    نتیجه این کار اینه که مثلا اگه بخوایم دیتای یه سخت افزار تو میکرو رو که شامل دو یا چند بایته رو بخونیم ، بدون اینکه یه تابع رو فراخونی کنیم ، تو کمترین پالس کلاک متغیر مون رو پدیت کنیم. :nice:
    الگوریتم من اینه که متغیر X رو موقعی که میخوایم تعریف کنیم ، بایت اولشو تو آدرس رجیستر اول و بایت دومشو تو آدرس رجیستر دوم تعریف کنیم.حالا اگه متغیر رو بخونیم یا بهش مقدار بدیم ، دیتا میره تو اون دو تا آدرس رجیستر ها نوشته میشه یا از اونا خونده میشه. :agree:

    حالا سینتکسش تو استاندارد C ؟؟

    #2
    پاسخ : آدرس متغیر چند بایتی در C ؟

    نوشته اصلی توسط smart.scan
    دوستان من میخوام بدون فراخونی یه تابع تو C ، یه متغیر 2 بایتی X تعریف کنم و مقدار دو تا رجیستر (1بایتی) رو بدون عمل شیفت داخل این متغیر بریزم.
    نتیجه این کار اینه که مثلا اگه بخوایم دیتای یه سخت افزار تو میکرو رو که شامل دو یا چند بایته رو بخونیم ، بدون اینکه یه تابع رو فراخونی کنیم ، تو کمترین پالس کلاک متغیر مون رو پدیت کنیم. :nice:
    الگوریتم من اینه که متغیر X رو موقعی که میخوایم تعریف کنیم ، بایت اولشو تو آدرس رجیستر اول و بایت دومشو تو آدرس رجیستر دوم تعریف کنیم.حالا اگه متغیر رو بخونیم یا بهش مقدار بدیم ، دیتا میره تو اون دو تا آدرس رجیستر ها نوشته میشه یا از اونا خونده میشه. :agree:

    حالا سینتکسش تو استاندارد C ؟؟
    قبل از تعریف تابع این واژه رو بنویس
    inline
    این طوری دیگه فراخوانی نمیشه و داخل کد توسط خود کامپایلر پیاده سازی میشه. بنابراین هم سریعتر اجرا میشه هم فراخوانی حذف میشه.

    دیدگاه


      #3
      پاسخ : آدرس متغیر چند بایتی در C ؟

      بهترین راه اینه :
      کد:
      #define  make_int(H,L)  ((int)(H)<<8)|L
      اما حالا که شما نمیخوای از شیفت استفاده کنی(که اصلا نمیفهمم برای چی) ، میتونی از union ساتفاده کنی.

      دیدگاه


        #4
        پاسخ : آدرس متغیر چند بایتی در C ؟

        آدرس متغیر X در واقع آدرس بایت کم ارزش اون هست
        ولی قبل از استفاده باید با تغییر نوع؛ اشاره گر به X رو تبدیل کنی به نوع اشاره گر char یا همون یک بایتی
        مثلا در کد زیر دو بایت X توسط پورت سریال ارسال میشن

        chptr=(char*)&X;
        putchar(*chptr);
        chptr++;
        putchar(*chptr);

        دیدگاه


          #5
          پاسخ : آدرس متغیر چند بایتی در C ؟

          من پست آخر رو دیدم یه سوالی بپرسم ازتون :biggrin:
          کد:
          float f;
          unsigned char a[4]={};
          .
          .
          .
          f=(float*)a;
          .
          .
          .
          توی این مثال تو کارکتر a 4 بایت معادل یه عدد اعشاری ریخته شده، آیا با دستوری که تو ادامه نوشتم، میشه اون عدد اعشاری رو از 4 بایت به دست آورد ؟
          ---------
          .
          .
          ...........

          دیدگاه


            #6
            پاسخ : آدرس متغیر چند بایتی در C ؟

            1- f یه متغیره ولی a اشاره گره . اون انتصاب آخرت درست نیست. شما آدرس a رو نوعش رو تغییر دادی ولی داری میریزیش داخل یه متغیر و نه اشاره گر
            2- کلا نفهمیدم میخوای چیکار کنی ولی شما اگه ترتیب چینش بایتهات داخل a درست باشه یعنی کم ارزشترین بایت در a[0] قرار گرفته باشه میتونی به کامپایلر بفهمونی از اون بایت و سه بایت بعدی بعنوان عدد float استفاده کنه

            دیدگاه


              #7
              پاسخ : آدرس متغیر چند بایتی در C ؟

              نوشته اصلی توسط mojalan
              1- f یه متغیره ولی a اشاره گره . اون انتصاب آخرت درست نیست. شما آدرس a رو نوعش رو تغییر دادی ولی داری میریزیش داخل یه متغیر و نه اشاره گر
              2- کلا نفهمیدم میخوای چیکار کنی ولی شما اگه ترتیب چینش بایتهات داخل a درست باشه یعنی کم ارزشترین بایت در a[0] قرار گرفته باشه میتونی به کامپایلر بفهمونی از اون بایت و سه بایت بعدی بعنوان عدد float استفاده کنه
              منم دقیقا میخوام همین کارو کنم، با چه دستوری میشه به کامپایلر فهموند از 4 بایت به عنوان عدد اعشاری استفاده کنه ؟
              ---------
              .
              .
              ...........

              دیدگاه


                #8
                پاسخ : آدرس متغیر چند بایتی در C ؟

                نوشته اصلی توسط ajapyy
                منم دقیقا میخوام همین کارو کنم، با چه دستوری میشه به کامپایلر فهموند از 4 بایت به عنوان عدد اعشاری استفاده کنه ؟
                به نظرم cast ای که انجام دادید درسته همین طوری خودش از a به عنوان float استفاده میکنه.
                float* هم درسته چون آرایه هم نوعی اشاره گره.

                دیدگاه


                  #9
                  پاسخ : آدرس متغیر چند بایتی در C ؟

                  نوشته اصلی توسط ajapyy
                  من پست آخر رو دیدم یه سوالی بپرسم ازتون :biggrin:
                  کد:
                  float f;
                  unsigned char a[4]={};
                  .
                  .
                  .
                  f=(float*)a;
                  .
                  .
                  .
                  توی این مثال تو کارکتر a 4 بایت معادل یه عدد اعشاری ریخته شده، آیا با دستوری که تو ادامه نوشتم، میشه اون عدد اعشاری رو از 4 بایت به دست آورد ؟
                  شما باید از این استفاده کنید

                  f = *(float*) a

                  فکر میکنم.

                  دیدگاه

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