2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
अधुना एव मया आविष्कृतं यत् अन्येषु मञ्चेषु केचन कोडाः STM32 मध्ये विलीनीकरणानन्तरं दुर्घटनासमस्या अभवत्, अतः अहं समग्रतया STM32 इत्यत्र दुर्घटनासमस्यानां समस्यानिवारणस्य सिद्धान्तान् क्रमेण स्थापयितुम् इच्छामि स्म
उपरिष्टाद् क्रैश प्रिण्ट् सूचनायाः एकः भागः अस्ति अन्वेषणस्य अनन्तरं ज्ञातं यत् FreeRTOS इत्यस्य टाइमर स्टैक् गभीरता अतीव लघु सेट् कृता आसीत्, तथा च प्रत्येकेन स्थानीयचरेन आवेदनं कृतं स्मृतिः आसीत् कालान्तरे न मुक्तः, अन्ते च दुर्घटना अभवत् ।
FreeRTOS इत्यस्मिन् समयनिर्धारकस्य विषये वदामः, यत् वस्तुतः समयं स्थापयितुं सूत्रं निर्मातुं, ततः वर्तमानसमयसूचीं मतदानं कृत्वा प्रश्नं कृत्वा ज्ञातुं शक्यते यत् कस्य समयनिर्धारकस्य चालनसमयः समाप्तः अस्ति इदम्।
अतः समयनिर्धारकेण उपयुज्यमानं स्मृति-आकारं अपि विन्यस्तं कर्तव्यम् ।
R0~R12 सामान्यप्रयोजनपञ्जिकाः सन्ति
R13 स्तम्भसूचकः अस्ति, भौतिकरूपेण च द्वौ स्तम्भसूचकौ स्तः:मुख्यः स्टैक् सूचकः (MSP) पूर्वनिर्धारितः स्टैक् सूचकः अस्ति, यः रीसेट् करणस्य अनन्तरं उपयोगाय चयनितः भविष्यति तथा च यदा प्रोसेसरः प्रोसेसिंग मोड् मध्ये भवति तदा अन्यः स्टैक् सूचकः प्रक्रिया स्टैक् सूचकः (PSP) अस्ति, यस्य उपयोगः केवलं थ्रेड् मध्ये एव कर्तुं शक्यते; mode (यदा RTOS भवति) )
R14 इति लिङ्क् रजिस्टर (LR), यस्य उपयोगः रिटर्न् एड्रेस् रक्षितुं यदा फंक्शन् अथवा उपरूटीन् आह्वयते । फंक्शन् अथवा उपरूटीनस्य अन्ते, प्रोग्राम् नियन्त्रणं प्रोग्राम् काउण्टर् (PC) मध्ये LR इत्यस्य मूल्यं लोड् कृत्वा कॉलिंग् प्रोग्राम् प्रति प्रत्यागन्तुं शक्नोति अपवादनियन्त्रणस्य समये LR स्वयमेव विशेषे EXC_RETURN (अपवाद रिटर्न्) इत्यत्र अद्यतनं भविष्यति ) मूल्यम्।
यथा, a b इत्यस्य आह्वानं करोति अस्मिन् समये b उपकार्यस्य पता pc सूचके स्थाप्यते, b इत्यस्य पता च LR मध्ये स्थाप्यते निष्पादनार्थं LR तः।
बाहौ दुर्घटना वस्तुतः असामान्यः व्यत्ययः भवति यदा व्यत्ययः आगच्छति तदा प्रोसेसरः वर्तमानकार्यस्थितिं स्टैक् मध्ये रक्षति ।
ढेर फ्रेम
Stack Frame इति स्मृतिक्षेत्रं निर्दिशति यस्य उपयोगः फंक्शन्-आह्वानस्य समये फंक्शन् पैरामीटर्स्, स्थानीयचर, रिटर्न् एड्रेस् इत्यादीनां सूचनानां संग्रहणार्थं भवति ।
यदा कश्चन फंक्शन् आह्वयते तदा STM32 तस्य कृते स्टैक् फ्रेम् आवंटयिष्यति
उपर्युक्तसूचनाः संयोजयित्वा वयं ज्ञातुं शक्नुमः यत् यदि वयं फंक्शन् क्रैश् अभवत् तदा कः फंक्शन् क्रैश अभवत् इति प्राप्तुम् इच्छामः तर्हि अपवाद-इण्टरप्ट्-प्रवर्तनस्य समये स्टैक्-उपरि धक्कायमानं स्टैक्-फ्रेम् अन्वेष्टव्यम्, अयं च स्टैक्-फ्रेम् R13 मध्ये अस्ति (Stack point) स्टैक सूचकः ।
वयं क्रैश हैंडलिंग फंक्शन् HardFault_Handler() इत्यस्मिन् R13 रेजिस्टरस्य सूचकेन सूचितं सामग्रीं प्राप्तुं मार्गं प्राप्नुमः, ततः तत् मुद्रयामः ।
STM32 सूक्ष्मनियन्त्रकः ARM Cortex-M कोरस्य उपयोगं करोति, यस्मिन् द्वौ स्टैक् सूचकौ स्तः, एकः मुख्यः स्टैक् सूचकः (MSP) अपरः च प्रक्रिया स्टैक् सूचकः (PSP) अस्ति
MSP (मुख्य ढेर सूचक) २.: मुख्यस्टैक् सूचकः मुख्यतया ऑपरेटिंग् सिस्टम् कर्नेल् अथवा इंटरप्ट् सेवा रूटीनस्य कृते उपयुज्यते ।
PSP (प्रक्रिया स्टैक सूचक) 1.1.: प्रक्रिया-स्टैक्-सूचकः मुख्यतया उपयोक्तृ-अनुप्रयोगैः उपयुज्यते ।
यदा Cortex-M कोरः Thread मोड् प्रति आगच्छति तदा CONTROL रजिस्टरस्य सेटिंग् अनुसारं मुख्य-स्टैक-सूचकं MSP अथवा प्रक्रिया-स्टैक्-सूचकं PSP प्रति पुनः स्विच् कर्तुं शक्नोति ।
PSP चालितस्य उपयोक्तृ-अनुप्रयोगेन सह सम्बद्धं सन्दर्भं संगृह्णाति । विशेषतया निम्नलिखितम् अन्तर्भवतु : १.
一些或全部的通用寄存器的值,这些寄存器在用户程序运行时会使用。
Program Counter(PC):指向下一条将要执行的指令。
Processor Status Register(PSR)的值:包含标志位状态。
Stack pointer: पूर्वस्य stack frame इत्यस्य स्थानं रक्षति ।
सामान्यतया, कार्याणि परिवर्तयति (अथवा सन्दर्भस्विचिंग्) भवति तदा एषा सूचना स्टैक् मध्ये रक्षिता भविष्यति यदा नूतनं कार्यं आरभ्यते तदा तस्य सन्दर्भसूचना स्टैक् तः पुनः स्थापिता भविष्यति ।
ज्ञातव्यं यत् रक्षिता विशिष्टा सामग्री विशिष्टा समयनिर्धारणरणनीत्याः, प्रचालनतन्त्रस्य डिजाइनस्य च अनुसारं भिन्ना भविष्यति ।
LR/PC सूचकस्य मूल्यं निर्धारयन्तु
प्रथमं अस्माभिः निर्धारितव्यं यत् RTOS इत्यस्य उपयोगः भवति वा यदि एवम् अस्ति तर्हि अस्माकं क्रैश सूचना PSP मध्ये संगृहीतव्या ।
अस्माभिः प्रथमं एतां सूचनां पठितव्या, ततः LR तथा PC इत्येतयोः मूल्यानि ज्ञात्वा, keil5 इत्यस्मिन् Debug इत्यस्य माध्यमेन क्रैश-बिन्दुं अन्वेष्टुं शक्नुमः अथवा संकलन-प्रक्रियायाः समये उत्पन्नस्य नक्शा-सञ्चिकायाः माध्यमेन तत्सम्बद्धं क्रैश-बिन्दुं अन्वेष्टुं शक्नुमः
Disassembly विण्डो मध्ये राइट्-क्लिक् कुर्वन्तु—