ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 4 از 4
  1. #1
    2009/08/26
    146
    2

    volatile unsigned long

    volatile unsigned long
    اين چه نوع متغييري هست
  2. #2
    2009/10/21
    تهران
    2,517
    218

    پاسخ : volatile unsigned long

    نقل قول نوشته اصلی توسط ieee7
    volatile unsigned long
    volatile برای متغیرهایی بکار میره که تغییر اونها توسط برنامه کنترل نمیشه !؟ (مثلا مقدار یه شمارنده سیستم) و unsigned long هم یه مقدار صحیح بدون علامت long .
    دوستان اگه ممکنه توضیحات رو تکمیل یا اصلاح کنند
  3. #3
    2010/05/09
    930
    40

    پاسخ : volatile unsigned long

    با سلام

    volatile به کامپايلر اعلام مي کند که متغير مورد نظر را در بهينه سازي براي سرعت يا حجم برنامه ، ... مشارکت ندهد.

    يعني در هر قسمت از برنامه که از اين متغير استفاده شده ، جديدترين مقدار آن را محاسبه و استفاده کند.

    بعضي جاها کامپايلر فرض مي کند يک متغير تغيير نکرده و بعضي محاسبات را حذف مي کند ،
    و مقدار آن که در جايي ديگر از برنامه بدست آمده( و مورد نظر برنامه نويس نبوده ) ، استفاده مي شود و خطا ايجاد مي کند.


    لذا ، متغير هاي global و آنهاييکه در اينتراپت ها استفاده مي شوند، بايد با کلمه volatile همراه شوند.

    با سپاس
    گشتی در لاله زار
    http://www.eca.ir/forum2/index.php?topic=76138.0

    http://www.eca.ir/forum2/index.php?topic=76141
  4. #4
    2008/09/02
    اصفهان
    1,897
    41

    پاسخ : volatile unsigned long

    البته باید به این نکته ریز هم توجه کرد که اگر متغیری که volatile تعریف شده ممکن باشه که در طی دو دسترسی مجزا مقدارش اخذ بشه و ضمنا در یک روال وقفه مقدار این متغیر تغییر کنه باید در هنگام اخذ مقدار این متغیر در یک روال عادی دسترسی به این متغیر بلوکه بشه. البته در حالت فعلی چون ARM دارای ساختار 32 بیتی هست و در صورتی که از کد حالت thumb استفاده نشه مقدار این متغیر با اجرای فقط یک دستور اخذ میشه این مورد رو نباید در نظر گرفت ولی مثلا کد زیر رو در نظر بگیرین:


    volatile unsigned long long n;

    void some_irq(void) __irq
    {
    n++
    }


    void main(void)
    {
    for( ; ; )
    {
    if( n == 1 )
    {
    // do something
    }
    }
    }


    متغیر n یک متغیر 64 بیتی هست. روی یک سیستم 32 بیتی این مقدار بایستی در طی اجرای حداقل دو دستور اخذ بشه ولی ممکنه بعد از اجرای دستور اول و قبل از اجرای دستور دوم وقفه اجرا بشه و این باعث میشه که سیستم عدد اشتباهی رو برداره. پس بایستی یک کد کمکی برای اخذ این مقدار استفاده بشه یک چیزی مثل این:


    volatile unsigned long long n;

    void some_irq(void) __irq
    {
    n++
    }

    unsigned long long get_n(void)
    {
    unsigned long long result;

    __disable_interrupts();
    result = n;
    __enable_interrupts();

    return n;
    }

    void main(void)
    {
    for( ; ; )
    {
    if( get_n() == 1 )
    {
    // do something
    }
    }
    }


    بطور کلی و ساده هم volatile میگه "هر وقت احتیاج شد از این متغیر استفاده کنی (عمل read) یک کپی تازه از این متغیر بگیر و استفاده کن."
نمایش نتایج: از 1 به 4 از 4

موضوعات مشابه

  1. متغيير volatile
    توسط mostafa6369 در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2016/04/27, 14:36
  2. عدم تعریف متغییر unsigned long int در کد ویژن ورژن 2.05.3
    توسط ahmad2000 در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2013/09/07, 11:33
  3. static,extern,Volatile
    توسط hunybal در انجمن C , C++ , C#
    پاسخ: 1
    آخرين نوشته: 2012/09/22, 13:09
  4. تبدیل unsigned char به int
    توسط s699fx_bpr در انجمن NXP
    پاسخ: 4
    آخرين نوشته: 2012/02/10, 21:50
  5. تعریف unsigned char به جای int
    توسط amir-ak در انجمن میکروکنترلرهای AVR
    پاسخ: 6
    آخرين نوشته: 2011/10/13, 01:14

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •