युनिट 3 / 9

एम्बेडेड सिस्टम आणि मायक्रोकंट्रोलर कोड

नफा:

  • स्पष्ट प्रॉम्प्टसह मायक्रोकंट्रोलरसाठी नोंदणी, व्यत्यय आणि वेळेची आवश्यकता परिभाषित करण्याची क्षमता
  • नोंदणी सेटिंग्ज, बफर ओव्हरफ्लो आणि रिअल टाइम मर्यादांच्या बाबतीत AI द्वारे निर्मित C/Arduino कोड तपासण्याची क्षमता
  • हार्डवेअरवर (ऑसिलोस्कोप, सीरियल पोर्ट) मोजून व्युत्पन्न कोड सत्यापित करण्याची सवय लागू करण्याची क्षमता

एम्बेडेड सिस्टम डेव्हलपमेंट म्हणजे सॉफ्टवेअर आणि हार्डवेअर एकमेकांना छेदतात: एक रजिस्टर बिट चुकीच्या पद्धतीने सेट करणे, इंटरप्ट खूप लांब धरून ठेवणे, किंवा बफर ओव्हरफ्लो केल्याने फील्डमध्ये विचित्र, हार्ड-टू-पुनरुत्पादन अपयशी ठरतील, जरी कोड "संकलित" होतो आणि चालतो. AI खरोखरच या क्षेत्रात एक प्रवेगक आहे; हे प्रारंभिक सांगाडे, हार्डवेअर ॲब्स्ट्रॅक्शन फंक्शन्स, स्टेट मशीन्स आणि कम्युनिकेशन रूटीन तयार करू शकते. पण AI तुमच्या कार्डची डेटाशीट पाहत नाही, तुमच्या घड्याळाची वारंवारता माहीत नाही आणि तुमच्या रिअल टाइमची मर्यादा कळत नाही. या युनिटमध्ये, आम्ही AI साठी मायक्रोकंट्रोलरचे कार्य स्पष्टपणे कसे परिभाषित करावे, व्युत्पन्न केलेला C/Arduino कोड कसा तपासावा आणि आपण हार्डवेअरमधील प्रत्येक गोष्ट का मोजली पाहिजे हे समाविष्ट करू.

आवश्यकता स्पष्टपणे परिभाषित करणे: नोंदणी, कटिंग, वेळ

AI ला "एलईडी पेटवा" असे सांगणे कार्य करणार नाही; कोणते कार्ड, कोणती पिन, कोणती घड्याळ वारंवारता, कोणती वेळ? AI ला एम्बेड केलेले कार्य नियुक्त करताना, हे फ्रेमवर्क वापरा: हार्डवेअर (MCU फॅमिली, घड्याळ, पिन), फंक्शन (काय होईल), मर्यादा (वेळ, पॉवर, मेमरी), आणि इंटरफेस (नोंदणी, HAL, Arduino लायब्ररी).

कमकुवत प्रॉम्प्ट / मजबूत प्रॉम्प्ट

कमजोर: "STM32 सह PWM तयार करा." (परिणाम: कोणता टाइमर, कोणती वारंवारता, कोणती पिन अस्पष्ट आहे; सामान्य, कदाचित चुकीचे नोंदणीकृत कोड नावाचे कोड.) STRONG: "STM32F103 (72 MHz सिस्टम घड्याळ) साठी TIM3 CH1 (PA6) वर 20 kHz, 0-100% समायोज्य ड्यूटी PWM तयार करा (72 मेगाहर्ट्झ सिस्टम घड्याळ) नोंदवा आणि कॅल-एएलएआरच्या प्री-कॅलरी स्तरावर लिहा. 20 kHz कॅलक्युलेट करा आणि 0-100 च्या दरम्यान फंक्शन पॅरामीटरसह ड्युटी सेट करा - तुमची घड्याळाची धारणा चुकीची असल्यास मूल्ये बदलतील.

फरक असा आहे की शक्तिशाली प्रॉम्प्ट मॉडेलला गणना दर्शवते आणि घड्याळाची गृहीतक दर्शवते. त्यामुळे तुम्ही प्रीस्केलर/एआरआर मूल्ये स्वतंत्रपणे तपासू शकता:

20 kHz PWM (72 MHz घड्याळ) साठी: Timer_clock = 72 MHz जर आम्हाला प्रीस्केलर = 72-1 → काउंटर क्लॉक = 1 MHzARR = (1 MHz / 20 kHz) - 1 = 50 - 1 = 49 पडताळणी: 1e6 / 020 = 1e6 / 0 = 49

ऑडिटिंग एआय कोड: काय पहावे?

केवळ व्युत्पन्न कोड संकलित केल्याने याचा अर्थ असा नाही की ते योग्यरित्या कार्य करते. या चेकलिस्टचे अनुसरण करा:

नियंत्रण क्षेत्र

काय पहावे

नोंदणी/बिट सेटिंग्ज

डेटाशीटसह अचूकपणे सुसंगत, योग्य बिट मास्क

व्यत्यय (ISR)

लहान आहे का? ब्लॉकर विलंब नाही? अस्थिर वापरले जाते?

बफर/ॲरे

सीमा नियंत्रण आहे का? ओव्हरफ्लोचा धोका?

वेळ

विलंब किंवा टाइमर सह? वास्तविक वेळेची मर्यादा पूर्ण झाली आहे का?

प्रकार आणि रुंदी

8/16/32-बिट ओव्हरफ्लो, स्वाक्षरी केलेला/अस्वाक्षरित गोंधळ

शक्ती/वॉचडॉग

अनंत पळवाट फीडिंग वॉचडॉग?

व्यत्यय सेवा दिनचर्या (ISR) हे त्रुटींचे सर्वात सामान्य स्त्रोत आहेत. AI कधीकधी ISR मध्ये विलंब() किंवा लांब पळवाट ठेवते. यामुळे इतर व्यत्यय चुकतात आणि वॉचडॉग रीसेट होतात. नियम: ISR शक्य तितके लहान असावे; मुख्य काम ध्वज सेट करणे आणि मुख्य लूपवर हलवणे हे असावे.

// कमजोर (एआय कधीकधी हे तयार करते): ISR void TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; read_sensor(); // बराच वेळ लागू शकतो - BAD CASE_Delay(10); // ISR मध्ये विलंब - खूप वाईट }}// मजबूत: ISR लहान; जॉब मुख्य लूपवॉलेटाइल uint8_t टिक_फ्लॅग = 0 वर हलवते; // अस्थिर CONDITIONvoid TIM3_IRQHandler(void) { जर (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; टिक_ध्वज = 1; //फक्त ध्वज सेट करा }}// मुख्य लूपमध्ये: जर (टिक_फ्लॅग) { टिक_फ्लॅग = 0; read_sensor(); }

खबरदारी: व्यत्यय आणि मुख्य लूप दरम्यान सामायिक केलेले कोणतेही चल अस्थिर असणे आवश्यक आहे. अन्यथा, कंपाइलर रजिस्टरमधील व्हेरिएबल कॅशे करू शकतो आणि अपडेट चुकवू शकतो. एआय अनेकदा हा कीवर्ड विसरतो; कोड वाचताना ते विशेषतः पहा.

बफर ओव्हरफ्लो आणि प्रकार त्रुटी

एआय सीरिअल पोर्टमधील डेटा सीमा तपासल्याशिवाय निश्चित आकाराच्या ॲरेमध्ये कॉपी करू शकते. एम्बेडेड सिस्टममध्ये, याचा अर्थ सलग मेमरी आणि अस्पष्टीकृत क्रॅश क्रश करणे. प्रत्येक strcpy, ॲरे इंडेक्स आणि DMA बफरवर मर्यादा तपासली आहे याची खात्री करा. त्याचप्रमाणे, 255 नंतर 8-बिट काउंटर रीसेट होते; AI याकडे दुर्लक्ष करू शकते आणि अतिप्रवाह खात्यावर अवलंबून राहू शकते.

हार्डवेअरमध्ये पडताळणी: "कार्यरत" मोजले जाते, गृहित धरलेले नाही

एम्बेडेड सिस्टममध्ये, सर्वात विश्वासार्ह पुरावा मीटर आहे, कंपाइलर नाही. या तीन प्रकारे व्युत्पन्न केलेला कोड सत्यापित करा:

  1. ऑसिलोस्कोप/लॉजिक विश्लेषक: PWM वारंवारता, सिग्नल वेळ आणि संप्रेषण वेव्हफॉर्म मोजा. तुम्हाला 20 kHz हवे असल्यास, स्क्रीनवर 20 kHz पहा.
  2. सीरियल पोर्ट (UART) लॉग: व्हेरिएबल व्हॅल्यू, स्टेट ट्रांझिशन आणि एरर काउंटर प्रिंट करा आणि अपेक्षित वर्तनाची तुलना करा.
  3. बंधन आणि ताण चाचणी: सिस्टम सर्वाधिक लोड, सर्वात वेगवान डेटा आणि सर्वात वाईट वेळ आहे की नाही ते तपासा.

मोजलेले मूल्य गणनेशी सहमत नसल्यास, घड्याळ गृहीतक, प्रीस्केलर मूल्य किंवा नोंदणी सेटिंग चुकीची आहे; पाठलाग

मिनी केस

विद्यार्थ्यांच्या टीमकडे AI ने HC-SR04 अल्ट्रासोनिक सेन्सरसह अंतर मापन कोड मुद्रित केला आहे. कोड संकलित करते परंतु अंतर नेहमीच हास्यास्पद मूल्ये देते. जेव्हा ते ते ऑसिलोस्कोपशी जोडतात तेव्हा ते पाहतात की इको लेग मायक्रोसेकंदांऐवजी मिलिसेकंदांमध्ये त्याची वेळ मोजतो; AI ने micros() ऐवजी millis() वापरले. या एका-शब्दातील त्रुटीने 1000 च्या घटकाने संपूर्ण मोजमाप गोंधळात टाकले. जेव्हा ते अनुक्रमांक लॉगमध्ये कच्चा प्रतिध्वनी वेळ मुद्रित करतात आणि त्याची वास्तविक शासकाशी तुलना करतात, तेव्हा ते त्रुटी शोधतात आणि त्याचे निराकरण करतात. धडा: संकलित कोड योग्य कोड नाही; हार्डवेअरमधील मोजमाप तत्काळ त्रुटी प्रकट करते.

सामान्य चुका

  • डेटाशीटशी तुलना न करता नोंदणीची नावे आणि बिट मास्क स्वीकारणे.
  • ISR मध्ये ब्लॉकिंग विलंब किंवा दीर्घ प्रक्रियेस परवानगी देणे.
  • सामायिक व्हेरिएबल्सवर अस्थिरता विसरणे.
  • बायपास बफर आणि ॲरे बाउंड तपासणे; ओव्हरफ्लो दिसत नाही.
  • त्यांची पडताळणी न करता घड्याळ वारंवारता आणि वेळेच्या गृहितकांवर अवलंबून राहणे.
  • ऑसिलोस्कोप/सीरियल लॉगसह मोजल्याशिवाय कोड "कार्यरत" विचारात घेणे.

सारांशात

  • हार्डवेअर, फंक्शन, मर्यादा आणि इंटरफेसच्या संदर्भात एम्बेड केलेले कार्य स्पष्टपणे परिभाषित करा.
  • एआय कडे प्रीस्केलर/एआरआर सारख्या वेळेच्या मूल्यांची गणना करा आणि त्यांची स्वतंत्रपणे पडताळणी करा.
  • ISR लहान ठेवा, सामायिक व्हेरिएबल्सवर अस्थिर वापरा.
  • विशेषत: रजिस्टर, बफर मर्यादा आणि टाइप रुंदी त्रुटी पहा.
  • "हे कार्य करते" हे ऑसिलोस्कोप, लॉजिक ॲनालायझर आणि सीरियल लॉगसह सिद्ध केले जाते, कंपाइलरसह नाही.
  • मोजलेले मूल्य गणनेशी सहमत नसल्यास, गृहितकांचा पाठलाग करा.

अर्ज कार्य

तुमच्याकडे असलेल्या मायक्रोकंट्रोलरसह (Arduino, STM32, ESP32), AI ला PWM किंवा ठराविक वारंवारतेवर नियतकालिक कार्यासाठी विचारा. कोड लोड करण्यापूर्वी: (1) कमेंट लाइनमधील खात्याची वारंवारता/वेळ मूल्ये स्वतंत्रपणे सत्यापित करा, (2) ISR आणि सामायिक व्हेरिएबल्समध्ये अस्थिर आणि ब्लॉकिंग तपासा. अपलोड केल्यानंतर, ऑसिलोस्कोप किंवा लॉजिक ॲनालायझरसह वास्तविक वारंवारता मोजा आणि लक्ष्याशी तुलना करा. विचलन असल्यास, स्त्रोत शोधा आणि ते दुरुस्त करा आणि काय चुकीचे गृहित धरले होते ते लक्षात घ्या.