Qazanclar:
- Mikrokontroller üçün qeyd, kəsmə və vaxt tələblərini aydın bir göstərişlə müəyyən etmək bacarığı
- Süni intellekt tərəfindən istehsal olunan C/Arduino kodunu qeydiyyat parametrləri, bufer daşması və real vaxt məhdudiyyətləri baxımından yoxlamaq imkanı
- Yaradılmış kodu aparatda (ossiloskop, serial port) ölçməklə onu yoxlamaq vərdişini tətbiq etmək bacarığı
Quraşdırılmış sistemin inkişafı proqram təminatı və aparatın kəsişdiyi yerdir: registr bitinin səhv təyin edilməsi, kəsilmənin çox uzun saxlanması və ya buferin daşması, kodun "tərtib edilməsinə" və işləməsinə baxmayaraq, sahədə qəribə, təkrar istehsalı çətin olan uğursuzluqlara səbəb olacaq. AI həqiqətən bu sahədə sürətləndiricidir; O, ilkin skeletlər, aparat abstraksiya funksiyaları, dövlət maşınları və rabitə rutinləri istehsal edə bilər. Lakin AI kartınızın məlumat cədvəlini görmür, saat tezliyinizi bilmir və real vaxt məhdudiyyətlərinizi hiss etmir. Bu bölmədə biz AI-də mikrokontroller işini necə aydın şəkildə müəyyənləşdirəcəyik, yaradılan C/Arduino kodunu necə yoxlamaq lazım olduğunu və niyə aparatda hər şeyi ölçməli olduğunuzu əhatə edəcəyik.
Tələbin aydın şəkildə müəyyən edilməsi: Qeydiyyat, Kəsmə, Zamanlama
Süni intellektə “LED-i yandır” demək işləməyəcək; Hansı kart, hansı pin, hansı saat tezliyi, hansı vaxt? Süni intellektə daxil edilmiş tapşırıq təyin edərkən bu çərçivədən istifadə edin: aparat (MCU ailəsi, saat, pin), funksiya (nə olacaq), məhdudiyyət (vaxt, güc, yaddaş) və interfeys (registr, HAL, Arduino kitabxanası).
Zəif Tələb / Güclü Tələb
ZƏFS: "STM32 ilə PWM istehsal edin." (Nəticə: hansı taymer, hansı tezlik, hansı pin qeyri-müəyyəndir; ümumi, yəqin ki, yanlış registr adlı kod.) GÜÇLÜ: "STM32F103 (72 MHz sistem saatı) üçün TIM3 CH1 (PA6) üzərində 20 kHz, 0-100% tənzimlənən vəzifəli PWM istehsal edin). Registr səviyyəsində yazın (HALCA2 və kHz deyil). Şərh sətirində hesablamanı göstərin - 0-100 arasında funksiya parametri ilə təyin edin - İstifadə etdiyiniz hər bir registr bitini şərh edin.
Fərq ondadır ki, güclü sorğu modeli hesablamağı göstərməyə və saat fərziyyəsini ortaya qoymağa məcbur edir. Beləliklə, siz müstəqil olaraq prescaler/ARR dəyərlərini yoxlaya bilərsiniz:
20 kHz PWM (72 MHz saat) üçün:Timer_clock = 72 MHzƏgər biz əvvəlcədən miqyaslayıcı istəsək = 72-1 → əks saat = 1 MHzARR = (1 MHz / 20 kHz) - 1 = 50 - 1 = 49Yoxlama: 1e6 / (49+1) = 20
AI kodunu yoxlamaq: nə axtarmaq lazımdır?
Yaradılan kodun tərtib edilməsi onun düzgün işləməsi demək deyil. Bu yoxlama siyahısına əməl edin:
nəzarət sahəsi
Nə axtarmaq lazımdır
Qeydiyyat/bit parametrləri
Datasheet, düzgün bit maskası ilə tam uyğun gəlir
Kəsmə (ISR)
Qısadır? Bloklayıcı gecikmə yoxdur? Uçucu istifadə olunur?
bufer/massiv
Sərhəd nəzarəti varmı? Daşmaq riski varmı?
vaxtlama
Gecikmə və ya taymer ilə? Həqiqi vaxt məhdudiyyətinə əməl olunurmu?
Növ və genişlik
8/16/32-bit daşqın, imzalanmış/imzasız qarışıqlıq
güc / gözətçi
Sonsuz döngə qidalanma nəzarətçisi?
Kəsinti xidmət rutinləri (ISR) ən çox yayılmış səhv mənbəyidir. AI bəzən gecikmə () və ya uzun dövrəni ISR içərisinə qoyur. Bu, digər fasilələrin qaçırılmasına və nəzarətçinin sıfırlanmasına gətirib çıxarır. Qayda: ISR mümkün qədər qısa olmalıdır; Əsas iş bayraq qurmaq və onu əsas döngəyə keçirmək olmalıdır.
// ZƏFLƏR (AI bəzən bunu yaradır): ISR-də bloklayıcı funksiyası etibarsız TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; oxu_sensor(); // uzun müddət çəkə bilər - BAD CASE_Delay(10); // ISR-də gecikmə - ÇOX PİS }}// GÜÇLÜ: ISR qısa; iş əsas döngəyə keçir uint8_t tick_flag = 0; // uçucu CONDITIONvoid TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; qeyd_bayrağı = 1; //sadəcə bayraq təyin edin }}// əsas döngədə:if (tick_flag) { tick_flag = 0; oxu_sensor(); }
Diqqət: Kesinti və əsas dövrə arasında paylaşılan istənilən dəyişən dəyişkən olmalıdır. Əks halda, kompilyator registrdə dəyişəni keşləyə və yeniləməni əldən verə bilər. AI tez-tez bu açar sözü unudur; Xüsusilə kodu oxuyarkən onu axtarın.
Buferin daşması və növü xətaları
Süni intellekt seriya portundan məlumatları sərhədləri yoxlamadan sabit ölçülü massivə köçürə bilər. Quraşdırılmış sistemdə bu, bitişik yaddaşı və izah olunmayan qəzaları əzmək deməkdir. Limitin hər strcpy, massiv indeksi və DMA buferində yoxlanıldığından əmin olun. Eynilə, 8 bitlik sayğac 255-dən sonra sıfırlanır; Süni intellekt buna məhəl qoymur və çoxlu hesaba arxalana bilər.
Avadanlıqda Doğrulama: "İşləmək" Ölçülür, Güman edilmir
Daxili sistemdə ən etibarlı sübut tərtibçi deyil, sayğacdır. Yaradılmış kodu bu üç yolla yoxlayın:
- Osiloskop/məntiq analizatoru: PWM tezliyini, siqnal vaxtını və rabitə dalğa formasını ölçün. 20 kHz istəyirsinizsə, ekranda 20 kHz-ə baxın.
- Serial port (UART) jurnalı: Dəyişən dəyərləri, vəziyyət keçidlərini və səhv sayğaclarını çap edin və gözlənilən davranışla müqayisə edin.
- Bağlı və stress testi: Sistemin ən yüksək yük, ən sürətli məlumat və ən pis vaxt altında dayanıb-dayanmadığını yoxlayın.
Ölçülmüş dəyər hesablama ilə uyğun gəlmirsə, saat fərziyyəsi, preskaler dəyəri və ya registr parametri yanlışdır; təqib etmək.
Mini Çanta
Tələbələr komandası, AI HC-SR04 ultrasəs sensoru ilə məsafə ölçmə kodunu çap edir. Kod tərtib edir, lakin məsafə həmişə gülünc qiymətlər verir. Onu osiloskopa bağladıqda, əks-səda ayağının öz vaxtını mikrosaniyələrlə deyil, millisaniyələrlə hesabladığını görürlər; Süni intellekt micros() əvəzinə millis() istifadə edirdi. Bu bir sözdən ibarət xəta bütün ölçməni 1000 əmsalı ilə qarışdırdı. Onlar xam əks-səda vaxtını seriya jurnalına çap etdikdə və onu real hökmdarla müqayisə etdikdə, xətanı tapıb düzəldirlər. Dərs: tərtib edilmiş kod düzgün kod deyil; Aparatda ölçmə səhvi dərhal aşkar edir.
Ümumi Səhvlər
- Reyestr adlarını və bit maskalarını verilənlər cədvəli ilə müqayisə etmədən qəbul etmək.
- ISR daxilində bloklama gecikməsinə və ya uzun müddət işləməyə icazə verilir.
- Paylaşılan dəyişənlərdə dəyişkənliyi unutmaq.
- Bufer və massiv sərhədlərinin yoxlanılmasından keçmək; daşqın görmürəm.
- Təsdiq etmədən saat tezliyinə və vaxta dair fərziyyələrə etibar etmək.
- Bir osiloskop/seriya jurnalı ilə ölçmədən kodun "işlədiyini" nəzərə alaraq.
Xülasə
- Quraşdırılmış tapşırığı aparat, funksiya, məhdudiyyətlər və interfeys baxımından aydın şəkildə müəyyənləşdirin.
- Süni intellekt-in preskaler/ARR kimi vaxt dəyərlərini hesablamasını və onları müstəqil şəkildə yoxlamasını təmin edin.
- ISR-ləri qısa saxlayın, paylaşılan dəyişənlərdə dəyişkən istifadə edin.
- Xüsusilə qeyd, bufer limiti və tip eni xətalarını axtarın.
- "İşləyir" kompilyatorla deyil, osiloskop, məntiq analizatoru və serial jurnalı ilə sübut olunur.
- Ölçülmüş dəyər hesablama ilə uyğun gəlmirsə, fərziyyələri təqib edin.
Tətbiq tapşırığı
Sahib olduğunuz mikrokontroller (Arduino, STM32, ESP32) ilə süni intellektdən PWM və ya müəyyən tezlikdə dövri tapşırıq üçün soruşun. Kodu yükləməzdən əvvəl: (1) şərh sətirində hesabdan asılı olmayaraq tezlik/vaxt dəyərlərini yoxlayın, (2) ISR və paylaşılan dəyişənlərdə dəyişkənlik və bloklanma olub olmadığını yoxlayın. Yüklədikdən sonra osiloskop və ya məntiq analizatoru ilə faktiki tezliyi ölçün və hədəflə müqayisə edin. Bir sapma varsa, mənbəni tapın və onu düzəldin və nəyin səhv olduğunu qeyd edin.