eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPICowanie › Re: PICowanie
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!goblin3!goblin2!goblin.stu.neva.ru!feeder1.cambriumusenet.
    nl!feed.tweaknews.nl!209.197.12.242.MISMATCH!nx01.iad01.newshosting.com!newshos
    ting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.n
    eostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    Date: Thu, 10 Oct 2013 20:07:37 +0200
    From: JDX <j...@o...pl>
    Organization: N/A
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Thunderbird/24.0
    MIME-Version: 1.0
    Newsgroups: pl.misc.elektronika
    Subject: Re: PICowanie
    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>
    <5256d47c$0$32693$65785112@news.neostrada.pl>
    <l36lfa$fbj$1@node2.news.atman.pl>
    In-Reply-To: <l36lfa$fbj$1@node2.news.atman.pl>
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Lines: 62
    Message-ID: <5256ecf3$0$14832$65785112@news.neostrada.pl>
    NNTP-Posting-Host: ip-94-42-225-109.multimo.pl
    X-Trace: 1381428467 unt-rea-a-01.news.neostrada.pl 14832 94.42.225.109:60903
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:653043
    [ ukryj nagłówki ]

    On 2013-10-10 18:43, Sebastian Biały wrote:
    > On 2013-10-10 18:23, JDX wrote:
    >>> Na Microchipa nie. Na *dowolny* podam do znudzenia ten sam co zawsze:
    >> Dowolny? To cli() i sei() to są standardowe funkcje C++ (i C)? :-D
    >
    > Odróżniasz idiom RAII od kodu natywnego, prawda?
    Ale o co chodzi? Co ma RAII do kodu natywnego? W każdym razie chodziło
    mi jedynie o to, że cli() i sei() to nie są funkcje standardowe C czy
    też C++.

    >> tak
    >> zaimplementowanej sekcji krytycznej IMO *nie jest* lepsze.
    >
    > Zdefiniuj najlepsze.
    >
    >> IMO lepsza
    >> jest "ręczna" kontrola nad CS ponieważ tak w ogólności to chcemy jak
    >> najszybciej odblokować przerwania
    >
    > To nie jest prawda. Czasem chcemy mieć pewność że UART_D zostanie
    > odczytany jeszcze w sekcji krytycznej. Efektem czego jest workaround z
    > temp w C. Nie ma rozwiązań załatwiających wszystkie przypadki. To jest
    > rozwiązujące pewna sporą grupę czestych sytuacji w przerwaniach.
    No to przecież sam pokazałeś że w C obudowujemy czytanie w cli()/sei().
    A jeśli z jakiegoś powodu w tej samej funkcji potrzebujemy przeczytać
    zasób jeszcze raz, no to jeszcze raz obudujemy operację czytania. Zdaję
    sobie sprawę, że kod się komplikuje i tym samym jest bardziej podatny na
    błędy, ale w sam raz IMO w tak, nomen omen, krytycznych przypadkach jak
    CS lepiej jest sterować ręcznie a nie zdawać się na automatykę.

    >> a nie czekać do momentu wyjścia z
    >> funkcji gdy zawołany zostanie destruktor.
    >
    > Destruktor nie "czeka" tylko wołany jest natychmiast po return.
    > Dokładnie tak jak chcę.
    Zakładając, że pomiędzy odczytaniem z chronionego zasoby a returnem nie
    ma znaczącego (w sensie czasu wykonania) kodu.

    >> No i IMO tak zaimplementowana
    >> CS może prowadzić do jeszcze większych i trudniejszych do wykrycia
    >> ooops-ów jeśli ktoś będzie tworzycł CS na początku jakiejś dużej funkcji.
    >
    > Taki idiom daje znacznie wieksze gwarancje w dobrze zrobionym kodzie. W
    > kodzie napisanym byle jak czyli z wielkimi funkcjami - nic nie daje
    > gwarancji poza modlitwą. Subiektywnie patrząc: RAII genaruje mniej
    > błedów niż jego ręczna emulacja i miałem w życiu na to milion przykładów.
    W każdym razie ja w podanym przykładzie jakoś nie widzę wyższości C++
    nad C. Zyskujesz większą odporność na błędy ale płacisz za to mniej
    precyzyjną kontrolą nad CS. Nie twierdzę, że C++ jest gorsze od C w
    zastosowaniach embedded. Twierdzę jedynie, że przykład jest słaby.

    >> No i przydało by sie też jakieś info na temat tego co to jest
    >> UART_D - domyślam się, że jest to jakiś rejestr zmieniany
    >> (asynchronicznie) przez moduł UART-ów.
    >
    > To jest coś chronione przez sekcję krytyczna. Nie ma znaczenia co to
    > jest. Probolemem wielu programistów embedded jest wlasnie to że *musza*
    > wiedzieć co to jest, choć wiedza taka zazwyczaj kończy się pisaniem
    > nieprzenośnego kodu.
    No nie wiem, mi w sam raz wystarczyłaby informacja, że to jest coś co ma
    być chronione za pomocą CS. Tak, abym nie musiał snuć domysłów. :-)

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: