مدتی است که به خاطر مشغله بسیار زیاد فرصت مراجعه و مشارکت در بحث ها چندان برایم فراهم نبوده است (البته افت شدید علمی این انجمن و تا حدی دور شدن ماهیت آن از یک انجمن علمی هم در عدم وجود انگیزه برای اختصاص وقت بی تاثیر نیست).
امروز که بعد از مدتی فرصتی فراهم شد، به نظرم رسید برای دوستان فعال و باهوشی که کمابیش در انجمن حضور دارند صورت مسئله ای را مطرح کنم تا شاید یکی از صدها نکته و به اصطلاح فوت و فن کوزه گری در برنامه نویسی در قالب این سوال مطرح و روشن شود. در صورت بازخورد مثبت شاید این نوع صورت مسئله ها ادامه یابد.
فرض کنیم در برنامه ای لازم باشد تاخیر هایی را با مقادیر گوناگون از طریق متغیری تعریف کنیم و در هرجایی از تابع main که لازم باشد، به آن متغیر مقدار بدهیم و منتظر صفر شدن آن بمانیم. این متغیر در ابتدا به صورت عمومی تعریف می شود:
[code=c]volatile unsigned int delay;[/code]
این متغیر در روتین وقفه یک تایمر (مثلا با فاصله زمانی 1ms)به شکل زیر کاهش می یابد:
[code=c]if(delay) delay--;[/code]
بنابراین برای ایجاد تاخیر، در تابع main در هرجایی که لازم باشد به این متغیر مقدار دهی را انجام می دهیم و برای صفر شدن آن منتظر می مانیم:
[code=c]delay=DELAY_VALUE;
while(delay);[/code]
اگر فرض کنیم که هیچ وقفه دیگری به جز وقفه تایمر وجود نداشته باشد، اتفاقی که در عمل پیش می آید این است که تاخیر مورد نظر ممکن است درست عمل کند و ممکن است با خطای زیادی همراه باشد و شرط حلقه while در زمان درست عمل نکند.
سوال چالشی در این پست این است که دلیل ایجاد این خطای زیاد که جنبه random هم دارد چیست و با چه تمهیداتی می توان این مشکل را برطرف نمود؟
امروز که بعد از مدتی فرصتی فراهم شد، به نظرم رسید برای دوستان فعال و باهوشی که کمابیش در انجمن حضور دارند صورت مسئله ای را مطرح کنم تا شاید یکی از صدها نکته و به اصطلاح فوت و فن کوزه گری در برنامه نویسی در قالب این سوال مطرح و روشن شود. در صورت بازخورد مثبت شاید این نوع صورت مسئله ها ادامه یابد.
فرض کنیم در برنامه ای لازم باشد تاخیر هایی را با مقادیر گوناگون از طریق متغیری تعریف کنیم و در هرجایی از تابع main که لازم باشد، به آن متغیر مقدار بدهیم و منتظر صفر شدن آن بمانیم. این متغیر در ابتدا به صورت عمومی تعریف می شود:
[code=c]volatile unsigned int delay;[/code]
این متغیر در روتین وقفه یک تایمر (مثلا با فاصله زمانی 1ms)به شکل زیر کاهش می یابد:
[code=c]if(delay) delay--;[/code]
بنابراین برای ایجاد تاخیر، در تابع main در هرجایی که لازم باشد به این متغیر مقدار دهی را انجام می دهیم و برای صفر شدن آن منتظر می مانیم:
[code=c]delay=DELAY_VALUE;
while(delay);[/code]
اگر فرض کنیم که هیچ وقفه دیگری به جز وقفه تایمر وجود نداشته باشد، اتفاقی که در عمل پیش می آید این است که تاخیر مورد نظر ممکن است درست عمل کند و ممکن است با خطای زیادی همراه باشد و شرط حلقه while در زمان درست عمل نکند.
سوال چالشی در این پست این است که دلیل ایجاد این خطای زیاد که جنبه random هم دارد چیست و با چه تمهیداتی می توان این مشکل را برطرف نمود؟
دیدگاه