Systemy dla Internetu Rzeczy (6). System operacyjny czasu rzeczywistego TI-RTOS - zadania i przerwania

Systemy dla Internetu Rzeczy (6). System operacyjny czasu rzeczywistego TI-RTOS - zadania i przerwania
Pobierz PDF Download icon
Podstawą efektywnego działania systemów wbudowanych jest praca w czasie rzeczywistym. Istotnym elementem procesu tworzenia i uruchamiania oprogramowania dla tych systemów jest możliwość podglądania działania wątków. Z taką sytuacją mamy do czynienia w wypadku układu CC2650 SensorTag firmy Texas Instruments. Dlatego producent przygotował wersję systemu operacyjnego czasu rzeczywistego TI-RTOS zawierającego rozszerzenia debugowe oraz ściśle powiązanego ze stosem komunikacyjnym.

W artykułach z cyklu „Systemy dla Internetu Rzeczy” omówiono zestaw CC2650 SensorTag [1], jego użytkowanie [2] oraz moduły rozszerzeń Debug DevPack, Display DevPack (LCD screen) i LED Audio DevPack [3]. Moduł CC1310 LaunchPad został omówiony w kolejnym odcinku [4].

W poprzednim odcinku kursu przedstawiono system operacyjny czasu rzeczywistego TI-RTOS dla serii układów scalonych CC13xx/CC26xx [5]. Praktyczne ćwiczenie z prostym programem dotyczyło zestawu CC2650 SensorTag.

Dokumentacja

Linki do aktualnych wersji podstawowej dokumentacji można znaleźć na stronie TI-RTOS [6] oraz na stronach TI Wiki [13, 14]. Opis rdzenia systemu jest opisany w dokumencie SYS/BIOS (TI-RTOS Kernel) User’s Guide [9]. Opis ogólny systemu jest zamieszczony w dokumencie TI-RTOS 2.20 User’s Guide [11]. Opis wersji dla procesorów serii CC26xx jest zamieszczony w TI-RTOS 2.20 for CC13xx/CC26xx SimpleLink Getting Started Guide [8] oraz w CC2640/CC2650 Bluetooth low energy Sof-
tware Developer’s Guide
[10].

Podstawowym źródłem dokumentacji zainstalowanej lokalnie w komputerze PC w wersji systemu TI-RTOS jest plik Documentation_Overview_cc13xx_cc26xx.html zamieszczony w ścieżce C:titirtos_cc13xx_cc26xx_2_20_01_08docs. Pliki opisu są w formacie pdf i htm. Jest również dokumentacja drajwerów peryferyjnych w formacie Doxygen. W pliku są też odnośniki do stron internetowych. Na portalu społecznościowym TI E2E Community znajduje się bardzo przydatna strona CC2640/CC2650 Getting Started and FAQ [12]. Jest ona często aktualizowana i zawiera odpowiedzi na najczęściej zadawane pytania.

Warsztaty SimpleLink Academy 

Bardzo ciekawą pomocą dla każdego, kto zaczyna pracować z procesorami rodziny CC13xx/CC26xx, są ćwiczenia warsztatowe SimpleLink Academy [16]. Dostępnych jest wiele ćwiczeń z dokładnym opisem oraz kodem źródłowym. Dla wielu ćwiczeń jest udostępniony zapis wideo.

Ćwiczenie TI-RTOS Basic – Lab 1 

To ćwiczenie jest dalszym ciągiem ćwiczenia przedstawionego w poprzednim odcinku kursu [5]. Postępowanie jest opisane w dwóch wariantach:

- Kontynuacja poprzedniego ćwiczenia z wykorzystaniem poprzednio utworzonego folderu roboczego.
- Utworzenie nowego folderu roboczego i rozpoczęcie pracy z systemem TI-RTOS od obecnego materiału.

Ćwiczenie pokazuje (krok po kroku) praktyczne używanie podstawowych elementów systemu operacyjnego czasu rzeczywistego TI-RTOS. Jest ono wzorowane na ćwiczeniu TI-RTOS Basic w portalu SimpleLink Academy [16]. Zostały jednak wprowadzone liczne zmiany i rozszerzenia.

Wymagania sprzętowe

Do pracy potrzebny jest zestaw CC2650 SensorTag z dołączonym modułem rozszerzeń Debug DevPack, połączony z komputerem kablem USB-A USB-Micro oraz komputer PC z systemem operacyjnym Windows 7 (lub nowszym).

Ćwiczenie można też wykonywać z użyciem modułu uruchomieniowego CC2650 LanuchPad lub modułu CC2650EM Evaluation Module z płytą SmartRF06 Evaluation Board.

Wymagania programowe

- Zainstalowany program CCS v7 (lub nowszy).
- Zainstalowany program BLE-STACK V2.2.1 (Support for CC2640/CC2650) [7].

Instalowany jest:

- stos BLE w ścieżce C:tisimplelinkble_sdk_2_02_01_18.
- biblioteki systemu operacyjnego TI-RTOS w ścieżce C:titirtos_cc13xx_cc26xx_2_20_01_08.
- biblioteki zewnętrzne tego systemu w ścieżce C:tixdctools_3_32_00_06_core.

Zainstalowane źródła pakietu SimpleLink Academyv1.11 w ścieżce C:tisimplelink_academy_01_11_00_0000

Istotna jest powyższa kolejność instalowania oprogramowania. Po zainstalowaniu każdego pakietu należy uruchomić CCSv7. Pozwala to na zbudowanie przez CCSv7 bazy projektów przykładowych dostarczanych przez pakiet.

Uruchamianie CCSv7

Do zestawu CC2650 SensorTag dołącz moduł rozszerzeń Debug DevPack (dokładniejszy opis w [2]). Połącz go z komputerem kablem USB-A USB-Micro. Na płytce modułu Debug DevPack zaczyna świecić dioda LED, co sygnalizuje, że moduł jest gotowy do pracy.

1. Otwórz Menadżer urządzeń i czekaj, aż zostaną zainstalowane wszystkie drajwery sprzętowe.
2. Uruchom program CCSv7. Kliknij dwukrotnie na jego ikonę.
3. W oknie Workspace Launcher pozostaw (lub wpisz) ścieżkę do folderu roboczego, np. <C:home_dirwork_ART5>. Kliknij OK.
4. Obserwuj informacje na pasku w prawym dolnym rogu. Dotyczą one ładowania modułów środowiska Eclips oraz sprawdzania dostępności aktualizacji. Najlepiej zaczekać na zakończenie tych prac.
5. Zamknij okno Updates Avilable (jeśli się pojawi) lub wykonaj aktualizację.

Wykorzystanie projektu z poprzedniego odcinka kursu

W poprzednim odcinku kursu został utworzony folder roboczy C:home_dirwork_ART5tirtos_lab1_cc2650stk z projektem tirtos_lab1_cc2650stk. Teraz można z niego ponownie skorzystać. Środowisko CCSv7 jest już gotowe do pracy. Jeśli masz otworzone środowisko CCSv7 po zakończeniu poprzedniego ćwiczenia, to przejdź od razu do punktu 12.

Ładowanie nowego projektu

Jeśli zaczynamy dopiero pracować z projektem tirtos_lab1_cc2650stk, można go teraz załadować w sposób podobny jak w poprzednim odcinku kursu.

6. Otwórz okno Resource Explorer z menu View ’ Resource Explorer Classic.
7. W zakładce TI Resource Explorer rozwiń listę SimpleLink Academy 1.11 ’ TI-RTOS ’ Projects ’ Lab 1.
8. Kliknij na linię CC2650 SensorTag. Po prawej stronie zostanie wyświetlona instrukcja, jak postępować w czterech krokach (rysunek 1).
9. Kliknij na odnośnik kroku 1. Po załadowaniu projektu zostanie pokazana w oknie Project Explorer linia projektu tirtos_lab1_cc2650stk [Active – Debug]. Otwierane są także w oknach edycji pliki lab1-main.c oraz lab1-main-solution.c.
10. Kliknij na zakładkę TI Resource Explorer. Zielony znaczek √ pojawi się na prawo od odnośnika kroku 1. Jeśli znaczek się nie pojawi, należy kliknąć w zakładce TI Resource Explorer na linię CC2650 SensorTag.

Zadania systemu TI-RTOS

Nowa wersja projektu ma monitorować stan przycisku Board_BUTTON0 co 10 ms i po wykryciu jego przyciśnięcia wykonywać funkcję doUrgentWork. Reprezentuje ona watek realizujący najważniejszą część działania. Następna wersja projektu wykorzystuje przerwanie sprzętowe do obsługiwania reakcji na przyciśnięcie przycisku. Drajwer wyprowadzenia (PIN) sam realizuje powiązanie funkcji callback z tym zdarzeniem.

Tworzenie nowego zadania

11. W oknie „Project Explorer” perspektywy CCS Edit rozwiń drzewo projektu tirtos_lab1_cc2650stk (rysunek 2).
12. W oknie Project Explorer kliknij prawym przyciskiem myszki na plik lab1-main.c i z podręcznego menu wybierz Exclude from Building.
13. W oknie Project Explorer kliknij prawym przyciskiem myszki na plik lab1-main-solution.c i z podręcznego menu wybierz Copy.
14. Kolejny raz kliknij prawym przyciskiem myszki na plik lab1-main-solution.c i z podręcznego menu wybierz Paste.
15. W oknie Name Conflict wpisz nową nazwę pliku lab1-main-Task2.c. Kliknij OK.
16. Otwórz plik lab1-main-Task2.c. Kliknij dwukrotnie na linię z jego nazwą.
17. Opatrz komentarzem linie kodu 145-146 (wpisz // na początku każdej linii).
18. Opatrz komentarzem linię 118.
19. Wstaw kopie linii 110 po linii 118 jako nowa linia 119.
20. Skróć czas oczekiwania dwukrotnie.
21. Opatrz komentarzem linię 128. Kod powinien wyglądać jak na rysunku 3.
22. Otwórz plik flash_debug.cfg. Dwukrotnie kliknij na linię z jego nazwą.
23. Na dole okna flash_debug.cfg zobacz, czy otworzona jest zakładka TI-RTOS (a nie cfg Script) (rysunek 4).
24. W panelu Outline po prawej stronie zaznacz LoggingSetup (kliknij na linię).
25. W polu RTOS Execution Analysis sprawdź, czy są zaznaczone pola: SWI, HWI and Semaphores.

Teraz podczas kolejnego budowania projektu obsługa monitowania tych elementów systemu TI-RTOS będzie dołączona do projektu.

26. Zbuduj projekt tirtos_lab1_cc2650stk W celu zbudowania projektu wybierz z menu Project ’ Clean. Nie używaj przycisku Build  lub przycisku Debug.
27. W oknie Clean kliknij na OK. Zielony znaczek √ pojawi się na prawo od odnośnika kroku. Jeśli znaczek się nie pojawił, to trzeba w zakładce TI Resource Explorer kliknąć na linię projektu CC2650 SensorTag. W projekcie już został wcześniej zdefiniowany typ emulatora „Texas Instruments XDS110 USB Debug Probe”. Dlatego zielony znaczek przy odnośniku kroku 3 jest ustawiony.

27. Debaguj projekt tirtos_lab1_cc2650stk
28. Kliknij na przycisk Debug.
29. Czekaj, aż kursor w oknie edycji pliku lab1-main-Task2.c zostanie umieszczony w pierwszej linii funkcji main().
30. Uruchom program tirtos_lab1_cc2650stk.
31. Na pasku narzędzi perspektywy CCS Debug kliknij na przycisk Resume .

Program zaczyna pracować. Dioda LED1 (czerwona) zestawu CC2650STK SensorTag zapala się na 1 sekundę z jednosekundową przerwą.

32. Po pięciokrotnym zaświeceniu diody LED kliknij na przycisk Suspend  (Halt/Pause). Spowoduje to zatrzymanie działania programu.

Okno RTOS Object View

Okno RTOS Object View (lub w skrócie ROV) pozwala na wgląd w stan obiektów systemu TI-RTOS [17]. Informacja jest aktualizowana przez łącze JTAG po zatrzymaniu pracy procesora.

33. Otwórz ROV z menu Tools ’ RTOS Object View (ROV). Otwierana jest tabelka z informacją o obiektach systemu TI-RTOS.
34. Zamknij okno Console. W zakładce RTOS Object View (ROV) rozwiń drzewo tirtos_lab1_cc2650stk.out. Wybierz pozycję Task i otwórz zakładkę Detailed (rysunek 5).

W oknie można zobaczyć, które zadanie jest aktualnie wykonywane (Running), które jest zablokowane (Blocked), a które jest gotowe (Ready). Obecnie jest widoczne zadanie tła – IdleTask (uruchomione) i możemy sprawdzić wielkość jego stosu (512) oraz jego maksymalny rozmiar (240). Są jeszcze dwa zadania, które są zablokowane.

Okno Execution graph

Okno Execution Graph pokazuje informacje o stanie systemu TI-RTOS podczas pracy w czasie [15]. Lista wątków jest pokazana w lewej kolumnie. Uwidoczniona jest aktywność wątków zdefiniowanych przez użytkownika (HWI, SWI, Semaphore), jego zadań (Task) oraz wątków systemu operacyjnego. Kolorowa linia pokazuje, kiedy wątek jest aktywny. Dokładniejszy opis jest zamieszczony w dokumencie [15].

35. Z menu wybierz Tools ’ RTOS Analyzer ’ Execution Analysis.
36. W oknie Analysis Configuration zaznacz tylko Execution Graph, pozostaw resztę ustawień bez zmian i naciśnij przycisk Start.
37. W nowym oknie zakładki Execution Graph rozwiń widoczność wątków Cortex_M3_0.*OS (rysunek 6).

W oknie zakładki Execution Graph kliknij na linię czasu (Time (s)), przytrzymaj i kółkiem myszy zmień skalę wykresu tak, aby zobaczyć obraz podobny do pokazanego na rysunku 6. Teraz są aktywne naprzemiennie dwa zadania – WorkTaskFunc oraz urgentWorkTaskFunc. Pomiędzy nimi jest aktywowane zadanie tła knl_Idle_loop.

Symbole stosowane na wykresie okna Execution Graph

Przerwania sprzętowe. Nawiasy „[” oraz „]” oznaczają początek i koniec pracy wątku. Jeśli wystąpi utrata danych, wtedy pokazywana jest ikonka.

Przerwania programowe. Ikonka  informuje, że wątek został aktywowany (post). Nawiasy „[” oraz „]” oznaczają początek i koniec pracy wątku.

Tworzenie semafora

Teraz zostanie utworzony semafor w sposób statyczny przy zastosowaniu pliku konfiguracyjnego flash_debug.cfg.

38. Przejdź do perspektywy CCS Edit.
39. Otwórz okno edycji pliku flash_debug.cfg.
40. W panelu Outline po prawej stronie zaznacz Semaphore (kliknij na linię).
41. W menu okna wybierz zakładkę Instance.
42. Kliknij na przycisk Add.
43. W linii Handle wpisz urgentWorkSem.
44. W polu Semaphore type wybierz typ Binary (FIFO) (rysunek 7).
45. Zapisz plik flash_debug.cfg z menu File ’ Save lub klinij na ikonkę  Save.

Nowo utworzony semafor urgentWorkSem jest dostępny w globalnej przestrzeni nazw (symboli adresowych) projektu. Zostanie on automatycznie użyty podczas budowania projektu.

46. W oknie edycji pliku flash_debug.cfg kliknij na zakładkę cfg Script).
47. Przejdź na koniec pliku.

Właśnie zostały dodane nowe cztery linie do pliku flash_debug.cfg (rysunek 8).

Używanie semafora

48. W oknie Project Explorer kliknij prawym klawiszem myszki na plik lab1-main-Task2.c i z podręcznego menu wybierz Exclude from Building.
49. W oknie Project Explorer kliknij prawym klawiszem myszki na plik lab1-main-solution.c i z podręcznego menu wybierz Exclude from Building. Oznacza to włączenie tego pliku do budowania.

Teraz przerwanie sprzętowe HWI tylko ustawia semafor, co powoduje odblokowanie oczekującego zadania urgentWorkTaskFunc.

50. Zbuduj projekt. Wybierz z menu Project ’ Clean. Nie używaj przycisku Build  lub przycisku Debug .
51. W oknie Clean kliknij na OK.
52. Po wyświetleniu okna Reload the program automatically kliknij przycisk Yes (rysunek 9).
53. Czekaj, aż kursor w oknie edycji pliku lab1-main-solution.c zostanie umieszczony w pierwszej linii funkcji main().
54. Przejdź do perspektywy CCS Debug.
55. Uruchom ponownie program tirtos_lab1_cc2650stk.
56. Na pasku narzędzi perspektywy CCS Debug kliknij na przycisk Resume .
57. Gdy dioda LED zostanie zaświecona, drugi raz przyciśnij i zwolnij prawy przycisk modułu CC2650 SensorTag.
58. Po pięciokrotnym zaświeceniu się diody LED kliknij na przycisk Suspend  (Halt/Pause).
59. Zobacz wykres w oknie zakładki Execution Graph (rysunek 10).
60. W oknie zakładki Execution Graph rozciągnij wykres w okolicach przełączania z systemowego zadania tła do zadania workTaskFunc (rysunek 11).

Zakończenie zliczania czasu uśpienia powoduje zgłoszenie przerwania sprzętowego. Wątek przerwania sprzętowego aktywuje funkcję zegara. Po jego zakończeniu startuje praca wątku przerwania programowego (zegarowego) i następnie sterowanie jest przekazywane do programu szeregującego zadania (scheduler). Zadanie workTaskFunc jest gotowe i zostaje uruchomione – zaczyna świecić dioda LED.

61. W oknie zakładki Execution Graph rozciągnij wykres w okolicach przełączania z systemowego zadania workTaskFunc do zadania tła (rysunek 12). Zadanie workTaskFunc kończy pracę – dioda LED gaśnie. Zadanie zostaje zablokowane i program szeregujący zadania uruchamia zadanie tła.

62. W oknie zakładki Execution Graph rozciągnij wykres w okolicach przyciśnięcia przycisku (rysunek 13).

Widoczna jest cała sekwencja działań. Zadanie workTaskFunc pracuje normalnie. Pojawia się przerwanie sprzętowe HWI, które powołuje przerwanie programowe SWI. Po zakończeniu pracy HWI startuje program szeregujący, który uruchamia oczekujące SWI. SWI ustawia semafor i kończy pracę. Powoduje to zmianę stanu zadania urgentWorkTaskFunc z zablokowanego do gotowego. Uruchamiane jest zadanie oczekujące o najwyższym priorytecie, czyli zadanie urgentWorkTaskFunc.

63. W oknie zakładki Execution Graph rozciągnij wykres w okolicach zwolnienia przycisku (rysunek 14).

Po zwolnieniu przycisku stan semafora zostaje zmieniony i zadanie urgentWorkTaskFunc blokuje się i kończy pracę. Uruchamiane jest zadanie oczekujące o najwyższym priorytecie, czyli zadanie workTaskFunc.

Podsumowanie

Ćwiczenia 5 i 6 kursu „Systemy dla Internetu Rzeczy” pozwalają na praktyczne zapoznanie się z aplikacją pracującą z wykorzystaniem systemu operacyjnego czasu rzeczywistego. Kolejne modyfikacje projektu pozwalały na poznawanie zastosowania zadań, przerwań i semaforów. Cenną zaletą systemu TI-RTOS jest możliwość graficznego wglądu w pracę wątków z bezinwazyjnym podglądem zależności czasowych ich pracy.

Henryk A. Kowalski
kowalski@ii.pw.edu.pl

 

Literatura:

Systemy dla Internetu Rzeczy (1). Zestaw CC2650 SensorTag, „Elektronika Praktyczna”, 12/2016
Systemy dla Internetu Rzeczy (2). Użytkowanie zestawu CC2650 SensorTag, „Elektronika Praktyczna”, 1/2017
Systemy dla Internetu Rzeczy (3). Moduły rozszerzeń DevPack dla zestawu SensorTag, „Elektronika Praktyczna”, 2/2017
Systemy dla Internetu Rzeczy (4). Zestaw CC1310 LaunchPad, „Elektronika Praktyczna”, 3/2017
Systemy dla Internetu Rzeczy (5). System operacyjny czasu rzeczywistego TI-RTOS – pierwszy program, „Elektronika Praktyczna”, 4/2017
TI-RTOS: Real-Time Operating System (RTOS) for Microcontrollers (MCU), https://goo.gl/34YH5f
BLE-STACK V2.2.1 (Support for CC2640/CC2650) v2.2.1, 28-OCT-2016, https://goo.gl/00dsyZ 
TI-RTOS 2.20 for CC13xx/CC26xx SimpleLink Getting Started Guide (SPRUHU7D.pdf), 17 Jun 2016, https://goo.gl/f199w8
SYS/BIOS (TI-RTOS Kernel) v6.46 User’s Guide (SPRUEX3Q.pdf), 16 Jun 2016, https://goo.gl/v6wXTd
CC2640/CC2650 Bluetooth low energy Software Developer’s Guide (SWRU393D.pdf) 15 October 2016, https://goo.gl/6mka3t
TI-RTOS 2.20 User’s Guide (SPRUHD4M.pdf), 17 Jun 2016, https://goo.gl/NW3s85
CC2640/CC2650 Getting Started and FAQ, 2016 Oct 31, https://goo.gl/UIP40E
TI-RTOS (TI WIKI), https://goo.gl/K1FTyv
Category:SYSBIOS (TI WIKI), https://goo.gl/jlDFap
System Analyzer User’s Guide (SPRUH43.pdf) (ver. „F” March 2014), https://goo.gl/Trk7dp
SimpleLink Academy (v1.11 – November 4th 2016), https://goo.gl/vBP9Nq
Runtime Object Viewer, Using ROV for Eclipse-Based Debugging, https://goo.gl/rgY25o

DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik październik 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad 2020

Świat Radio

Magazyn użytkowników eteru

Automatyka Podzespoły Aplikacje październik 2020

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna październik 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich październik 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów