اطلاعیه

Collapse
No announcement yet.

خواند و نوشتن روی eeprom میکرو avr

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

    #31
    پاسخ : خواند و نوشتن روی eeprom میکرو avr

    اگر منظورت رو خوب متوجه شده باشم میگی تو روتین وقفه ممکنه r16 تغییر کنه و اینطوری eedr هم مقدارش اون چیزی که ما میخوایم نمیشه.
    خوب ما ۳۲ رجیستر کاری بیشتر نداریم،شما فرض کن ۲۰/۰۰۰ خط برنامه بنویسیم که هر جایی ممکنه وقفه ای رخ بده،خوب حالا با این اوصاف که ممکنه هر جایی از برنامه مشکلی پیش بیاد.
    برای همین اگر قراره تو روتین وقفه مثلاً از r16 استفاده بشه،قبل استفاده مقدار قبلی r16 رو یه جایی ذخیره میکنیم(اصطلاحاً پوش میکنیم) و بعد انجام عملیات قبل دستور reti دوباره مقدار قبلی r16 رو برمیگردونیم(اصطلاحاً پاپ میکنیم)
    avr که خوبه ۳۲ رجیستر داره،pic فقط یه رجیستر کاری بیشتر نداره و ازش باید تو روتین های مختلف استفاده بشه،حتماً باید از دستور پوش و پاپ استفاده کنیم
    اینا که گفتم برا برنامه نویسی در سطح اسمبلی هست،واگرنه اگه کد اسمبلی تولید شده توسط کدویژن رو نگاه کنید متوجه خواهید شد که این کار رو انجام میده،پس این تصور اشتباهه که با اومدن یه وقفه مقدار رجیستر های کاری تغییر میکنه در هنگام بازگشت.
    البته بعضی موقع نیازه که تغییرات رجیستر در روتین وقفه بعد بازگشت هم باقی بمونند که اون فرق میکنه
    به هر حال این برنامه نویسه که باید با توجه به نیاز از پوش و پاپ استفاده کنه
    [آموزشی] کنترل رله با پیامک توسط sim800l
    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
    صفحه اینستاگرام : ecdco_ir

    دیدگاه


      #32
      پاسخ : خواند و نوشتن روی eeprom میکرو avr

      نوشته اصلی توسط reza0506 نمایش پست ها
      اگر منظورت رو خوب متوجه شده باشم میگی تو روتین وقفه ممکنه r16 تغییر کنه و اینطوری eedr هم مقدارش اون چیزی که ما میخوایم نمیشه.
      خوب ما ۳۲ رجیستر کاری بیشتر نداریم،شما فرض کن ۲۰/۰۰۰ خط برنامه بنویسیم که هر جایی ممکنه وقفه ای رخ بده،خوب حالا با این اوصاف که ممکنه هر جایی از برنامه مشکلی پیش بیاد.
      برای همین اگر قراره تو روتین وقفه مثلاً از r16 استفاده بشه،قبل استفاده مقدار قبلی r16 رو یه جایی ذخیره میکنیم(اصطلاحاً پوش میکنیم) و بعد انجام عملیات قبل دستور reti دوباره مقدار قبلی r16 رو برمیگردونیم(اصطلاحاً پاپ میکنیم)
      avr که خوبه ۳۲ رجیستر داره،pic فقط یه رجیستر کاری بیشتر نداره و ازش باید تو روتین های مختلف استفاده بشه،حتماً باید از دستور پوش و پاپ استفاده کنیم
      اینا که گفتم برا برنامه نویسی در سطح اسمبلی هست،واگرنه اگه کد اسمبلی تولید شده توسط کدویژن رو نگاه کنید متوجه خواهید شد که این کار رو انجام میده،پس این تصور اشتباهه که با اومدن یه وقفه مقدار رجیستر های کاری تغییر میکنه در هنگام بازگشت.
      البته بعضی موقع نیازه که تغییرات رجیستر در روتین وقفه بعد بازگشت هم باقی بمونند که اون فرق میکنه
      به هر حال این برنامه نویسه که باید با توجه به نیاز از پوش و پاپ استفاده کنه
      حالا همه جا که وقفه پیش نمیاد - همه ی این رجیستر ها هم تغییر نمیکنن (فقط چنتا شون) - زیادم نمی خواد به این چیزا حساس بشین
      پیر کرد این برنامه نویسی هم مارو
      یه استادی داشتم که میگف کرانه ها رو همیشه خوب بررسی کنید
      جایی نوشته بودم اگه X == endpoint اونوقت شرط تموم بشه
      استادم بهم می گفت بنویس فقط تا وقتی کمتر مساوی از endpoint هستش شرط برقرار باشه
      بهش میگفتم خب چه فرقی میکنه؟ اون که هیچوقت بیشتر از endpoint نمیشه
      میگفت آره - ولی اگه به هر دلیلی شرط کمتر مساوی رو رد کنه زود خودشو درست میکنه درحالی که اگه فقط شرط مساوی رو رد کنه دیگه تموم نمیشه
      بگذریم- ما که دیگه رفتیم. رفتنی کلید ها رو بزارید زیر پا دری
      If the wind will not serve, take to the oars

      دیدگاه


        #33
        پاسخ : خواند و نوشتن روی eeprom میکرو avr

        سلام دوستان من تو پروگرام کردن eeprom به مشکل خوردم،من وقتی دارم پروگرام میکنم میگه که eeprom خالی هستش و آیا میخوای فایلی را اضافه کنی،منم yes رو میزنم و فایل eeprom مد نظرم رو ور میدارم ولی باز میگه eeprom خالی هستش.
        به نظرتون مشکل کار از کجاس؟
        باتشکر

        دیدگاه


          #34
          پاسخ : خواند و نوشتن روی eeprom میکرو avr

          سلام خسته نباشد
          برای کپی کردن متغییر آرایه ای از نوع eeprom باید از چه دستوری استفاده کرد.
          مثلا میخوایم:


          eeprom char a[]="alireza";
          []char z;


          aرا توی z کپی کنیم با strcpy تست کردم نشد.

          دیدگاه

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