eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingprintf i wielozadaniowosc (MicroC/OS-II) › Re: printf i wielozadaniowosc (MicroC/OS-II)
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not
    -for-mail
    From: Jerry1111 <j...@w...pl.pl.wp>
    Newsgroups: pl.comp.programming
    Subject: Re: printf i wielozadaniowosc (MicroC/OS-II)
    Date: Tue, 29 Sep 2009 22:04:24 +0100
    Organization: http://onet.pl
    Lines: 59
    Message-ID: <h9tsp1$pfi$1@news.onet.pl>
    References: <h...@p...onet.pl>
    NNTP-Posting-Host: 94-195-52-21.zone9.bethere.co.uk
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: news.onet.pl 1254258273 26098 94.195.52.21 (29 Sep 2009 21:04:33 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Tue, 29 Sep 2009 21:04:33 +0000 (UTC)
    User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
    In-Reply-To: <h...@p...onet.pl>
    X-Antivirus: avast! (VPS 090928-0, 28/09/2009), Outbound message
    X-Antivirus-Status: Clean
    Xref: news-archive.icm.edu.pl pl.comp.programming:183680
    [ ukryj nagłówki ]

    Pszemol wrote:
    > W systemie MicroC/OS-II wszystkie wątki uszeregowane są według swoich
    > priorytetów i wątek o niższym priorytecie dostaje procesor TYLKO WTEDY
    > gdy wątek o wyższym priorytecie nie ma nic do roboty i czeka na zdarzenie.
    >
    > W swoim programie wielowątkowym dorobiłem na szybkiego logowanie
    > zdarzeń w celach debugging i używam "zakazanej" funkcji printf, jako że
    > jest
    > ona bardzo wygodna zwłaszcza z parsingiem argumentów typu %d lub %x
    > w tekście... :-)

    Wcale nie jest zakazana.

    > Spodziewałem się jakichś efektów związanych z niereentrantnością tej
    > funkcji, ale to co dostałem trochę mnie zaskoczyło...

    Bo tu nie chodzi o printf, tylko o reentrancje calej biblioteki newlib.
    Z drugiej strony Altera ma to zalatwione, wiec nie rozumiem czemu problem?

    > Otóż co widzę, to że na wyjściu generowanym przez tą funkcję fprintf
    > (strumień znaków RS232, "plikiem" dla fprintf jest port szeregowy)
    > widzę że wątek o niższym priorytecie wchodzi z butami w linię tekstu
    > wątka o wyższym priorytecie i wcięcie jest tam, gdzie fprintf robi ten
    > parsing argumentów %d.

    Bo nie masz tego jako atomic operation. Jestem na 99% pewny ze jako
    atomic jest tylko zrobione wysylanie pojedynczych znakow.

    Ma to sens, bo inaczej blokowalbys system na dosc dlugi czas (chyba ze
    masz duze fifo - wtedy mozna sie o to pokusic).


    > Task o priorytecie 3 schodki niżej, wciął się w środek fprintf'a od tasku
    > o prawie najwyższym priorytecie i to w miejscu, gdzie skończyło się
    > parsowanie argumentu %x i zaczął text printf'a.

    Bo w miedzyczasie byla zmiana kontekstu. Czemu? Bo wyzszy watek czekal
    na wyslanie znaku...

    > Rozumiem, że skoro wywołania fprintf'a z tasków dotyczą tego samego
    > portu szeregowego, przekazanego fprintf'owi jako argument nazwy pliku
    > (globalna zmienna) to może się coś kiepścić, i linie się będa przeplatać,
    > ale nie rozumiem jak taski o niższym priorytecie mogły się wstrzelić
    > z TRZEMA OSOBNYMI WYWOŁANIAMI fprintf'a w jedną linię tasku
    > o wyższym priorytecie? Przecież według filozofii MicroC/OS-II task
    > bariery 0, w czasie chodzenia sobie po kodzie fprintfa nie powinien być
    > przerwany i taski o priorytetach 4 czy tym bardziej 8 powinny grzecznie
    > czekać aż fprintf wywołany przez task o priorytecie 1 ukończy zadanie
    > i odda sterowanie systemowi operacyjnemu (nie ma tu wywłaszczania).
    >
    > Czy ktoś mógłby mi to wytłumaczyć?

    A jak w priority 0 wstawic OSTimeDly(10), to tez nic innego sie nie
    uruchomi? AFAIR driver usart Altery czeka na signal jak ma pelny bufor,
    wiec w miedzyczasie inny watek idzie.


    --
    Jerry1111

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: