- system komputerowy będący częścią jakiegoś urządzenia
- najczęściej stałe oprogramowanie
- stały zestaw sprzętu
- reakcja w czasie rzeczywistym
- przewidywalny czas wykonania operacji
- przewidywalny i ograniczony z góry czas reakcji
- ścisłe reguły szeregowania
- wykorzystanie systemu przerwań
Prototypowanie systemów wbudowanych
Seminarium Niezawodność Systemów Współbieżnych i Obiektowych
Adam Morawski
MIMUW
30 listopada 2011
Realizacja
API
- C, oddzielne funkcje dla każdego interfejsu
- w tej chwili SPI (głównie master), GPIO
- struktury danych do konfiguracji i ustawiania parametrów bardziej złożonych transferów
- oddzielne funkcje realizujące proste transfery
- tworzenie kilku interfejsów logicznych dla jednego fizycznego (SPI)
- podpinanie przerwań
System wbudowany
FreeRTOS
Implementacja na MCU
- korzysta z STM32_StdPeriphLib
- DMA dla dużych transferów
Komunikacja z przejściówką
- System operacyjny czasu rzeczywistego, dostępny dla wielu mikrokontrolerów, GPL
- Uruchamianie zadań o różnych priorytetach + idle, ścisłe trzymanie się priorytetów przy szeregowaniu, tryb wywłaszczeniowy lub współpracujący
- Mechanizmy synchronizacyjne: kolejki, semafory, muteksy, sekcja krytyczna, sleep, uwzględnienie obsługi z przerwań
- Różne sposoby zarządzania pamięcią
- Zużywa jedno przerwanie zegarowe - tu abstrakcja sprzętu, poza tym sprzętem się nie zajmuje
- API
- Implementacja na MCU
- komunikacja z przejściówką
- Implementacja na PC
- Obsługa przerwań
- Uruchamianie zadań na przejściówce
- Komunikacja między zadaniami uruchomionymi na różnych urządzeniach
- USB - bulk, być może interrupt
- protokół: operacje na pamięci, obsługa interfejsów (ustawienie+transfer) - przesyłanie struktur (działa z 32-bitowym linuksem na intelu, kompilowane GCC), zarządzanie zadaniami i przerwaniami, komunikacja między zadaniami
Sposoby implementacji
System czasu rzeczywistego
Rodzaje obsługiwanych urządzeń
- wymagające szybkiej reakcji (interrupt)
- wymagające dużej przepustowości (bulk)
- wymagające regularnej obsługi (isochronous)
Uruchamianie kodu na przejściówce
- wielka pętla
- wszystko w przerwaniach
- pojedynczy program + przerwania
- [RT]OS + przerwania
Szybkość reakcji vs przepustowość
Przykłady urządzeń
- czujnik uderzenia
- karta pamięci
- przetwornik analogowo-cyfrowy
- kompromisy przy szeregowaniu pozwalają zwiększyć przepustowość
- częste, szybkie reagowanie na zdarzenia przeszkadza w zadaniach wymagających dużej przepustowości
- kod linkowany z uwzględnieniem miejsca, do którego będzie wgrany (nie przenośny)
- kod powinien wykorzystywać fragmenty stałego oprogramowania przejściówki (realizacja API, komunikacja, funkcje FreeRTOS, inne standardowe funkcje)
- umieszczany w RAM lub Flash
Implementacja na PC
Pomysły 1
Mikrokontroler
- linux, libusb
- obsługa dużych transferów
- kompilowanie kodu dla przejściówki, wgrywanie go i uruchamianie/podpinanie pod przerwania
Przykładowe peryferia
- GPIO
- kontroler przerwań
- Timery - liczniki, PWM...
- Interfejsy komunikacyjne
- Przetworniki AC, CA, komparatory
- Sterowanie zasilaniem, taktowaniem
- Kontroler DMA
- Uniwersalne, rozszerzalne API (C) dla interfejsów szeregowych (głównie SPI, I2C, głównie master)
- Implementacja na jakimś mikrokontrolerze
- Stworzenie "przejściówki" pozwalającej uruchamiać program (prototyp aplikacji) na PC korzystającej przez to API z fizycznych interfejsów - łatwiejsze prototypowanie i debuggowanie
- Praca magisterska "Wspomaganie projektowania aplikacji wykorzystujących interfejsy szeregowe" pod kierunkiem dr Marcina Peczarskiego
- CPU + pamięci + peryferia
- sprzętowe układy komunikacyjne
- możliwości debuggowania
- warunki ekonomiczne użycia
Etapy prototypowania
Skutki uboczne
- logiczny podział komponentów
- minimalizowanie komunikacji poprzez bezpośrednie pisanie po pamięci
- usunięte lub odłożone w czasie stosowanie rozwiązań specyficznych dla danego sprzętu
- przenoszenie ułatwia wyłapanie czegoś co działa, ale nie wiadomo dlaczego
- narzut na wydajność
- prototypowanie można zakończyć w dowolnym momencie
- urządzenie samodzielne lub sterowane z komputera
STM32F107VCT6
Interfejsy komunikacyjne
Pomysły 2
USB
- interfejs szeregowy + protokół
- urządzenia mogą tworzyć drzewiastą sieć
- 1 host i wiele urządzeń (device)
- komunikację zawsze inicjuje host
- kanały logiczne - endpointy - 4 rodzaje
- Rdzeń ARM Cortex-M3, do 100MHz, 256kB Flash, 64kB RAM
- Kontrola nad częstotliwością taktowania i zasilaniem
- SPI, I2C, USART, CAN, przetw. AC, CA
- USB 2.0 full speed - host, device, OTG
- Ethernet MAC
- 12 kanałowy DMA
- LQFP64, 28.69PLN
- proste szeregowe: I2C, SPI, USART, one-wire...
- CAN
- USB
- Interfejsy "pamięciowe"
- Ethernet
Co by tu zweryfikować?
- Uruchamianie zadań na "przejściówce" - fragmenty krytyczne czasowo, płynne przenoszenie prototypu aplikacji
- Konieczne rozszerzenie API o obsługę GPIO
- Implementacja jakichś mechanizmów synchronizacyjnych (wzorowane na FreeRTOS)
- czasy: reakcji na zdarzenie, obsługi, oczekiwania na wybudzenie zadania
- własności żywotności i bezpieczeństwa - uwzględnienie asynchroniczności przerwań
- własności użycia pamięci (niewychodzenie poza stos, niepisanie tam gdzie nie trzeba)
- zbadanie własności części pośredniczącej (poprawność, opóźnienia)