RTX51 Tiny - jak współdzielić kod i dane między zadaniami w RTOS?
RTX51 Tiny - czy ktoś to używa?
From: "MB" <manekb_at_nospam_priv4.onet.pl>
Subject: RTX51 Tiny - czy ktoś to używa?
Date: Tue, 10 Apr 2001 08:59:43 +0200
Mam pytanie, w jaki sposób odbywa się współdzielenie kodu pomiędzy zadaniami
(czy wszystkie funkcje muszą być reentrant - co z funkcjami bibliotecznymi -
np. printf)?
W jaki sposób korzystać z tych samych danych w różnych zadaniach - tak aby
jeden wątek nie czytał danych gdy inny je modyfikuje?
I co z przerwaniami?
From: "Marek" <inlog_at_nospam_inlog.com.pl>
Subject: Re: RTX51 Tiny - czy ktoś to używa?
Date: Tue, 10 Apr 2001 11:11:17 +0200
Użytkownik MB <manekb_at_nospam_priv4.onet.pl> w wiadomości do grup dyskusyjnych
napisał:9aub5v$rq2$1_at_nospam_news.onet.pl...
Mam pytanie, w jaki sposób odbywa się współdzielenie kodu pomiędzy
zadaniami
(czy wszystkie funkcje muszą być reentrant - co z funkcjami
bibliotecznymi -
np. printf)?
W jaki sposób korzystać z tych samych danych w różnych zadaniach - tak aby
jeden wątek nie czytał danych gdy inny je modyfikuje?
I co z przerwaniami?
Czy ktos uzywa ? Przynajmniej jeden uzytkownik w Polsce jest: to ja :-)
Wspoldzielenie kodu: jesli funkcja ma byc uzytkowana przez wiele zadan, to:
a) musi byc reentrant
albo
b) trzeba zapewnic zeby nie byla wywolana jednoczesnie przez wiecej niz
jedno zadanie (semafor, sekwencja zdarzen, sekcja krytyczna itp)
Funkcje biblioteczne sa w_wiekszosci reentrant, ale glownie te prostsze.
printf na pewno nie ! printfa mozna oblozyc semaforem ale jeszcze lepiej
go nie uzywac, bo jest koszmarnie rozbudowany, i napisac wlasne funkcje
typu lcd_write(x,y,napis). Beda w pelni kontrolowalne i reentrancy bedzie
bardziej oczywiste.
Dane: jesli chodzi o zmienne lokalne zadan, to tym zajmie sie kompilator
i linker. Dla zmiennych globalnych pozostaja semafory, mutexy itp srodki
z elementarza systemow wielozadaniowych.
Przerwania: no problem, jesli tylko zachowuja co trzeba na wejsciu
i odtwarzaja co trzeba przy wyjsciu.
A tak poza tym: RTX51 Tiny to naprawde swietna zabawka i mimo, ze nie
ma powazania u WIELKICH programistow, to mozna nim zdzialac rzeczy,
o jakich w klasycznym programie bez wielozadaniowosci mozna tylko
pomarzyc.
Marek
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: RTX51 Tiny - czy ktoś to używa?
Date: Tue, 10 Apr 2001 11:35:47 +0200
Jestem drugi. Co prawda glownie RTR166 Tiny, ale to w sumie tak samo dziala.
Dane: jesli chodzi o zmienne lokalne zadan, to tym zajmie sie kompilator
i linker. Dla zmiennych globalnych pozostaja semafory, mutexy itp srodki
z elementarza systemow wielozadaniowych.
Niekoniecznie. Jesli ustawisz Round-Robin Timeout na 0 to zadania beda
przelaczane tylko wtedy kiedy Ty chcesz.
(wywolujac os_wait). Nie ma wiec problemu z dostepem do danych przez 2 watki
programu.
Co do funkcji printf uwazam, ze i tak trzeba ja wywolywac w jednym watku.
Nalezy sobie stworzyc osobny watek do obslugi wyswietlacza, menu itp.
--
pozdrawiam, peters
peters_at_nospam_poczta.onet.pl
http://peters.republika.pl (strona Petersa dla elektroników)
From: "Marek" <inlog_at_nospam_inlog.com.pl>
Subject: Re: RTX51 Tiny - czy ktoś to używa?
Date: Tue, 10 Apr 2001 12:01:52 +0200
Ciesze sie ze nie jestem sam :-)
Co do Twoich uwag: swiete slowa, tak tez mozna to zrobic,
oczywiscie jesli mozna sobie pozwolic na wywlaszczanie
przez uprzejmosc, a tak bym przetlumaczyl zwrot
cooperative multitasking :-)
Co do printfa to bede sie upieral: jest koszmarny czasowo
i objetosciowo, i jeli tylko mozna to warto napisac swoje funkcje
do specjalizowanych zadan wyswietlania, np.:
zamiast printf("to jest napis") lepiej uzyc:
void lcd_text(U8 code *txt)
{ //
// Wypisanie w aktualnym miejscu podanego napisu z pamieci programu
//
U8 cnt = 0;
while ( txt[cnt] )
{ putchar( txt[cnt] );
cnt++;
}
}
itp, itd.
Zrobilem sobie porownania dzialania przez printf i przez wlasne funkcje i to
jest po prostu niebo i ziemia. Nie chodzi o to ze jestem genialny :-)
ale printf to robot wieloczynnosciowy, a czasem trzeba tylko zamieszac
kefir...
Pozdrawiam,
Marek
P.S. Czy podejmowales jakies proby uszlachetniania RTX-Tiny ?
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: RTX51 Tiny - czy ktoś to używa?
Date: Tue, 10 Apr 2001 12:19:55 +0200
Co do printfa to bede sie upieral: jest koszmarny czasowo
i objetosciowo, i jeli tylko mozna to warto napisac swoje funkcje
do specjalizowanych zadan wyswietlania, np.:
Mozna. Jak pisalem na AVR-y gdzie jest dosc malo miejsca na kod to musialem
tak postapic.
Jesli ma sie zapas mocy procesora i sporo pamieci to nie ma to sensu :))
P.S. Czy podejmowales jakies proby uszlachetniania RTX-Tiny ?
Nie myslalem o tym. Co masz konkretnego na mysli?
--
pozdrawiam, peters
peters_at_nospam_poczta.onet.pl
http://peters.republika.pl (strona Petersa dla elektroników)
From: "Marek" <inlog_at_nospam_inlog.com.pl>
Subject: Re: RTX51 Tiny - czy ktoś to używa?
Date: Tue, 10 Apr 2001 12:46:18 +0200
P.S. Czy podejmowales jakies proby uszlachetniania RTX-Tiny ?
Nie myslalem o tym. Co masz konkretnego na mysli?
Nie podobalo mi sie, ze os_wait(0) nie robi nic, literalnie nic, po prostu
kontynuuje task, wiec zmienilem zrodla RTX51-Tiny w taki sposob, ze
os_wait(0) zwraca na chwile czas procesora innym zadaniom i zaraz po
nich jest natychmiast wznawiany. Wykorzystuje to do zadan, ktore czekaja
na krotkotrwale zdarzenia, ale nie blokuja w ten sposob innych zadan
do chwili wykrycia zdarzenia, tylko non-stop pozwalaja sie na krotko
przerwac a potem wracaja praktycznie po najblizszym os_wait() kolejnego
zadania.
Pozdrawiam,
Marek
From: "MB" <manekb_at_nospam_priv4.onet.pl>
Subject: Odp: RTX51 Tiny - czy ktoś to używa?
Date: Tue, 10 Apr 2001 12:31:17 +0200
Ciesze sie ze nie jestem sam :-)
A ja cieszę się, że istnieje potencjalne źródło wiedzy praktycznej na
interesujący mnie temat i mam skrytą nadzieję iż będę miał możliwość po
trosze ją zasmakować - za pozwoleniem jej właścicieli :-)
Co do printfa to bede sie upieral: jest koszmarny czasowo
....
Zrobilem sobie porownania dzialania przez printf i przez wlasne funkcje i
to
jest po prostu niebo i ziemia. Nie chodzi o to ze jestem genialny :-)
ale printf to robot wieloczynnosciowy, a czasem trzeba tylko zamieszac
kefir...
Ja wykorzystuję printf do bardzo różnych celów, formatowanie napisów na
wyświetlacz LED, LCD, drukarkę, lańcuchy dla RS, konwersja chyba wszystkich
typów zniennych na łańcuchy tekstowe, itd więc chyba poprawianie funkcji
printf w moim przypadku nie jest najleprzym pomysłem.
Za to podoba mi się pomysł stworzenia oddzielnego wątku tylko dla obsługi
funkcji printf - widzę tyko problem z synchronizacją wątków które miałyby
korzystać z tej funkcji.
Może jakieś sugestie ?
Pozdrawiam Mariusz