اطلاعیه

Collapse
No announcement yet.

متغییر volatile

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

    متغییر volatile

    منظور از تعریف این نوع متغییر چیست
    http://s6.picofile.com/file/8248944300/5.jpg

    #2
    پاسخ : متغییر volatile

    نوشته اصلی توسط mostafa6369
    منظور از تعریف این نوع متغییر چیست
    http://s6.picofile.com/file/8248944300/5.jpg
    به معنای متغیر عمومی یا سراسری است (در همه ی توابع از جمله وقفه ها وجود داره) که معمولا برای متغیرهایی که در وقفه ها پر میشه استفاده میکنیم.
    Reveng will surely come... Your hard time are ahead
    // - - - - - - - - - -
    برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
    // - - - - - - - - - -
    اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
    // - - - - - - - - - -

    دیدگاه


      #3
      پاسخ : متغییر volatile

      نوشته اصلی توسط سعید خیری
      به معنای متغیر عمومی یا سراسری است (در همه ی توابع از جمله وقفه ها وجود داره) که معمولا برای متغیرهایی که در وقفه ها پر میشه استفاده میکنیم.
      ممنون
      متغییر عمومی را میتوان بیرون از توابع نیز معرفی نمود که بصورت متغییر سراسری مطرح میشه .خوب اگر این کار را انجام بدم .فرقی بین این روش و اون روش که کلمه Volatille اورده شده دارد یا خیر؟؟

      دیدگاه


        #4
        پاسخ : متغییر volatile

        نوشته اصلی توسط mostafa6369
        ممنون
        متغییر عمومی را میتوان بیرون از توابع نیز معرفی نمود که بصورت متغییر سراسری مطرح میشه .خوب اگر این کار را انجام بدم .فرقی بین این روش و اون روش که کلمه Volatille اورده شده دارد یا خیر؟؟
        بستگی به سبک برنامه نویسی داره ، معمولا متغیر Volatile معمولا در برنامه های چند ریسمانی یا شبیه چند ریسمانی استفاده میشه. متغیر عمومی که فرمودید اگر در جای درست تعریف نشه در روتین های وقفه شناخته نمیشه
        Reveng will surely come... Your hard time are ahead
        // - - - - - - - - - -
        برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
        // - - - - - - - - - -
        اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
        // - - - - - - - - - -

        دیدگاه


          #5
          پاسخ : متغییر volatile

          نوشته اصلی توسط سعید خیری
          بستگی به سبک برنامه نویسی داره ، معمولا متغیر Volatile معمولا در برنامه های چند ریسمانی یا شبیه چند ریسمانی استفاده میشه. متغیر عمومی که فرمودید اگر در جای درست تعریف نشه در روتین های وقفه شناخته نمیشه
          اگر میشه با یه مثالی بیشتر توضیح بدین.ممنون

          دیدگاه


            #6
            پاسخ : متغییر volatile

            نوشته اصلی توسط mostafa6369
            اگر میشه با یه مثالی بیشتر توضیح بدین.ممنون
            حتما :job:

            //------------------------------------
            اگر چه نیاز به توضیحات مفصلی داره اما در چند خط مختصر میگم که State machine مثال کاملا بارز و عالی میتونه باشه . در این سبک برنامه نویسی مسئولیت CPU در هر لحظه را با یک متغیر مشخص میکنم.

            اگر به نقش متغیر volatile uint8_t Machine = SEQ_INIT در برنامه ی زیر توجه کنید دقیقا متوجه نحوه استفاده از آن میشید.

            کد:
            #include 
            #include 
            #include 
            #include 
            #include 
            
            
            #define SEQ_INIT			0xFF
            #define Seq_Lecture_Forward 0xFE
            #define SEQ_WAIT			0xFD
            #define SEQ_SEND_MIDI_0 	0xFC
            
            
            volatile uint8_t Machine = SEQ_INIT
            
            
            void init_timer1(void)
            
            {
            TCCR1A = 0x00;
            TCCR1B = 0x0A;
            TCCR1C = 0x00;
            OCR1AH = 0x00;
            OCR1AL = 0x10;
            TIMSK1 = 0x02;
            TCNT1 = 0x00;
            }
            
            
            void calcul_tempo(uint16_t VALEUR_BPM)
            
            {
            uint16_t BPM_CALCUL;
            
            BPM_CALCUL = (468750/(VALEUR_BPM));
            OCR1A = BPM_CALCUL;
            }
            
            
            ISR(TIMER1_COMPA_vect)
            {
            	Machine = Seq_Lecture_Forward;
            	PORTC = Machine;
            }
            
            
            
            void main()
            {
            	uint16_t Valeur_BPM;
            	DDRC = 0xFF;
            	Machine = SEQ_INIT;
            	PORTC = Machine;
            
            for(;;)
            {
            _delay_us(1);
            switch (Machine)
            
            	{
            		case SEQ_INIT :
            		{
            			cli();
            			Machine = Seq_Lecture_Forward;
            			PORTC = Machine;
            			Valeur_BPM = 60;
            			init_timer1();
            			break;
            		};
            
            		case Seq_Lecture_Forward :
            		{
            //			calcul_tempo(Valeur_BPM);
            			Machine = SEQ_SEND_MIDI_0;
            			PORTC = Machine;
            			break;
            		};
            
            		case SEQ_SEND_MIDI_0:
            		{
            			Machine = SEQ_WAIT;;
            			PORTC = Machine;
            			break;
            		}
            
            		case SEQ_WAIT :
            		{
            			PORTC = Machine;
            			sei();
            			break;
            		};
            
            		default :
            		{
            			Machine = SEQ_INIT;
            			PORTC = Machine;
            			break;
            		};	// Fin du default
            	};	// Fin du switch
            
            };	// Fin du while()
            }
            Reveng will surely come... Your hard time are ahead
            // - - - - - - - - - -
            برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
            // - - - - - - - - - -
            اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
            // - - - - - - - - - -

            دیدگاه

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