-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!pwr.wroc.pl!new
s.wcss.wroc.pl!not-for-mail
From: a...@m...uni.wroc.pl
Newsgroups: pl.misc.elektronika
Subject: Re: Raspberry Pi i przerwania
Date: Wed, 28 Dec 2016 00:40:51 +0000 (UTC)
Organization: Politechnika Wroclawska
Lines: 59
Message-ID: <o3v1mj$5o9$1@z-news.wcss.wroc.pl>
References: <o3tp0a$i80$1@news.icm.edu.pl>
NNTP-Posting-Host: hera.math.uni.wroc.pl
X-Trace: z-news.wcss.wroc.pl 1482885651 5897 156.17.86.1 (28 Dec 2016 00:40:51 GMT)
X-Complaints-To: a...@n...pwr.wroc.pl
NNTP-Posting-Date: Wed, 28 Dec 2016 00:40:51 +0000 (UTC)
Cancel-Lock: sha1:T7qZTXFW5AqZDDN51N9N7IQ5U4Q=
User-Agent: tin/2.2.1-20140504 ("Tober an Righ") (UNIX) (Linux/4.6.4 (x86_64))
Xref: news-archive.icm.edu.pl pl.misc.elektronika:710108
[ ukryj nagłówki ]Atlantis <m...@w...pl> wrote:
> Pytanie zapewne z kategorii banalnych, ale nie mog? na szybko doszuka?
> si? odpowiedzi, a nie jestem pewien, czy w tym przypadku powinienem
> trzyma? si? przyzwyczaje? z mikrokontroler?w, czy jednak nie.
>
> Jak wiadomo jedn? z najwa?niejszych zasad przy programowaniu na MCU jest
> jak najszybsze wychodzenie z funkcji obs?uguj?cej przerwanie - je?li
> trzeba wykona? d?u?sz? parti? kodu albo co? przeczeka?, ustawia si?
> flag? i robi to w p?tli g??wnej programu.
>
> Czy ta zasada ci?gle obowi?zuje na Raspberry Pi? Mam kawa?ek kodu, kt?ry
> ma m.in. sprawdza? stan kilku przycisk?w i obs?ugiwa? enkoder obrotowy.
> Po wykryciu naci?ni?cia przycisku albo przekr?cenia pokr?t?a zajdzie
> konieczno?? wys?ania polecenia do zewn?trznego procesu, za po?rednictwem
> potoku nazwanego albo gniazda uniksowego. Mog? sobie pozwoli? na
> umieszczenie tych operacji w kodzie obs?ugi przerwania? J?dro sobie
> poradzi z tak? sytuacj?, czy b?d? mia? do czynienia z blokad?, jak na
> mikrokontrolerze?
>
> Je?li takie rozwi?zanie jest niedopuszczalne, w jaki spos?b mog?
> wybudzi? p?tle g??wn? u?pion? poleceniem sleep()? Bo z tego co widz?,
> nie dzieje si? to automatycznie po wyj?ciu z przerwania. M?g?bym co
> prawda usypia? program na kr?tko i periodycznie sprawdza? stan flag, aby
> u?ytkownik nie zauwa?y? op??nie?. Jednak troch? szkoda cykli procesora,
> je?li da si? to zrobi? lepiej.
Cos mi to wyglada niespojne: przerwania to obsluguje jadro, a twoj
program ma z nimi do czynienia tylko wtedy gdy jest jadrem (czyli
chodzi na golym krzemie) lub jego czescia. Jak masz w miare
typowa instalacje to jest sobie jadro Linuxa ktore sie zajmuje
przerwaniami. Na poziomie usera sa sygnaly. Roznice sa istotne.
Raz skala: procesow usera mozesz miec cala mase i te procesy nie
musza sie spieszyc. W jadrze trzeba obsluzyc wiele roznych
przerwan i tak jak na MCU trzeba unikac dlugiego czasu z
zablokowanymi przerwaniami. Procedura obslugi przerwania
moze wykonac wiele roznych operacji, o ile zmiesci sie
w czasie i unika blokad. Co do syganlow, to trudno je
poprawnie uzyc bo rozne biblioteki (zaczynac od libc) moga
zglupiec jesli zrobisz cos innego niz ustawienie flagi
w procedurze obslugi sygnalu. Tzn. mozesz dostac program
ktory losowo nie dziala. Jak to nie dzialanie jest
dostatecznie czeste to wykryjesz to testowaniem. Ale moze
tez przejsc testy a sprawiac problemy dopiero w eksploatacji.
Co do wybudzania na poziomie usera: normalne API jadra jest
takie ze jesli na cos czekasz to robisz wywolanie funkcji
systemowej ktora blokuje twoj proces i budzi go kiedy
nalezy. W szczegolnosci normalne operacje wejscia/wyjscia
blokuja sie do momentu nadejscia danych. Jesli potrzebujesz
synchronizowac watki procesu to sa semafory do synchronizacji.
Miedzy procesami standartowa metoda to gniazdka. Jak
nie ma odpowiedniego API to zwykla sztuczka to nieskonczona
petla ktora cos sprawdza a potem przez chwile spi. Jesli
to chcesz lepiej do modul jadra z driverem ktory wybudzi
twoj proces (mam wrazenie ze wybudzanie po zmianie na
GPIO jest dostepne w standartowym driverze).
--
Waldek Hebisch
Następne wpisy z tego wątku
- 28.12.16 10:55 Adam Wysocki
Najnowsze wątki z tej grupy
- Pytanie o transformator do dzwonka
- międzymordzie USB 3.2 jako 2.0
- elektronicy powinni pomysleć o karierze elektryka
- jak szybko plynie prad
- Płytki Milkv-Duo
- Światłowód między budynkami
- POtrzebny bufor 3.3<>5V, jedonkieruowy, trójstanowy, wąski
- retro
- Bezprzewodowe polączenie Windows z projektorem
- rozklejanie obudowy
- Prośba o identyfikację komponentu
- Smart gniazdko straciło na zasięgu wifi?
- Smart gniazdko straciło zasięg wifi?
- nurtuje mnie
- dziwna sprawa...
Najnowsze wątki
- 2024-11-08 Belka
- 2024-11-09 pierdolec na punkcie psa
- 2024-11-09 Warszawa => Sales Executive <=
- 2024-11-09 Wrocław => SAP BTP Consultant (mid/senior) <=
- 2024-11-09 Warszawa => ECM Specialist / Consultant <=
- 2024-11-09 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-11-10 TVN donosi: Obywatelskie zatrzymanie policjanta (nie na służbie)
- 2024-11-08 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Szczecin => Key Account Manager (ERP) <=
- 2024-11-08 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-08 Wrocław => Senior PHP Symfony Developer <=
- 2024-11-08 Warszawa => QA Engineer <=
- 2024-11-08 Warszawa => QA Inżynier <=
- 2024-11-08 Warszawa => Key Account Manager <=