اطلاعیه

Collapse
No announcement yet.

ذخیره عدد اعشاری در 24C512 - EEprom

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

    ذخیره عدد اعشاری در 24C512 - EEprom

    سلام
    دوستان یه موضوعی فکر منو مشغول کرده . اونم اینکه عدد float خودم رو که 4 بایت هست چطوری در حافظه 24c512 ذخیره کنم .
    من دیتا هام رو به تابعی می دم که ورودیش 1 بایتی هست از نوع char و دیتا رو توسط رجیستر های میکرو میفرسته به i2c و ذخیره می کنه .
    ولی نمی دونم عدد 4 بایتی خودم رو چطوری بهش بدم اگر هم تبدیل کنم خوب عدد ممکنه رند بشه و نمی خوام این اتفاق بیافته .
    ؟؟؟؟؟؟؟ :sad:
    همین طور در مورد عدد int که دوبایتی هست چی ؟ نیم تونم به char هم تبدیلش کنم چون مقدارش بالاتر از عدد 127 و 255 هست مثلا ممکنه به 40000 هم برسه .
    oo:
    - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

    #2
    پاسخ : ذخیره عدد اعشاری در 24C512 - EEprom

    یه جورایی می خوام عدد floatam رو به 4 بایت تقسیم کنم و جدا جدا ذخیره کنم و بعد دوباره بتونم بخونم و بهم بچسبونم . نمی دونم راه بهتری هست ؟ یا چطور این کارو انجام بدم ؟
    - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

    دیدگاه


      #3
      پاسخ : ذخیره عدد اعشاری در 24C512 - EEprom

      در اعداد با فرمت Little Endian همواره کم ارزشترین بایت در کم ارزشترین آدرس ذخیره میشه. برای بدست آوردن تک تک بایتها آدرس اون عدد رو بدست بیار ؛ نوع آدرس رو عوض کن و بصورت یه بایت باهاش رفتار کن و بالعکس
      در برنامه زیر یه عدد float توسط پورت سریال ارسال شده. (عدد int هم که دو بایتیه)

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


      در خط اول آدرس متغیر float که آدرس کم ارزشترین بایتش هست رو بدست میاریم با &tempfloat
      بعد نوع این اشاره گر رو از عدد float به char تغییر میدیم و میریزیم داخل chptr
      اینکار رو بهش میگن typecast

      دیدگاه


        #4
        پاسخ : ذخیره عدد اعشاری در 24C512 - EEprom

        دوست عزیز درست متوجه نشدم

        ببین من می خوام یه تابع داشته باشم که متغییرم از نوع float رو بهش بدم . و آدرس ذخیره سازی رو هم بدم . بیاد عدد float رو 4 تا بایت کنه و اولیش رو تو آدرس داده شده بریزه و بعدی ها رو هم توی آدرس های بعدیش .
        با مثال شما نفهمیدم چطوری متغییر مثلا A من که از نوع float هست به D1, D2,D3,D4 که از نوع CHAR هستن تبدیل بشه ؟
        - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

        دیدگاه


          #5
          پاسخ : ذخیره عدد اعشاری در 24C512 - EEprom

          برنامه رو عوض کردم
          نوشته اصلی توسط mojalan
          در اعداد با فرمت Little Endian همواره کم ارزشترین بایت در کم ارزشترین آدرس ذخیره میشه. برای بدست آوردن تک تک بایتها آدرس اون عدد رو بدست بیار ؛ نوع آدرس رو عوض کن و بصورت یه بایت باهاش رفتار کن و بالعکس
          در برنامه زیر یه عدد float توسط پورت سریال ارسال شده. (عدد int هم که دو بایتیه)

          chptr=(char*)&A;
          D1=(*chptr);
          chptr++;
          D2=(*chptr);
          chptr++;
          D3=(*chptr);
          chptr++;
          D4=(*chptr);


          در خط اول آدرس متغیر float که آدرس کم ارزشترین بایتش هست رو بدست میاریم با &tempfloat
          بعد نوع این اشاره گر رو از عدد float به char تغییر میدیم و میریزیم داخل chptr
          اینکار رو بهش میگن typecast

          دیدگاه


            #6
            پاسخ : ذخیره عدد اعشاری در 24C512 - EEprom

            خیلی ممنون کاملا متوجه شدم . بسیار عالی :applause:
            - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

            دیدگاه

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