Blok wybieralny SWE: Systemy wbudowane w elektronice

  • Projektowanie systemów wbudowanych w elektronice [2W + 3P 20020]
  • Zastosowania systemów wbudowanych [2W + 3L 20200]
Wirtualny port szeregowy w Windows do testowania transmisji: https://sourceforge.net/projects/com0com/
http://hackaday.com/2016/11/16/how-to-control-your-instruments-from-a-computer-its-easier-than-you-think/

Ankieta W-??
  1. Czym jest Dalvik?
  2. Na czym polega "rootowanie" urządzenia z systemem Android? 
  3. Nazwij 3 dowolne linie (wersje) systemów Android.
  4. W jakim celu stosowany jest NDK (JNI) w Androidzie?
  5. Co oznacza "API Level" w Android SDK?
  6. Jaki język programowania jest najczęściej używany przez programistów aplikacji dla Androida? Dlaczego akurat ten język został wybrany?
Ankieta W-??
  1. Wymień i określ przeznaczenie 4 wybranych komend AT.
  2. Skąd wzięło się określenie "modem"? 
  3. W jaki sposób w trakcie aktywnego połączenia modemowego przejść z trybu danych do trybu komend?
  4. Jak DTE może potwierdzić, że DCE jest modemem?
  5. Wymień urządzenia, które wykorzystują komendy Hayesa.
Ankieta W-??
    1. Kluczowe różnice między linkami miękkimi (symbolicznymi) a twardymi (hard) w ext.
    2. Typy plików w ext.
    3. c.d.n.
    Ankieta W-08 [2017-12-07]
      1. Czym jest Qt? Dlaczego warto rozważyć użycie go w systemach embedded?
      2. Wymień rozwiązania konkurencyjne dla Qt (w kontekście systemów wbudowanych).
      3. Co zawiera MBR?
      4. Co to jest jednostka alokacji?
      5. Krótka charakterystyka (porównanie cech, możliwości) systemów plików FAT, ext2, ext4, NTFS.
      6. Co dzieje się po włączeniu zasilania komputera? Skąd wiadomo, z której partycji wystartować system? Ile może być tych partycji na jednym dysku twardym?
      7. Jak wykonać obraz urządzenia pamięci masowej (np. karty pamięci microSD) w Linuksie? Chcemy zapisać wszystkie dane z karty w pliku sdcard.img. 
      Ankieta–1 W-07 [2017-11-30]
      1. Dokładnie jeden
      2. eXtensible Markup Language.
      3. 42.
      4. (a) Serializacja (b) Deserializacja.
      5. Byte order: BigEndian, LittleEndian.
      6. Tak.
      7. Np. 3, 4, 8
      • Kto zadał pytanie numer 1?
      • 42
      • 96
      • port 80
      • 404
      • datagram

      Ankieta W-06 [2017-11-23]
      1. Wymień funkcje gniazd BSD charakterystyczne dla (S) serwera oraz (K) klienta protokołu TCP.
      2. Który z protokołów - TCP czy UDP - pozwala na użycie adresów rozgłoszeniowych (broadcast)?
      3. Wymień kolejno warstwy modelu ISO/OSI.
      4. Kiedy używamy funkcji ntohs(), ntohl(), htons(), htonl()?
      5. Rozwiń Linuksowe pojęcia tty, tar, pts.
      6. Kryteria wyboru protokołu TCP bądź UDP w zależności od zasobów sprzętowych i zastosowania systemu wbudowanego - kiedy warto wybrać UDP, a kiedy TCP? Te kryteria są rozmyte, liczy się tu umiejętność uzasadnienia takiego a nie innego wyboru.
      Ankieta W-05 [2017-11-16]
      1. Co znajduje się w katalogu /proc ?
      2. Jak technicznie realizowany jest dostęp do GPIO z poziomu Linuksa na komputerach jednopłytkowych?
      3. Do czego służą komendy: cp, top, rm, halt, sudo, mv, mkfs, mount, fdisk?
      4. W jaki sposób należy zrealizować namiastkę przerwania zmiany stanu GPIO w Linuksie, ale tak aby nie ugotować procesora?
      Ankieta W-04 [2017-11-09]
        1. Zasada działania i zastosowania CGI w serwerach WWW.
        2. Czym różnią się metody GET i POST przy wysłaniu formularza HTML do serwera WWW?
        3. Obliczanie adresu rozgłoszeniowego dla podanego IP i maski podsieci.
        4. Zaproponuj rozwiązanie, które pozwoli na sterowanie oświetleniem choinkowym z przeglądarki WWW z dowolnego miejsca na świecie. Każda lampka choinkowa to dioda RGB z modułem WiFi. Chcemy mieć możliwość m.in. jednoczesnego włączania/wyłączania choinki. Przy okazji chcielibyśmy uniknąć takiej sytuacji.
        5. Wbudowany serwer WWW pozwala sterować m.in. temperaturą wody w akwarium, przy okazji zapewniając na żywo transmisję wideo. Serwer ów działa w lokalnej sieci domowej o adresacji 192.168.0.0/255.255.255.0. Co należy zrobić, aby możliwy był bezpieczny dostęp z zewnątrz (np. z sieci PWr WiFi) do tego serwera? Raczej nie chcemy, aby transmisja wideo zamieniła się w program kulinarny z twoją ukochaną złotą rybką w roli głównego dania.
        Ankieta W-03
        1. Naszkicuj cykl życia (diagram stanów) procesu w systemie Linuks. Numeracja jest nieistotna, ale powinny się pojawić charakterystyczne nazwy.
        2. Wymień i krótko scharakteryzuj 3 mechanizmy komunikacji międzyprocesowej w systemie Linuks. 
        3. W jaki sposób z wiersza poleceń można przesłać sygnał do procesu? Który sygnał zostanie użyty w razie Apokalipsy?
        4. Dlaczego w CLI (pol. Terminal Prawdziwego Mężczyzny) systemu Linuks nie jest wskazane używanie Ctrl+C Ctrl+V? 
        5. Zdefiniuj, czym jest proces-demon (ang. daemon). Wystarczy wymienić kilka cech charakterystycznych i praktyczne zastosowania. 
        6. ...a skoro już jesteśmy przy mrocznych klimatach, to co należy zrobić, widząc zombie w Linuksie?
        7. Co będzie efektem wykonania poniższego programu? P.S.: Dodatkowa zagadka związana z genezą nazwy fork() pojawi się na zajęciach.
        int main() 
        {
        fork();
        fork();
        printf("Ułaha widelce dwa!\n");
        return 0;
        }
          Ankieta W-02 
          1. Czym się różni wątek od procesu? :)
          2. W jakim celu jest przedrostek volatile w definicji zmiennej?
          3. Co to jest sekcja krytyczna? Kiedy należy ją stosować?
          4. Jak rozwinąć nazwę "mutex"? Co to oznacza?
          5. *Jaki jest sposób komunikacji między wątkami, którego nie można użyć w komunikacji między procesami?
          6. *Do czego służy funkcja fork()? 
          Ankieta W-01 
          1. Co to jest 'epoch'?
          2. Jaką datę i czas wskaże Linuks, który uruchomiony zostanie na komputerze bez RTC?
          3. Podaj przykłady RTOS.
          4. Co łączy UNIX i język C?
          5. Do czego służy polecenie dd w Linuksie?
          6. Czym różnią się urządzenia blokowe od znakowych?
          7. W jaki sposób można wykonać komendę w Linuksie z uprawnieniami roota?
          Projekt A
          Część do wykonania poza zajęciami lub na zajęciach:
          • przygotowanie strony HTML z formularzem i JavaScript
          • przesyłanie z formularza do serwera HTTP komend i odczytywanie rezultatów (np. wysłanie rozkazu zapalenia diody, odczytanie temperatury, ...)
          • po stronie serwera HTTP można użyć CGI lub PHP - do wyboru
          • w tej samej sieci lokalnej, w której znajduje się serwer, są dostępne mikrokontrolery z interfejsem Ethernet, z którymi PHP lub CGI komunikuje się przy użyciu protokołu UDP lub przez port szeregowy.
            W warunkach domowych można przetestować wysyląnie pakietów UDP np. programem WireShark
          Część do wykonania na zajęciach
          • przygotowanie karty pamięci z systemem Linuks dla zestawu iMX53
          • uruchomienie zestawu, pobranie pakietów apache2, php5, ...
          • skopiowanie na zestaw iMX53 przygotowanych wcześniej stron HTML, PHP, programu CGI, ...
          • zademonstrowanie całości: wyświetlenie w przeglądarce WWW strony z iMX53, kliknięcie guzika, co uruchomi skrypt CGI/PHP, który z kolei wyśle pakiet UDP do mikrokontrolera w LAN, co zapali/zgasi diodę RGB.
          Projekt B
          Część do wykonania poza zajęciami lub na zajęciach:
          • przygotowanie aplikacji dla systemu Android, która potrafi wysyłać i odbierać pakiety UDP z krótkimi tekstami (np. "rgb 100 0 100\r\n")
          • przetestowanie jej na emulatorze oraz na smartfonie
          Część do wykonania na zajęciach
          • przygotowanie karty pamięci z systemem Android dla zestawu iMX53 (z Adeneo)
          • sprawdzenie w WireSharku, czy pakiety są wysyłane
          • Uruchomienie skompilowanego APK na zestawie iMX53
          Ten kurs w mniejszym stopniu zajmuje się samym sprzętem (mikrokontrolerem), skupiając się przede wszystkim na oprogramowaniu. Nie chodzi tutaj jednak o wyspecjalizowane oprogramowanie układowe realizujące konkretną funkcję (np. miganie diodą czy wymiana danych przez UART), ale o coś, co znajduje się między programami użytkowymi a sprzętem. W "dużych" systemach komputerowych tę rolę spełnia system operacyjny wraz z kilkoma dodatkowymi składnikami. W świecie mikrokontrolerów pojawiło się zapotrzebowanie na coś "lżejszego", czego nie widzi użytkownik końcowy, ale co z kolei stanowi warstwę abstrakcji dla sprzętu, ułatwiając tworzenie lepszego, bardziej przenośnego i niezawodnego oprogramowania układowego. Zajmiemy się zarówno dość prostymi systemami czasu rzeczywistego (np. MQX lite) jak też systemami operacyjnymi Linuks i Android. Nie zabraknie bardzo modnego tematu, jakim jest IoT w automatyce domowej i nie tylko.

          Zagadnienia teoretyczne prezentowane w trakcie wykładów są obszerne, ale nie wymagam drobiazgowej znajomości szczegółów. Cel tego kursu to zdobycie ogólnej wiedzy o systemach wbudowanych w elektronice oraz skupienie się na wybranych realizacjach praktycznych. Biorąc pod uwagę wyniki ankiety z pierwszych zajęć zdecydowałem o praktycznym zastosowaniu w waszych projektach systemów RTOS MQX [MCU Kinetis MK70] oraz MQX-Lite [MCU Kinetis MKL25]. Jako obiekt praktycznych zastosowań systemu "wyższego poziomu" wybrałem Android uruchomiony na zestawach iMX53QSB [MPU iMX53]. Na zestawach iMX53 uruchomimy też system Linux w wersji embedded.

          Projekt proponuję zrealizować w formie współpracy grup preferujących RTOS i do kompletu Android/Linux+QT. Grupa RTOS odpowiada za oprogramowanie MCU, grupa 'wysokopoziomowa' przygotowuje obraz systemu Android albo Linux dla zestawu MPU iMX53 i opracowuje graficzny interfejs użytkownika systemu (GUI systemu). Podzadanie 'MPU' jest możliwe do wykonania poza laboratorium 21/M6 i jest bardziej związanie z programowaniem aplikacji dla Androida lub Linuksa niż ze sprzętem.

          W trakcie dzisiejszych zajęć projektowych wpadł mi do głowy pomysł na "projekt specjalny" - LEDcube zostanie umieszczony w gablocie w korytarzu M6, w tejże gablocie będzie czytnik RFID 13.56 MHz rozpoznający legitymacje studenckie, karty paypass itp. Użytkownik anonimowy (nie zarejestrowany w systemie) po zbliżeniu karty do czytnika spowoduje wyświetlenie nudnej animacji, np. ID karty, na wyświetlaczu 3D. Odpowiada za to MCU wyposażony w łączność Ethernet/WiFi z Internetem (Kinetis K70) - ze względu na embedded HTTP oraz stos TCP konieczne jest użycie MQX RTOS.  Wybrańcy mogą przez przeglądarkę WWW albo aplikację pod Androida przygotować statyczny obrazek lub krótką animację, która zostanie załadowana do pamięci MCU. Tacy wybrańcy będą rozpoznawaniu po zbliżeniu swojej legitymacji do czytnika, co spowoduje wyświetlenie ich własnej animacji/logo na wyświetlaczu. Ekipa MPU przygotowuje apkę na Androida oraz elegancki serwis webowy dostępny po zalogowanu się do kontrolera LEDcube. Dlaczego nazwałem zarejestrowanych użytkowników systemu wybrańcami? Obrazki lub animacje kodowane są jako sekwencje heksadecymalne, poszczególne bity w sekwencji odpowiadają za zapalenie/zgaszenie konkretnego LEDa. Jedna klatka animacji 8x8x8 jest opisana 512 bitami (64 bajty, czyli 128 cyfr HEX). Animacja to wyświetlenie sekwencji klatek 3D, a jej długość jest ograniczona obecnie pojemnością pamięći SRAM kontrolera LEDcube. Tego typu sekwencje HEX z powodzeniem produkowały "w locie" dzieciaki z podstawówki i gimnazjum na zajęciach "Uniwersytet Dzieci" - przyswojenie wiedzy o systemie BIN oraz HEX zajęło im z 15 minut, później trzeba było tylko cenzurować wyświetlane w 3D treści...
          1. Wprowadzenie. Zastosowania i implementacje systemów wbudowanych
          2. Mikrokontrolery i mikroprocesory w systemach wbudowanych
          3. Embedded C oraz MISRA-C. Statyczna i dynamiczna analiza kodu
          4. Programowanie sterowane zdarzeniami
          5. Implementacja maszyny stanów w mikrokontrolerze oraz w FPGA
          6. Układy peryferyjne
          7. Obliczenia zmiennoprzecinkowe a stałoprzecinkowe
          8. Mikroprocesorowa realizacja kontrolera PID
          9. Wbudowany system plików FAT
          10. Wbudowany stos TCP/IP i serwer WWW
          11. Zastosowania systemów operacyjnych czasu rzeczywistego
          12. System Linuks na komputerze jednopłytkowym
          13. Programowanie GUI w systemie Linuks
          14. System Android

          W ramach laboratorium przewidziane zostało skonfigurowanie, oprogramowanie i uruchomienie systemów wbudowanych na następujących przykładach:
          1. Zamek elektroniczny z klawiaturą, wyświetlaczem i czytnikiem kart zbliżeniowych
          2. Implementacja termostatu z algorytmem PID
          3. Rejestrator danych pomiarowych z obsługą wbudowanego systemu plików FAT
          4. Sterownik układu automatyki budynku z wbudowanym serwerem WWW
          5. Oprogramowanie graficznego panelu dotykowego urządzenia
          Zajęcia projektowe pozwalają na wykonanie własnego urządzenia będącego implementacją jednego z systemów wbudowanych. Student ma za zadanie wybrać jeden z kilkudziesięciu dostępnych mikroprocesorowych zestawów uruchomieniowych, wykonać brakujące elementy systemu w wydziałowym laboratorium otwartym (OpenLab), zaimplementować oprogramowanie systemu wbudowanego i zademonstrować działanie kompletnego urządzenia. 
          Główny nacisk jest położony na systematyczne podejście do problemu jakości i bezpieczeństwa oprogramowania systemowego. W zależności od klasy zastosowań wymagane będzie także zagwarantowanie czasu reakcji systemu (np. poprzez użycie RTOS). Preferowana jest praca grupowa polegająca na podziale zadań między członkami grupy w taki sposób, że po przygotowaniu specyfikacji systemu jeden zespół opracowuje część niskopoziomową (firmware, hardware), a drugi zespół wykonuje ergonomiczny interfejs dla użytkownika systemu (software, GUI).

          Organizacja zajęć

          Podobnie jak na kursach CIK i SBB, także na SWE będzie możliwość zdobycia zaliczenia poprzez systematyczne zdobywanie punktów na krótkich testach przed wykładami. Oczywiście można będzie uzyskać zaliczenie lub poprawić ocenę na końcowym kolokwium. Zajęcia projektowe będą nieco bardziej sformalizowane, bo jak się ostatnio okazało, pospolite ruszenie w ostatnim tygodniu semestru jest kiepskim pomysłem. Będę premiował systematyczną pracę i dostarczanie przez was w trakcie semestru efektów realizacji kolejnych etapów projektu. Nie będzie to forma laboratorium, kiedy wszyscy dzielnie i niekoniecznie ze zrozumieniem tłuką instrukcje do zajęć, ale z racji trudności z dostępem do potrzebnego sprzętu w warunkach domowych warto będzie pojawić się w sali 21/M6 przynajmniej kilka razy w semestrze.
          Mniej więcej znam już wasze umiejętności i zainteresowanie tematyką kursu, dlatego mimo wszystko przygotuję kilka instrukcji z zadaniami, które ułatwią uzyskanie pozytywnej oceny końcowej.