مثلا
كود:
if (portb.f4==0){
delay_ms(100);
sub1(i); }
if(portb.f5==0) {
if (portb.f4==0){
delay_ms(10);
sub2(i);
}
else{
sub2(i);} }
if(portb.f6==0)
sub4();
فهل سيتم تنفي> الثلاث المقاطعات معا في حال تحققهن
وادا تحققت واحده واثناء تنفيد الاولى حدثث الثانية فكيف سيعمل البرنامج
|
السلام عليكم
لو فرضنا نظريا اننا نريد تنفيد هدا البرنامج
اولا لنفرض انه لا توجد اي مقاطعه حدثت وان البرنامج ينفد امر معين وموجود عند نقطه عنوانها x
وتم حدوث مقاطعه غلى rb4 فان mikro سيقوم بتخرين العنوان x في stack pointer
وسيقفز للمقاطعه لفحص المدخل الدي تفعل ووجد انه rb4 وسيبدا بتنفيده ولنفرض ان البرنامج نفد sub1 ووصل لمنتصف هدا function عند امر عنوانه y
ومن ثم حدث مقاطعه عند rb6 فان micro سيقوم بتخزين العنوان y ومن تم سينفد امر rb4 وسيبقى ينفده حتى ينهي كل اوامره
ومن ثم يعود لتنفيد الامر عند العنوان y وعندما ينتهي منه يعود الى العنوان الاصلي وهو x
الافضل دائما اخي ان تتعلم استراتيجيه افضل من هده وتتعامل بشكل افضل مع المقاطعه بشرط ان يكون المشروع المطلوب يقبل افكار افضل.
ولا تنسونا من صلح دعائكم