eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikasscanf() - co robię źle?
Ilość wypowiedzi w tym wątku: 16

  • 11. Data: 2013-02-25 11:58:48
    Temat: Re: sscanf() - co robię źle?
    Od: g...@s...invalid (Adam Wysocki)

    Atlantis <m...@w...pl> wrote:

    >> To błąd, bo tak się rodzą potem problemy przy zmianie sprzętu.
    >
    > Funkcje i tak piszę z myślą o ściśle określonym module.
    > Jeśli zajdzie konieczność jego zmiany (na co się nie zanosi) i tak będę
    > musiał przejrzeć całość kodu odpowiedzialnego za komunikację.

    Nie do końca o to chodzi.

    Ukrywanie błędów nigdy nie kończy się dobrze. Miałeś dobry przykład -
    coś nie przyszło tak, jak zakładałeś, a ty szukałeś błędu zupełnie gdzie
    indziej. Dobry program to taki program, który sprawdza takie niepewne
    rzeczy. Im mniej ślepych założeń odnośnie wejściowych danych, tym lepiej
    (a jak się spodziewasz, że takie będą, to daj asserta lub jego swój
    odpowiednik).

    --
    "Project Manager to człowiek, który myśli, że jak weźmie
    dziewięć kobiet, to urodzą dziecko w miesiąc."


  • 12. Data: 2013-02-25 11:59:20
    Temat: Re: sscanf() - co robię źle?
    Od: g...@s...invalid (Adam Wysocki)

    JDX <j...@o...pl> wrote:

    > funkcje z rodziny scanf "pod spodem" korzystają z dynamicznej alokacji
    > pamięci i w związku z tym musisz dostarczyć taki alokator. Jeśli tego
    > nie zrobisz to jest używany jakiś "place holder".

    avr-libc ma normalnego malloca, żaden placeholder.

    --
    "Project Manager to człowiek, który myśli, że jak weźmie
    dziewięć kobiet, to urodzą dziecko w miesiąc."


  • 13. Data: 2013-02-25 12:00:49
    Temat: Re: sscanf() - co robię źle?
    Od: g...@s...invalid (Adam Wysocki)

    shg <s...@g...com> wrote:

    >> Robię coś nie tak?
    >
    > Tak, używasz sscanf().
    > Napisz normalny interpreter składni na jakiejś maszynie stanów.
    > Będzie mniejszy, elastyczniejszy i bardziej niezawodny.

    Wymyślanie koła na nowo to niestety cecha początkujących programistów
    i amatorów. Syndrom NIH.

    Ja jestem jak najbardziej za sscanf. O ile nie ma przeciwwskazań, typu
    brak miejsca we flashu, to ma to same zalety - głównie taką, że błąd w
    sscanf jest raczej mało prawdopodobny. Dostajesz coś, co działa.

    --
    "Project Manager to człowiek, który myśli, że jak weźmie
    dziewięć kobiet, to urodzą dziecko w miesiąc."


  • 14. Data: 2013-02-26 20:42:23
    Temat: Re: sscanf() - co robię źle?
    Od: Adam Dybkowski <a...@g...6c7o8m>

    W dniu 2013-02-25 12:00 Adam Wysocki napisał(a):

    >>> Robię coś nie tak?
    >>
    >> Tak, używasz sscanf().
    >> Napisz normalny interpreter składni na jakiejś maszynie stanów.
    >> Będzie mniejszy, elastyczniejszy i bardziej niezawodny.
    >
    > Wymyślanie koła na nowo to niestety cecha początkujących programistów
    > i amatorów. Syndrom NIH.
    >
    > Ja jestem jak najbardziej za sscanf. O ile nie ma przeciwwskazań, typu
    > brak miejsca we flashu, to ma to same zalety - głównie taką, że błąd w
    > sscanf jest raczej mało prawdopodobny. Dostajesz coś, co działa.

    Oj coś masz podejście zbyt wysokopoziomowe jak do tego zastosowania.
    Znam takich - najczęściej speców od Javy i wszystkich możliwych
    frameworków. Program wynikowy puchnie w takich przypadkach o cały worek
    różnistych bibliotek a czas kompilacji sięga zenitu - tylko po to aby
    kilka linii mniej napisać własnego kodu (niemały czas potrzebny na
    obczajenie każdego nowego frameworka pomijam).

    Wg mnie zrobienie automatu analizującego znaki odczytywane z modułu GSM
    (i to "karmionego" znak po znaku) jest najlepszym z zaproponowanych
    rozwiązań. Oczywiście jeżeli zrobi się to z głową i odpowiednio obsłuży
    sytuacje nadzwyczajne (asynchronicznie przychodzące komunikaty na inny
    temat gdy się spodziewamy danej odpowiedzi modułu). Przy okazji
    włączyłbym także echo w module GSM (ATE1) dla pewności czy każda komenda
    została poprawnie przesłana.

    Natomiast jeżeli dla uproszczenia chcemy jednak zbierać całe linie
    znaków i dopiero potem je analizować - to w takim przypadku przydadzą
    się raczej funkcje strstr, memchr i atoi/atol a nie moloch sscanf.

    --
    Adam Dybkowski
    http://dybkowski.net/

    Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.


  • 15. Data: 2013-02-27 02:27:08
    Temat: OT: (P,NMSP) Re: sscanf() - co robię źle?
    Od: "Anerys" <s...@s...pl>

    Całkiem niezgodnie z Netykietą, ale nie mogłem się powstrzymać...
    Użytkownik "Adam Wysocki" <g...@s...invalid> napisał w wiadomości
    news:gof.pme.1361790049@news.chmurka.net...
    > --
    > "Project Manager to człowiek, który myśli, że jak weźmie
    > dziewięć kobiet, to urodzą dziecko w miesiąc."

    Gorzej, gdy z tego wyjdzie 49 miesięcy, znając pomysły niektórych "szpecuff"
    (absolutnie nie mam na myśli nikogo z naszej grupy), to zagrożenie jest
    całkiem realne...

    --
    Pod żadnym pozorem nie zezwalam na wysyłanie mi jakichkolwiek reklam,
    ogłoszeń, mailingów, itd., ani nawet zapytań o możliwość ich wysyłki.
    Nie przyjmuję ŻADNYCH tłumaczeń, że mój adres e-mail jest ogólnodostępny
    i nie został ukryty. Wszelkie próby takich wysyłek potraktuję jako stalking.


  • 16. Data: 2013-02-27 10:23:29
    Temat: Re: sscanf() - co robię źle?
    Od: g...@s...invalid (Adam Wysocki)

    Adam Dybkowski <a...@g...6c7o8m> wrote:

    > Oj coś masz podejście zbyt wysokopoziomowe jak do tego zastosowania.

    Bez przesady, funkcje biblioteki standardowej nie są aż takim bloatem.
    Użycie sscanf dodaje 2kB do wynikowej binarki.

    [gof@raid /tmp]$ cat test1.c
    #include <stdio.h>

    int main()
    {
    int i;
    sscanf("test", "%d", &i);
    }
    [gof@raid /tmp]$ avr-gcc -mmcu=atmega8 -Os -o test1.elf test1.c
    [gof@raid /tmp]$ avr-objcopy -j .text -j .data -O binary test1.elf test1.bin
    [gof@raid /tmp]$ ls -l test1.bin
    -rwxr-xr-x 1 gof gof 1950 02-27 10:07 test1.bin
    [gof@raid /tmp]$

    Jak nie ma miejsca, to jasne że robi się różne sztuczki. Ale nie warto na
    siłę dokładać sobie pracy i tworzyć sytuacji, które mogą generować błędy,
    gdy nie ma takiej potrzeby. Co innego jakiś mały attiny z trzypoziomowym
    stosem, w którym rzeźbi się w assemblerze (chociaż w C też się da, jeżeli
    napisze się własny crt, wtedy C to bardziej zestaw makr dla assemblera),
    a co innego atmega, na którą z powodzeniem można pisać w C++ (avr-g++
    dobrze sobie radzi z optymalizacją, nie ma wprawdzie wyjątków, ale jest
    to co dla mnie najważniejsze - obiektowość i RAII).

    > Znam takich - najczęściej speców od Javy i wszystkich możliwych
    > frameworków. Program wynikowy puchnie w takich przypadkach o cały worek
    > różnistych bibliotek a czas kompilacji sięga zenitu - tylko po to aby
    > kilka linii mniej napisać własnego kodu (niemały czas potrzebny na
    > obczajenie każdego nowego frameworka pomijam).

    Ja też znam. To ekstrema. Trzeba znaleźć złoty środek. stdio to nie jest
    wg mnie aż taki bloat, żeby pisać własne automaty. To tylko odczytanie
    inta z linii.

    Jak kończą się zasoby (pamięć albo limit czasu wykonania), to wiadomo,
    że przedkłada się je nad wygodę pisania i łatwość debugowania i wymyśla
    własne koło, skrojone pod konkretne rozwiązanie.

    --
    "Project Manager to człowiek, który myśli, że jak weźmie
    dziewięć kobiet, to urodzą dziecko w miesiąc."

strony : 1 . [ 2 ]


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: