ARM(Advanced RISC Machines) ၏ေကာက္ေၾကာင္း (အပိုင္း -2) - Arduino Myanmar

Breaking

Open Arduino for Myanmar

Wednesday, June 13, 2018

ARM(Advanced RISC Machines) ၏ေကာက္ေၾကာင္း (အပိုင္း -2)

Thread Mode, Handler Mode, Stack, privileged, unprivileged level
======================================
Cortex M4 အေပၚမွာအေျခခံျပီးေတာ့အဓိကေဆြးေႏြးသြားပါ့မယ္။
Cortex M4 ရဲ႕ Processor Mode ႏွစ္ခုရွိပါတယ္။

(၁) ပထမတစ္ခုက Thread Mode ျဖစ္ျပီးေတာ့ Application Software ေတြကို အလုပ္လုပ္ေစဖို႕ရန္အ တြက္အသံုးျပဳပါတယ္ခင္ဗ်ာ။ CONTROL register ဟာ အလုပ္လုပ္ေနတဲ့ေဆာ့ဖ္၀ဲက privileged ျဖစ္သလား unprivileged ျဖစ္ သလားဆိုတာကို ထိန္းခ်ဳပ္ေပးပါတယ္။

(၂) ဒုတိယတစ္ခုကေတာ့ Handler Mode ျဖစ္ျပီးေတာ့ Exception ေတြကို Handle လုပ္ဖို႕ရန္အတြက္ အသံုးျပဳတာပါ။ ဒီ Mode မွာဆိုရင္ အလုပ္လုပ္ေနတဲ့ ေဆာ့၀ဲက အျမဲတမ္း privileged မွာျဖစ္ပါတယ္။ Exception Processing ျပီးသြားတဲ့အခါမွာေတာ့ ပရိုဆက္ဆာက Thread Mode ကိုျပန္ေရာက္သြားပါ ေတာ့တယ္။

Software တစ္ခုကိုအလုပ္လုပ္ေစဖို႕ရန္အတြက္ Privilege Levels ႏွစ္ခုရွိပါတယ္။

(၁) ပထမတစ္ခုကေတာ့ Unprivileged ျဖစ္ပါတယ္။ Unprivileged software ဟာ unprivileged level မွာ အလုုပ္လုပ္ပါတယ္။ သူ႕မွာ ကန္႕သတ္ခ်က္ေလးေတြ ရွိေနပါတယ္။ System ရဲ႕ resource အားလံုးကို သံုးစြဲႏိုင္ျခင္းမရွိပါဘူးဗ်ာ။ MSR နဲ႕ MRS instruction ေတြကိုဘဲ access လုပ္ႏိုင္ပါတယ္။ CPS instruction ေတြကို အသံုးျပဳႏိုင္ျခင္းမရွိပါ။ System timer , NVIC , (သို႕) System Control block ကို လည္း ရယူသံုးစြဲႏိုင္ျခင္းမရွိပါ။ မွတ္ဥာဏ္နဲ႕ Peripheral ေတြ အေပၚမွာလည္းကန္႕သတ္ခ်က္ေတြရွိေန ျပန္ပါတယ္။

(၂) ဒုတိယတစ္ခုကေတာ့ Privileged ျဖစ္ပါတယ္။ Privileged software ဟာ privileged level မွာ အလုပ္လုပ္ပါတယ္။ instructions ေတြအားလံုးကိုအသံုးျပဳႏိုင္ပါတယ္။ ဘာကန္႕သတ္ခ်က္မွမရွိပါဘူး။ System ရဲ႕ Resource ေတြအားလံုးကိုသံုးစြဲႏိုင္ပါတယ္။ ေဆာ့ဖ္၀ဲ ကိုအလုပ္လုပ္ေစဖို႕ရန္အတြက္ Privilege level ကိုေျပာင္းလဲဖို႕ရန္ CONTROL register ကို write လုပ္လို႕ရပါတယ္ခင္ဗ်ာ။



Stacks
++++++
Processor ဟာ full descending stack ကိုအသံုးျပဳပါတယ္။ ဆိုလိုတာက stack pointer ဟာ stack memory ေပၚကေနာက္ဆံုး stacked item ေလးကိုဘဲဖတ္တဲ့သေဘာ ျဖစ္ပါတယ္။ Processor က stack ေပၚကို item အသစ္တစ္ခုလွမ္းထည့္လိုက္တဲ့အခါမွာ stack pointer ကို ေလွ်ာ့ခ်လိုက္ပါတယ္။ ျပီးတဲ့ ေနာက္မွာေတာ့ အဲဒီ item ကို memory location အသစ္ေပၚကိုလွမ္းထည့္လိုက္ပါေတာ့တယ္။ Processor မွာ stack ႏွစ္ခုရွိပါတယ္။ ပထမတစ္ခုက Main stack ျဖစ္ျပီးေတာ့ ေနာက္တစ္ခုကေတာ့ Process stack ျဖစ္ပါတယ္။ Thread Mode မွာ Processor က main stack ကိုအသံုးျပဳသလား process stack ကိုအသံုးျပဳသလားဆိုတာကို CONTROL register ကေနျပီးေတာ့ထိန္းခ်ဳပ္တာ ျဖစ္ပါတယ္။
Handler Mode မွာဆိုရင္ေတာ့ Processor ဟာ Main stack ကိုသာလွ်င္အျမဲတမ္းအသံုးျပဳပါတယ္။

Processor Operation ေတြအတြက္ Option ေတြကိုအႏွစ္ခ်ဳပ္ၾကည့္ရမယ္ဆိုရင္ေတာ့ -

Thread Mode က Application ေတြကိုအလုပ္လုပ္ေစဖို႕ရန္အတြက္သံုးတာျဖစ္ျပီးေတာ့ အဲ့ဒီ application အတြက္ Privilege level က ႏွစ္ခုရွိလို႕ေနပါတယ္။
ဒါကိုလည္း CONTROL Register ကေန ထိန္းခ်ဳပ္တာပါခင္ဗ်ာ။
အသံုးျပဳတဲ့ Stack ကေတာ့ Main stack သို႕မဟုတ္ Process stack ျဖစ္ပါတယ္။

Handler mode ကေတာ့ Exception handler ေတြကိုအလုပ္လုပ္ေစဖို႕ရန္အတြက္သံုးတာျဖစ္ပါတယ္။ အျမဲတမ္း Privileged ျဖစ္ေနပါတယ္။ အသံုးျပဳတဲ့ stack ကေတာ့ Main stack ျဖစ္ပါတယ္ခင္ဗ်ာ။

               Thank you!
                    ZawMyat

No comments:

Post a Comment