السلام عليكم
واحدة من الامور الصعبة في استخدام لغات البرمجة العالية المستوى في برمجة المايكرو كونترولر هي حساب الوقت اللازم لانجاز عدد معين من الخطوات ... فانت لاتعرف بالتحديد كيف سيتم ترجمة الكود الذي كتبتة
عموما .. عندي نقطتان اضافيتان تؤثران على حساب الوقت
الاولى ... عند كتابة قيمة الى التايمر ... في حالتنا هذه 231 فان التايمر سوف يتوقف لمدة نبظتان قبل معاودة العمل ... فيجب اضافة ذلك الى الحسابات
الثانية الروتين الخاص بالمقاطعة يبدأ بعملية فحص لراية المقاطعة الخاصة بالتايمر وهذه ايضا تأخذ نبظة واحدة .... يجب ان تضاف الى الحسابات
وهناك امر ثالث ... وهو عملية القفز الى روتين المقاطعة .... عموما عمليات القفز العادية تأخذ نبظتين من المعالج .... لكن لا اعرف بالضبط ماهي الحالة مع عملية القفز الى روتين المقاطعة ....
وهناك امر رابع ... عند استخدام روتين للمقاطعات لابد من اجراء بعض الاحتياطات لضمان الرجوع الى البرنامج الاصلي بصورة صحيحة وبدون فقد بعض المعلومات المهمة عند الانتهاء من برنامج المقاطعة ... هذه الاجراءات تتمثل عادتا بخزن قيمة الرجستر w والرجستر status في الرام ثم اكمال روتين المقاطعة ... وقبل الرجوع الى البرنامج الاصلي يتم ارجاع القيم الاصلية لهذه الرجسترات من الذاكرة وانهاء روتين المقاطعة ... يبدو ان هذه العملية يقوم بها المترجم الخاص بمايكروسي بدون ان يحتاج كاتب البرنامج بوضعها في البرنامج .... لكن طبعا يجب ان تضاف الى العمليات الحسابية الخاصة بنا والمتعلقة بالوقت ... على الاقل ستأخذ ثلاث نبظات من المعالج
عموما وكما قلت في بداية حديثي من الصعب تتبع الزمن بالضبط .... لكن ربما افضل طريقة لحسم الامر ربما يكون كالتالي
بعد ترجمة البرنامج قم باظهاره بكود الاسمبلي .... ثم قم بتشغيل مصحح الاخطاء واستخدم ساعة التوقيت لحساب الزمن المستغرق من قبل اي مجموعة اوامر ... ذلك سيعطيك فكرة كاملة عن تصرف البرنامج ... والزمن الذي تستغرقة كل عملية
كما يمكنك الاستعانة بالموقع التالي حيث فية برنامج لحساب الزمن الخاص بالتايمرات والمقاطعات ويعطيك الكود باكثر من لغة برمجة
http://www.mikroe.com/forum/viewtopic.php?f=3&t=49698
تحياتي