eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPICowanieRe: PICowanie
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: Sebastian Biały <h...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: PICowanie
    Date: Thu, 10 Oct 2013 20:33:20 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 41
    Message-ID: <l36rtk$lsf$1@node2.news.atman.pl>
    References: <e...@g...com>
    <5254fb82$0$21838$65785112@news.neostrada.pl>
    <f...@g...com>
    <l34br2$8d0$1@node1.news.atman.pl>
    <a...@n...neostrada.pl>
    <l35dk5$950$1@node1.news.atman.pl> <l35rdb$bid$1@mx1.internetia.pl>
    <l36gv3$epe$1@node1.news.atman.pl> <l36qhe$fnn$1@mx1.internetia.pl>
    NNTP-Posting-Host: 193.0.194.227
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1381430004 22415 193.0.194.227 (10 Oct 2013 18:33:24
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Thu, 10 Oct 2013 18:33:24 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:17.0) Gecko/20130801 Thunderbird/17.0.8
    In-Reply-To: <l36qhe$fnn$1@mx1.internetia.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:653046
    [ ukryj nagłówki ]

    On 2013-10-10 20:00, Sylwester Łazar wrote:
    > 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.

    To oczywiste że to czeski błąd, przeciez kod jest z palca i ma tylko
    pokazać ideę.

    > 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ę)

    W tym cały pomysł: żeby uzyskac odczyt w sekcji krytycznej i natychmiast
    go zwrócić. W C musisz uzyć zmiennej tymczasowej. W C++ nie, kod jest
    znacznie czytelniejszy.

    > 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ą.

    To się nazywa RAII, nie ma nic wspólnego z obiektami poza tym że
    akuratnie na nich można ją uzyskać. Wiekszość języków programowania nie
    ma RAII choć ma obiekty.

    > 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?

    Owszem, cała sztuka w tym żeby *nie* przejmować się sei. Ono się samo
    zrobi tam gdzie powinno. W 99% wypadków poza patologicznymi chcesz mieć
    parę cli/sei bez wzgledu na formę wyjścia z funkcji. I o tym nie
    pamiętać. Podejście typu "muszę mieć wszystko pod kontrolą" niczym się
    nie różni od pisania w asm i świadczy o ubogim warsztacie.

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: