Jednostka 6 / 12

Sztuczna inteligencja w systemach wbudowanych i rozwoju oprogramowania sprzętowego

Zyski:

  • Możliwość przyspieszania szkieletu oprogramowania sprzętowego mikrokontrolera, sterowników i maszyn stanowych za pomocą sztucznej inteligencji
  • Możliwość przeglądania przerwań, taktowania, watchdoga i logiki małej mocy ze wsparciem AI
  • Możliwość weryfikacji kodu oprogramowania sprzętowego wygenerowanego przez sztuczną inteligencję poprzez analizę statyczną, testowanie sprzętu i wymagania bezpieczeństwa

System wbudowany to urządzenie elektroniczne zbudowane wokół mikrokontrolera (małego komputera mieszczącego procesor, pamięć i urządzenia peryferyjne w jednym chipie) zaprojektowane do wykonywania określonego zadania: termostatu, modemu, węzła czujnika, sterownika silnika. Oprogramowanie układowe to oprogramowanie bezpośrednio obsługujące sprzęt tego urządzenia. W tym module zobaczysz, jak wykorzystać sztuczną inteligencję jako akcelerator w rozwoju oprogramowania sprzętowego (pisanie sterowników, maszyna stanowa, logika przerwań i taktowania, zarządzanie niskim zużyciem energii). AI jest naprawdę potężna w kodowaniu; Jednak w świecie osadzonym kod jest powiązany ze sprzętem, czasem rzeczywistym i często bezpieczeństwem. Dlatego każda linia wytwarzana przez sztuczną inteligencję musi przejść analizę statyczną, sprawdzenie rejestru/arkusza danych i rzeczywiste testy sprzętowe.

Gdzie jest mocny, a gdzie ryzykowny w oprogramowaniu AI

Sztuczna inteligencja jest bardzo silna w zakresie „szkieletu” i „kości” oprogramowania sprzętowego: struktury sterownika I2C/SPI, szkieletu maszyny stanu (logika definiująca stany i przejścia urządzenia), implementacji bufora pierścieniowego, parsera instrukcji, szkieletu testowego. Może odczytać tabelę rejestrów w złożonym arkuszu danych i wygenerować kod inicjujący. Potrafi wyjaśnić błąd, zinterpretować ostrzeżenie kompilatora.

Tam, gdzie jest to ryzykowne, leży istota systemu wbudowanego:

  • Adresy rejestrów i pola bitowe: sztuczna inteligencja może błędnie zapamiętać mapę rejestrów chipa; Każdy adres i bit należy zweryfikować na podstawie arkusza danych.
  • Czas i czas rzeczywisty: ile mikrosekund zajmuje operacja i jak często pojawia się przerwanie, zależy od sprzętu; AI przewiduje, ty mierzysz.
  • Współbieżność: Jeśli zmienne współdzielone między procedurą obsługi przerwań (ISR) a pętlą główną nie są chronione przez dostęp ulotny i atomowy, pojawiają się ciche, niepowtarzalne błędy.
  • Limity zasobów: przepełnienie stosu, wyciek pamięci, przekroczenie limitu czasu watchdoga oznacza awarię w osadzeniu.

Przerwanie, synchronizacja i watchdog

Przerwanie ma miejsce w przypadku wystąpienia zdarzenia (nadejścia danych, upływu czasu), procesor porzuca główne zadanie i przechodzi do procedury serwisowej (ISR: procedura obsługi przerwań). ISR to najbardziej wrażliwe fragmenty kodu w systemie wbudowanym. Podstawowe zasady: ISR powinien być krótki (długą pracę pozostawia się pętli głównej), nie powinno być w nim żadnych operacji blokujących (czekaj, drukuj), zmienne współdzielone powinny być chronione.

Watchdog to mechanizm bezpieczeństwa, który automatycznie uruchamia ponownie urządzenie w przypadku awarii oprogramowania; Oprogramowanie układowe „zasila” je regularnie, jeśli nie, system zostaje zresetowany. Sztuczna inteligencja projektuje te struktury, ale czas trwania watchdoga, priorytety przerwań i budżet harmonogramu muszą zostać sprawdzone pod kątem rzeczywistego obciążenia systemu.

Wskazówka: podczas drukowania ISR do AI wyraźnie poinstruuj go, aby „utrzymywał krótki ISR, bez blokowania, oznaczał współdzielone zmienne z dostępem niestabilnym i atomowym, delegował długie zadanie do głównej pętli za pomocą flagi”. Następnie sprawdź wiersz po wierszu generowanego kodu, czy te reguły są faktycznie stosowane.

Niska moc i bezpieczeństwo

Zarządzanie niskim zużyciem energii ma kluczowe znaczenie w urządzeniach zasilanych bateryjnie: uśpienie procesora, wyłączenie urządzeń peryferyjnych, budzenie się z wydarzeniem. AI szkicuje przejścia między trybami uśpienia i logikę budzenia, ale rzeczywisty pobór prądu jest znany jedynie z pomiaru (miernik prądu na poziomie mikroamperów); AI mówiąca „pobiera ~2 µA w tym trybie” to przypuszczenie.

Z punktu widzenia bezpieczeństwa urządzenia wbudowane są coraz częściej podłączane do sieci, a luki w oprogramowaniu sprzętowym (przepełnienie bufora, nieuwierzytelnione dane wejściowe, słaba kryptografia, otwarty interfejs debugowania) stanowią poważne ryzyko. Sztuczna inteligencja może przypominać o zasadach bezpiecznego kodowania, ale bezpieczeństwo wygenerowanego kodu jest weryfikowane za pomocą narzędzi analizy statycznej, przeglądu kodu i, jeśli to konieczne, testów bezpieczeństwa. W systemach o krytycznym znaczeniu dla bezpieczeństwa (medycznych, motoryzacyjnych, przemysłowych) wyniki sztucznej inteligencji nigdy nie powinny zastępować procesów wymaganych na podstawie zatwierdzenia kompetentnego inżyniera i odpowiedniej normy bezpieczeństwa (np. IEC 61508, ISO 26262).

trzy mini etui

Przypadek 1 — Niezabezpieczona zmienna współdzielona. Inżynier żąda kodu odbioru UART od AI. Kod zwiększa licznik w ISR, a główna pętla odczytuje ten licznik; ale licznik nie jest ulotny, a odczyt wielobajtowy nie jest atomowy. Urządzenie działa przez większość czasu, ale czasami błędnie odczytuje licznik danych i błąd nie może się powtórzyć. Analiza statyczna i przegląd kodu wyłapują brakujące informacje lotne; Błąd znika gdy licznik jest chroniony. Lekcja: błędy współbieżności są częste i podstępne w kodzie AI; Warto przeczytać i sprawdzić.

Przypadek 2 — Zły bit rejestru. Stażysta przesyła kod inicjujący ADC wygenerowany przez sztuczną inteligencję; ADC odczytuje nieoczekiwane wartości. Porównując to z datasheetem okazuje się, że AI ustawiło bit konfiguracyjny w złym miejscu (mapa dla innego wariantu chipa). Po skorygowaniu bitu przetwornik ADC działa poprawnie. Lekcja: sprawdź pisownię każdego rejestru z poprawnym wariantem arkusza danych.

Przypadek 3 – Prawidłowe użycie. Inżynier prosi sztuczną inteligencję o szkielet maszyny stanu dla złożonego protokołu czujnika; opisuje stany, przejścia i gałęzie limitu czasu. Sztuczna inteligencja tworzy czyste i czytelne ramy. Inżynier przyjmuje ten schemat, weryfikuje dostęp do każdego rejestru za pomocą arkusza danych, mierzy taktowanie za pomocą oscyloskopu i testuje go sprzętowo. Rozwój kończy się w ciągu kilku godzin, a nie kilku dni. Lekcja: AI przyspiesza szkielet; Inżynier dokonuje weryfikacji.

Kopiowalne szablony podpowiedzi

SZABLON SZKIELETU STEROWNIKA"Napisz szkielet sterownika [I2C/SPI/UART] dla [chip/urządzenie peryferyjne]: funkcje inicjalizacji, odczytu, zapisu, obsługi błędów. Pozostaw adresy rejestrów i pola bitowe w PLACEHOLDER (np. REG_XXX) i zanotuj „wypełnij i zweryfikuj je z arkusza danych”. Użyj limitu czasu zamiast blokowania oczekiwania. Określ, co zakłada każda funkcja, za pomocą wiersza komentarza.

SZABLON ZABEZPIECZENIA ISR"Napisz wersję roboczą procedury obsługi przerwań (ISR) dla następującego zdarzenia: [event]. Reguły: Zachowaj krótki ISR, nie blokuj, zaznacz współdzielone zmienne z dostępem vivolatile i atomowym, deleguj długie zadanie do głównej pętli za pomocą flagi. Na końcu kodu wyszczególnij, gdzie każda z tych reguł ma zastosowanie, abym mógł to zweryfikować.

SZABLON MASZYNY STANOWEJNapisz szkielet maszyny stanu dla następującego protokołu/procesu: [opisz stany, zdarzenia, przejścia i limity czasu]. Określ akcje wejścia/wyjścia oraz gałąź błędów/przekroczenia limitu czasu dla każdego stanu. Pozostaw wartości specyficzne dla sprzętu (rejestr, czas trwania) jako symbole zastępcze i pamiętaj, że wymagają one weryfikacji.

SZABLON PRZEGLĄDU KODU „Przeanalizuj następujący kod oprogramowania sprzętowego z wbudowanej perspektywy i oznacz ryzyko: niezabezpieczona zmienna współdzielona (lotna/atomowość), długa/blokująca operacja w ISR, ryzyko przepełnienia stosu, czekanie bez przekroczenia limitu czasu, błędy rejestracji, sygnał watchdoga. Zasugeruj, jak powinienem przetestować/weryfikować każde znalezisko. Kod: [wklej].”

Słaba zachęta/silna zachęta

SŁABY PODPIS: „Napisz mi sterownik UART”.

MOCNA PODPOWIEDŹ: „Napisz oparty na przerwaniach szkielet sterownika odbioru UART dla [mikrokontrolera]. Użyj bufora pierścieniowego; zachowaj krótki ISR ​​i po prostu zapisuj do bufora, przetwarzając w głównej pętli. Spraw, aby współdzielone indeksy były lotne i niepodzielne. Pozostaw adresy rejestrów w symbolach zastępczych, zaznacz je do weryfikacji z arkusza danych. Na końcu kodu wypisz, co muszę przetestować pod względem współbieżności i czasu.

Słaby monit tworzy kod, który jest ślepy na sprzęt i współbieżność; Potężny monit nakłada wbudowane reguły i monity o listę weryfikacyjną.

Warstwy weryfikacji oprogramowania sprzętowego

warstwa

co łapie

Rola sztucznej inteligencji

Kontrola arkusza danych

Zły rejestr/bit

Generuje symbol zastępczy i notatkę kontrolną

Analiza statyczna (linter)

lotne, typ, błędy graniczne

Lista zasad i wyjaśnienie

Ostrzeżenia kompilatora

Niejawna konwersja, nieużywana wartość

Komentarz ostrzegawczy

Testowanie sprzętu

Czas, rzeczywiste zachowanie

Sugestia scenariusza testowego

Oscyloskop/analizator

Dokładność sygnału i protokołu

Punkt pomiarowy i fala oczekiwana

Przestroga: To, że oprogramowanie sprzętowe „kompiluje się” i „działa przez większość czasu”, nie oznacza, że jest prawidłowe. Błędy współbieżności i synchronizacji występują tylko w określonych warunkach; Dlatego niezbędna jest analiza statyczna i rzeczywiste testy sprzętu.

Typowe błędy

  • Brak ochrony zmiennych współdzielonych. Dane pomiędzy ISR a pętlą główną muszą być ulotne i niepodzielne.
  • Brak weryfikacji adresu/bitu rejestru w arkuszu danych. Sztuczna inteligencja może zamapować niewłaściwy wariant.
  • Utrzymywanie długiego ISR lub blokowanie w nim. System nie może odpowiedzieć, przerwania są pomijane.
  • Zakładając pomiar czasu bez pomiaru. Rzeczywisty czas zależy od sprzętu; sprawdzone oscyloskopem.
  • Pozostawienie kodu bezpieczeństwa/kluczowego dla bezpieczeństwa do zatwierdzenia przez sztuczną inteligencję. Niezbędny jest kompetentny inżynier i odpowiedni standardowy proces.

Podsumowując

W tym urządzeniu wykorzystałeś sztuczną inteligencję jako potężny akcelerator do generowania szkieletu oprogramowania sprzętowego, sterownika, maszyny stanu i szkicu ISR. Ale w świecie wbudowanym kod jest powiązany ze sprzętem, czasem rzeczywistym i bezpieczeństwem: wartości rejestrów/bitów są weryfikowane na podstawie arkusza danych, współbieżność jest weryfikowana na podstawie analizy statycznej, synchronizacja jest weryfikowana na oscyloskopie, zachowanie jest weryfikowane na podstawie rzeczywistych testów sprzętowych. AI dostarcza szkielet w ciągu kilku minut; Inżynier sprawdza poprawność, bezpieczeństwo i terminowość działania oprogramowania. W systemach o krytycznym znaczeniu dla bezpieczeństwa wyniki AI nie zastępują procesów określonych w odpowiednich normach bezpieczeństwa i zatwierdzeń kompetentnych inżynierów.

Zadanie aplikacji

Wybierz urządzenie peryferyjne (np. czujnik I2C). Korzystając z szablonu „szkieletu sterownika”, poproś sztuczną inteligencję o szkielet sterownika, który pozostawia rejestry w symbolach zastępczych. Następnie wygeneruj szkic ISR dla przerwania gotowości do danych z tego czujnika za pomocą szablonu „zabezpieczenia ISR”. Na koniec zeskanuj utworzony kod za pomocą szablonu „Przegląd kodu” pod kątem wbudowanych zagrożeń i napisz co najmniej trzy kroki weryfikacji/testowania.

lista kontrolna

  • [ ] Sprawdziłem każdy adres rejestru i bit z prawidłowego wariantu arkusza danych.
  • [ ] Zrobiłem wspólne zmienne między ISR a główną pętlą jako lotne i atomowe.
  • [ ] Utrzymywałem krótki ISR, nie blokowałem, przekazałem długie zadanie do głównej pętli.
  • [ ] Planowałem przetestować taktowanie i rzeczywiste zachowanie sprzętowo i za pomocą oscyloskopu.
  • [ ] Przeskanowałem kod za pomocą analizy statycznej i ostrzeżeń kompilatora.
  • [ ] Pozostawiłem części istotne dla bezpieczeństwa do zatwierdzenia przez kompetentnego inżyniera i zgodnie z odpowiednim standardowym procesem.