eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaesp8266 i snprintf() › esp8266 i snprintf()
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.ne
    ws.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for
    -mail
    Newsgroups: pl.misc.elektronika
    X-Mozilla-News-Host: news://news.tpi.pl:119
    From: Atlantis <m...@w...pl>
    Subject: esp8266 i snprintf()
    Date: Sun, 23 Jul 2017 18:42:29 +0200
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
    Thunderbird/52.2.1
    MIME-Version: 1.0
    Content-Type: text/plain; charset=utf-8
    Content-Language: pl
    Content-Transfer-Encoding: 8bit
    Lines: 29
    Message-ID: <5974d1f3$0$661$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 83.5.228.198
    X-Trace: 1500828147 unt-rea-b-01.news.neostrada.pl 661 83.5.228.198:64240
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:721254
    [ ukryj nagłówki ]

    Do tej pory we wszystkich moich projektach, zgodnie z zalecaną praktyką
    stosowałem funkcję snprintf() zamiast sprintf(), aby uniknąć możliwości
    przepełnienia bufora. Podobnie z innymi funkcjami z stdio.h i string.h,
    które posiadają taki odpowiednik.

    Jednak z tego co widzę, to w przypadku SDK do ESP8266 nie jest to takie
    proste. Wśród bibliotek udostępnionych przez producenta znajdują się
    osobne funkcje do manipulowana łańcuchami tekstowymi, z prefiksem "os_".
    Zamiast sprintf() należy więc używać os_sprintf. Problem w tym, że w
    zestawie nie ma funkcji sprawdzających wielkość bufora.

    Teoretycznie można w projekcie wykorzystać standardowe biblioteki
    "stdio.h" albo "string.h", jednak z tego co wyczytałem nie jest to
    zalecane i wynika to ze specyfiki sprzętu (coś z wyrównywaniem pamięci).
    Kod się skompiluje i może działać, ale wcale nie musi i nie ma
    gwarancji, że w pewnym momencie się z tego powodu nie wysypie.

    Stąd mam kilka pytań do osób trochę lepiej obeznanych z tą platformą:

    1) Czy Arduino Core dla ESP8266 też jest dotknięte tą przypadłością?
    Jest ono zaledwie nakładką na oficjalne SDK, czy też ktoś przeportował
    standardowe biblioteki uwzględniając tę kwestię i można bezpiecznie
    używać snprintf()?
    Niby nie przepadam szczególnie za Arduino, ale to byłoby jakimś
    argumentem...
    2) Czy istnieje jakiś prosty sposób na uniknięcie tego problemu, przy
    jednoczesnym korzystaniu z os_sprintf()? Czy też jedynym wyjściem jest
    wcześniejsze sprawdzanie długości wszystkich elementów składowych,
    wpisywanych?

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: