Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Techniki programowania, wdrożenie systemu operacyjnego, jak zacząć?

Electix 10 Sty 2012 18:57 2178 9
  • #1 10 Sty 2012 18:57
    Electix
    Poziom 20  

    Witam serdecznie! :)

    Pracuję od dłuższego czasu nad oprogramowaniem do mojego projektu dyplomowego. I stanąłem przed takim dylematem, że program rozrósł się do kilku plików, zawiera masę funkcji, obsługuje wiele urządzeń peryferyjnych i prowadzi pewne obliczenia.

    Generalnie całość działa, aczkolwiek dostrzegam pewne niedokładności, które wynikają z tego że progam nie wyrabia się zawsze ze wszystkim na czas.

    Moja przygoda z programowaniem (tak na poważniej) zaczęła się stosunkowo niedawno, zatem brak mi wiele doświadczenia w tej dziedzinie, pomimo iż wiedzę o języku C i samym mikrokontrolerze [ARM7] zdążyłem zgłębić już całkiem nieźle.

    Nie wiem jaką strategię, czy technikę przyjąć w pisaniu oprogramowania, czy wywalać jak najwięcej obsługi do przerwań, czy może jak najwięcej w pętli głównej, jak porozdzielać czasowo dostęp do rdzenia przez poszczególne części programu, tak żeby wszystko nadążało się "wyrabiać"?

    A może czas pomyśleć o systemie operacyjnym (FreeRTOS na przykład), choć wydaje mi się to puki co trudnym zadaniem, bo brakuje mi chyba trochę wiedzy teoretycznej w dziedzinie OS.

    Czy może mi ktoś doradzić jak się zabrać do tych problemów, od czego może zacząć, gdzie szukać? Czy możecie mi polecić jakąś literaturę, lub źródła?

    Ja wynalazłem dwie pozycje w BTC (o linuksie embeded i QNX) czy lektura tych pozycji jakoś mi pomoże? W internecie po polsku znalazłem kilka materiałów, ale były na tyle chaotycznie napisane, że niewiele mi dały. A pomimo iż posługuję się j. angielskim na poziomie średnim, ciężko mi się było przegryźć przez opisy ze strony FreeRTOS. Stąd pytam, jak się do tego zabrać, może ktoś już przebrnął tą ścieżkę i jest w stanie mi coś doradzić?

    Pozdrawiam :)

    0 9
  • #2 10 Sty 2012 22:14
    Zaquadnik
    Poziom 27  

    Książka o Linuksie Embedded dotyczy stricte Linuxa i jego implementacji w systemach wbudowanych, ale na ARM7 bez MMU nie uruchomisz Linuxa. Poza tym, skoro CPU się nie wyrabia to OS raczej nie pomoże. OS to także pewien narzut związany z przełączaniem zadań i wykonywaniem funkcji OSa. Co do przerwań, powinny być jak najkrótsze. W przerwaniu np. odbierasz dane, wsadzasz do bufora i aktywujesz flagę, że dane są, a program główny sprawdza flagę i w razie potrzeby obsługuje dane.

    0
  • #3 10 Sty 2012 22:54
    Electix
    Poziom 20  

    Mniej więcej mam podobnie zorganizowany program, tak jak piszesz... Przerwania starałem się pisać jak najkrócej. Obsługują one peryferia w mikrokontrolerze. Dane z przerwań umieszczam w globalnych danych i załączam flagi. Potem przetwarzam te dane w pętli głównej na podstawie tych flag. Ale zależności czasowe pomiędzy poszczególnymi przerwaniami i przetwarzaniem danych w pętli głównej, powodują pewne opóźnienia w reakcji. Stąd mam wrażenie że program nie wyrabia się ze wszystkim na czas. Dlatego pomyślałem o OS, bo tam scheduler dzieli czas procesora sprawiedliwie i pozwala na bieżąco, bez gubienia danych, je przetwarzać.

    A pytałem o podpowiedzi co do źródeł informacji, bo wydaje mi się że poznanie reguł działania systemów operacyjnych, pomoże mi odpalić wspomniany FreeRTOS, albo przynajmniej sprawi, że będę umiał pisać programy, które będą sprawniej działać...

    0
  • #4 10 Sty 2012 23:02
    Zaquadnik
    Poziom 27  

    Lepiej poczytać dokumentację FreeRTOSa. Jakiego konkretnie masz ARMa (Atmel, NXP itp.) ? FreeRTOS na pewno odpalałem na STM32, bodajże też coś z tym robiłem na LPC2148 i AT91SAM7Sxxx, tyle, że nie pamiętam czy to na 100% działało na dwóch ostatnich. Potem temat nieco zaniedbałem z uwagi na brak czasu. W każdym razie na STM32 działało mi to.

    0
  • #5 10 Sty 2012 23:11
    Electix
    Poziom 20  

    Działam na LPC2378, ma całkiem sporo możliwości, a przede wszystkim ETHERNET, dużo interfejsów komunikacyjnych, EMC. Mam też moduł z STM32, ale za to zabiorę się jak dokończę projekt dyplomowy.

    Gdy ogarnę to co w tej chwili oprogramowuję, chciałbym odpalić jeszcze jakiś WEBserver, USB.

    Nie mogę tylko zajarzyć jak przepisać dotychczasowe funkcje pod FreeRTOS. Jak zaskoczę, to myślę że pójdzie już jak z płatka. :)

    0
  • #6 10 Sty 2012 23:25
    Zaquadnik
    Poziom 27  

    W zasadzie musisz zastanowić się jakie równoległe wątki mają być w systemie. Mogą się komunikować ze sobą tylko za pośrednictwem mechanizmów udostępnianych przez FreeRTOS (o ile dobrze pamiętam jest tam mechanizm kolejek). Do synchronizacji służą semafory. Jeśli potrzebujesz wiedzy o problemach związanych z synchronizacją zadań w OSie wielozadaniowym i ogólnie technikach programowania "wielozadaniowego" polecam książkę "Sztuka programowania wieloprocesorowego" autorstwa panów Maurice Herlihy i Nir Shavit (nie wiem jak poprawnie odmienić te nazwiska =]).

    0
  • #7 10 Sty 2012 23:44
    krru
    Poziom 32  

    Zaquadnik napisał:
    Co do przerwań, powinny być jak najkrótsze. W przerwaniu np. odbierasz dane, wsadzasz do bufora i aktywujesz flagę, że dane są, a program główny sprawdza flagę i w razie potrzeby obsługuje dane.


    Napisałbym to trochę inaczej - w systemie to raczej wsadza się dane do bufora i budzi się wątek/proces czekający na te dane.

    0
  • #8 10 Sty 2012 23:55
    Electix
    Poziom 20  

    O właśnie, o takie podpowiedzi mi chodziło, bo nie wiedziałem za bardzo jak się do tego zabrać, a główną przyczyną moich problemów, jest brak dostatecznej wiedzy i doświadczenia w tej materii... :) Zerknę w tą książkę. Jutro już może ją sobie kupię.

    Opisy ze strony FreeRTOS, są puki co mało przejrzyste dla mnie i trochę męczę się trawiąc ich treść. Myślałem że znajdę w sieci gdzieś PDF z ich e-bookiem, ale nie znalazłem ;) A to co znalazłem po naszemu, było ubogie w treść, pomimo niekiedy dużej objętości...

    0
  • #9 11 Sty 2012 16:31
    gaskoin
    Poziom 38  

    W jego źródłach są przykłady możesz tam zerknąć, najprostszy program to napisanie sobie "tasków" czyli wątków które będą się wykonywały, spięcie ich z RTOSem przez xTaskCreate() i uruchomienie sobie schedulera przez vTaskStartScheduler() filozofii nie ma :)
    Na samym początku tylko konfiguracja zdaje się być uciążliwa, ale jak ogarniesz co i jak to już z górki.

    Do kolejek, ich tworzenia obsługi itd, semaforów, mutexów itp masz API reference na stronie RTOSa. Jest tam mnóstwo przykładów.

    0
  • #10 11 Sty 2012 23:20
    Electix
    Poziom 20  

    No właśnie jeszcze raz zrobiłem podejście do dokumentacji FreeRTOS. Przeczytałem też artykuł o tym w EP i rozdział z książki Paprockiego "Mikrokontrolery STM32 w praktyce" no i powoli wszystko to zaczyna być dla mnie coraz bardziej klarowne. Aczkolwiek nadal uważam że materiały na ten temat w naszym języku są wyjątkowo nieliczne i zawierają za mało informacji.

    W zasadzie na Elektrodzie, czy polskich forach stosunkowo mało jest dyskusji na ten temat. A jak już są to z reguły dotyczą poważniejszych problemów, niż rozpoczynanie zabawy z OS. :)

    Powalczę i zobaczymy co z tego wyniknie, najwyżej będę zadręczał Was pytaniami... :P

    Przy okazji chciałem zapytać czy ktoś z Was bawił się systemem od Keila - RTX RTOS? Jeśli tak, to jakie są wrażenia z jazdy?

    I czy możecie polecić mi jeszcze jakieś OS dla systemów embeded?
    W zakupionym ostatnio przeze mnie module uruchomieniowym z STM32 jest demo systemu Micrium µC/OS. Czy warto jest się nim pobawić, przyjrzeć się mu? Tylko to już jest tak jak system od Keila, soft odpłatny. :(

    0