eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPICowanie
Ilość wypowiedzi w tym wątku: 95

  • 21. Data: 2013-10-10 10:09:24
    Temat: Re: PICowanie
    Od: Marek Borowski <m...@x...com>

    On 10/10/2013 7:23 AM, Sebastian Biały wrote:
    > On 2013-10-09 22:26, Marek wrote:
    >> Matko jedyna, po co c++ na 8bit?
    >
    > Zdarłem już klawiaturę wyjasniając w kilku wątkach w ostatnich kilku
    > latach :)
    >
    Ale to co napisalem odpowiadajac przedpiscy mozna uznac za summary ?

    Pozdrawiam

    Marek


  • 22. Data: 2013-10-10 11:08:47
    Temat: Re: PICowanie
    Od: Sylwester Łazar <i...@a...pl>

    > > Matko jedyna, po co c++ na 8bit?
    >
    > Zdarłem już klawiaturę wyjasniając w kilku wątkach w ostatnich kilku
    > latach :)
    A możesz podać jakiś konkretny, krótki (kilkanaście linijek kodu) przykład
    na jakikolwiek
    mikrokontroler MICROCHIP (może być C32)
    który pokazałby różnicę w jakości programu napisanego w C++
    i C--.
    Pytam, bo zawsze są przeciwnicy i zwolennicy, ale nigdy nie ma przykładu.

    --
    -- .
    pozdrawiam
    Sylwester Łazar
    http://www.alpro.pl Systemy elektroniczne.
    http://www.rimu.pl -oprogramowanie do edycji schematów
    i projektowania PCB.


  • 23. Data: 2013-10-10 17:19:22
    Temat: Re: PICowanie
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2013-10-10 10:09, Marek Borowski wrote:
    >> Zdarłem już klawiaturę wyjasniając w kilku wątkach w ostatnich kilku
    >> latach :)
    > Ale to co napisalem odpowiadajac przedpiscy mozna uznac za summary ?

    Mniej więcej w wersji lite.


  • 24. Data: 2013-10-10 17:26:23
    Temat: Re: PICowanie
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2013-10-10 11:08, Sylwester Łazar wrote:
    > A możesz podać jakiś konkretny, krótki (kilkanaście linijek kodu) przykład
    > na jakikolwiek
    > mikrokontroler MICROCHIP (może być C32)

    Na Microchipa nie. Na *dowolny* podam do znudzenia ten sam co zawsze:

    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!
    ...
    }

    > Pytam, bo zawsze są przeciwnicy i zwolennicy, ale nigdy nie ma przykładu.

    Ten przykład był tu kilka razy. Nie czytasz wątków :) C++ nie sprawia że
    jest szybciej, ale "lepiej" przy czym w jedym zdaniu tego lepiej nie da
    się sensownie opisać. I nie, nie chodzi o klasy, żeby była jasność.


  • 25. Data: 2013-10-10 18:13:09
    Temat: Re: PICowanie
    Od: Zbych <a...@o...pl>

    W dniu 10.10.2013 17:26, Sebastian Biały pisze:
    > On 2013-10-10 11:08, Sylwester Łazar wrote:
    >> A możesz podać jakiś konkretny, krótki (kilkanaście linijek kodu)
    >> przykład
    >> na jakikolwiek
    >> mikrokontroler MICROCHIP (może być C32)
    >
    > Na Microchipa nie. Na *dowolny* podam do znudzenia ten sam co zawsze:
    >
    > 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!
    > ...
    > }

    Słaby przykład, w gcc można zrobić destruktor w C.


  • 26. Data: 2013-10-10 18:18:40
    Temat: Re: PICowanie
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2013-10-10 18:13, Zbych wrote:
    > Słaby przykład, w gcc można zrobić destruktor w C.

    I wtedy mamy jaki język?


  • 27. Data: 2013-10-10 18:23:17
    Temat: Re: PICowanie
    Od: JDX <j...@o...pl>

    On 2013-10-10 17:26, Sebastian Biały 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

    > Ten przykład był tu kilka razy. Nie czytasz wątków :) C++ nie sprawia że
    > jest szybciej, ale "lepiej" przy czym w jedym zdaniu tego lepiej nie da
    > się sensownie opisać. I nie, nie chodzi o klasy, żeby była jasność.
    C++ jest bardziej eleganckie, ale w tym konkretnym przypadku, tj. tak
    zaimplementowanej sekcji krytycznej IMO *nie jest* lepsze. IMO lepsza
    jest "ręczna" kontrola nad CS ponieważ tak w ogólności to chcemy jak
    najszybciej odblokować przerwania a nie czekać do momentu wyjścia z
    funkcji gdy zawołany zostanie destruktor. 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.

    A tak poza tym to niezbyt rozumiem zwracanie jakiejś wartości z funkcji
    typu void. 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.


  • 28. Data: 2013-10-10 18:43:17
    Temat: Re: PICowanie
    Od: Sebastian Biały <h...@p...onet.pl>

    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?

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

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

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

    > A tak poza tym to niezbyt rozumiem zwracanie jakiejś wartości z funkcji
    > typu void.

    Pomyłka.

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


  • 29. Data: 2013-10-10 20:00:02
    Temat: Re: PICowanie
    Od: Sylwester Łazar <i...@a...pl>

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



  • 30. Data: 2013-10-10 20:07:37
    Temat: Re: PICowanie
    Od: JDX <j...@o...pl>

    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. :-)

strony : 1 . 2 . [ 3 ] . 4 ... 10


Szukaj w grupach

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: