اطلاعیه

Collapse
No announcement yet.

چند سوال در مورد کلاس تعریف متغیر register

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

    چند سوال در مورد کلاس تعریف متغیر register

    سلام
    ما چهار نوع حافظه در avr داریم که عبارتند از flash-sram-eeprom-register که حافظه register به cpu بسیار نزدیک بوده و سرعت آن بسیار بالا میباشد اما فقط 32 بایت بیشتر نمی باشد.اگر این مطلب درسته لطفآ در مورد دستور register توضیح بدید(اگر از این دستور استفاده کنیم با رجیستر ها تداخلی پیدا نمیکند؟)
    مثلآ دستور زیر
    کد:
    register char a
    [آموزشی] کنترل رله با پیامک توسط sim800l
    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
    صفحه اینستاگرام : ecdco_ir


    #2
    پاسخ : چند سوال در مورد کلاس تعریف متغیر register

    سلام
    همانطور که خودتون گفتید این کلاس از حافظه سرعت خیلی بالایی داره و برای امورات سرعت بالا کاربرد داره.
    تو این کلاس متغییر به جای اینکه در ram قرار بگیرد در صورت امکان در ثبات های cpu قرار میگرد و دارای سرعت دسترسی بسیار بالایی است که موجب سرعت گرفتن برنامه میشود.
    از این نوع متغیرها عموما برای شمارندهآ‌ی حلقهآ‌ها استفاده میآ‌شود، تا سرعت اجرای حلقه بالاتر رود.
    فقط توجه شود که استفاده از کلاس حافظهآ‌ی ثبات یک درخواست محسوب میآ‌شود. یعنی ممکن است بنا به هر دلیلی تخصیص حافظه از CPU امکان نداشته باشد. در این حالت کلاس حافظه در نظر گرفته نمیآ‌شود.
    این کلاس محدودیت هایی دارد که به شرح زیر است:
    همان طور که در بالا ذکر شد، متغیر از نوع ثبات در صورت امکان در یکی از ثباتآ‌های CPU قرار میآ‌گیرد . به دلیل کم بودن تعداد ثباتآ‌های CPU، تعداد محدودی متغیر میآ‌توانند در ثباتآ‌ها قرار بگیرند. پس اگر تعداد متغیر هایی که از نوع کلاس حافظه ثبات تعریف شده اند زیاد باشند، کامپایلر کلاس حافظه ثبات را از متغیرها حذف میآ‌کند .
    کلمه کلیدی register تنها میآ‌تواند برای متغیرهای محلی و همچنین پارامترهای تابع به کار گرفته شود .
    انواع متغیر که میآ‌توانند دارای کلاس حافظه ثبات باشند، در کامپیوترهای مختلف، متفاوت است . دلیل این امر هم این است که متغیرهای مختلف، تعداد بایت متفاوتی را به خود اختصاص میآ‌دهند .
    آدرس در مفهوم کلاس حافظه ثبات بی معنی است و زیرا متغیرها در ثباتآ‌های CPU قرار میآ‌گیرند و نه در RAM . پس در مورد ان کلاس حافظه، نمیآ‌توان از عملگر & برای اشاره به آدرس متغیرها استفاده کرد .

    توجه شود که اندازه متغییر در این کلاس به اندازه طول رجیستر میتواند باشد.
    همچنین عملیات آدرس دهی متغییر برای جایگیری در ثبات توسط کامپایلر انجام میشود و نیاز نیست که محل قرار گیری توسط برنامه نویس مشخص شود.

    http://www.cprogrammingexpert.com/C/Tutorial/storage_classes/register.aspx
    [img width=281 height=100]http://cdn.persiangig.com/preview/acPBCNLNNr/images.jpg[/img]

    دیدگاه


      #3
      پاسخ : چند سوال در مورد کلاس تعریف متغیر register

      نوشته اصلی توسط reza babatabar
      سلام
      ما چهار نوع حافظه در avr داریم که عبارتند از flash-sram-eeprom-register که حافظه register به cpu بسیار نزدیک بوده و سرعت آن بسیار بالا میباشد اما فقط 32 بایت بیشتر نمی باشد.اگر این مطلب درسته لطفآ در مورد دستور register توضیح بدید(اگر از این دستور استفاده کنیم با رجیستر ها تداخلی پیدا نمیکند؟)
      مثلآ دستور زیر
      کد:
      register char a
      نیازی به اینکار نیست
      کامپایلر پیش فرض تا جایی که محدودیتی پیش نیاد همه ی متغیر ها رو از نوع رجیستر در نظر می گیره
      تنها هنگامی که نباید اینکارو بکنه در تعریف متغیر از واژه ی کلیدی volatile استفاده میشه.
      If the wind will not serve, take to the oars

      دیدگاه


        #4
        پاسخ : چند سوال در مورد کلاس تعریف متغیر register

        نوشته اصلی توسط ASHIT AXAR
        نیازی به اینکار نیست
        کامپایلر پیش فرض تا جایی که محدودیتی پیش نیاد همه ی متغیر ها رو از نوع رجیستر در نظر می گیره
        تنها هنگامی که نباید اینکارو بکنه در تعریف متغیر از واژه ی کلیدی volatile استفاده میشه.
        این به نوع کامپایلر بستگی داره.
        [img width=281 height=100]http://cdn.persiangig.com/preview/acPBCNLNNr/images.jpg[/img]

        دیدگاه

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