-
Data: 2013-10-10 20:00:02
Temat: Re: PICowanie
Od: Sylwester Łazar <i...@a...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]> struct CriticalSection{ CriticalSection() { cli(); } ~CriticalSection()
> { sei(); } };
>
> void foo()
> {
> CriticalSection cs;
> ...
> return UART_D;
> ...
> return UART_D;
> ...
> }
>
> w C:
>
> void foo()
> {
> cli();
> ...
> char temp = UART_D;
> sei();
> return temp;
> ...
> return UART_D; // <-- oops!
> ...
> }
Proszę mnie poprawić jeśli się mylę,
jednak spróbuję zrozumieć.
1) tak jak kolega JDX zauważył, dla foo powinien być typ char, gdyż RETURN
ma zwrócić wartość z RS-a.
2) I teraz w C (drugi przykład) jest problem, gdyż po przepisaniu do
zmiennej temp,
zostały ponownie włączone przerwania przez sei() (SEt Interrupt jak sądzę)
Wtedy temp zwróci wartość odczytaną z UART_D i jest "cool",
ale zwracając UART_D może być "klopsik", bo w międzyczasie mogło przyjść
inne przerwanie od RS'a i zmienić wartość rejestru UART_D (UART Data jak
sądzę)
3) W C++ jest na tyle wygodnie, że wystarczy wpisać (czy jak to się fachowo
nazywa w obiektowym języku programowania) na początu, że
to jest: CriticalSection cs;
I teraz wiadomo, że jak foo się skończy, to przerwania same się odblokują.
Czyli chodzi o to, że nie trzeba pamiętać gdzie włączyć sei(), a gdzie
wyłączyć cli() (CLear Interrupt jak sądzę)
tylko zapisać, że w foo() nie przejmujemy się przerwaniami, tylko robimy
swoje?
Przepraszam, jeśli coś pokiełbasiłem, ale mam wrażenie, że dyskutują sami
fachowcy,
a reszta przygląda się i podziwia :-)
--
-- .
pozdrawiam
Sylwester Łazar
http://www.alpro.pl Systemy elektroniczne.
http://www.rimu.pl -oprogramowanie do edycji schematów
i projektowania PCB.
Następne wpisy z tego wątku
- 10.10.13 20:07 JDX
- 10.10.13 20:33 Sebastian Biały
- 10.10.13 20:46 Sebastian Biały
- 10.10.13 20:57 Grzegorz Niemirowski
- 10.10.13 21:43 Marek Borowski
- 10.10.13 21:49 Sebastian Biały
- 10.10.13 22:05 JDX
- 10.10.13 22:05 JDX
- 10.10.13 22:11 Sebastian Biały
- 10.10.13 22:26 JDX
- 10.10.13 22:31 Sebastian Biały
- 10.10.13 22:49 Marek Borowski
- 11.10.13 00:11 Sylwester Łazar
- 11.10.13 00:19 Sebastian Biały
- 11.10.13 00:53 Sebastian Biały
Najnowsze wątki z tej grupy
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
- jaki zasilacz laboratoryjny
- jaki zasilacz laboratoryjny
- Puszka w ziemię
- T-1000 was here
- Ściąganie hasła frezem
- Koszyk okrągły, walec 3x AA, na duże paluszki R6
- Brak bolca ochronnego ładowarki oznacza pożar
- AMS spalony szybkim zasilaczem USB
- stalowe bezpieczniki
Najnowsze wątki
- 2025-02-12 Warszawa => Expert Recruiter 360 <=
- 2025-02-12 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-02-12 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-02-12 Dęblin => Node.js / Fullstack Developer <=
- 2025-02-12 Kraków => PHP Full Stack Developer <=
- 2025-02-12 Karta dźwiękowa stereo
- 2025-02-12 Dęblin => JavaScript / Node / Fullstack Developer <=
- 2025-02-12 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-02-12 Łódź => NodeJS Developer <=
- 2025-02-12 Błonie => Sales Specialist <=
- 2025-02-12 Dziwne zachowanie magistrali adresowej w 8085
- 2025-02-11 Mini pecet
- 2025-02-10 Spalił się spaliniak
- 2025-02-10 zarowka wifi - z sensowna apka lub lepiej albo lokalnie lub przez web. I zeby harmonogram miala
- 2025-02-10 Chrzanów => Programista NodeJS <=