Re: sprintf - co dělám blbě?

Petr Labaj labaj na volny.cz
Pondělí Duben 15 14:29:45 CEST 2024


Dovolím si zareagovat a trochu rozvinout poznámku pana weka o 
nevhodnosti používání *printf na jednochipech (se kterou souzním).
Všechny ty *printf jsou obecně dost mocné funkce, které umí formátovat 
kde co, kde jak.
Ale protože toho umí hodně, tak jsou velké.
Na nějakém PC s gigabyty paměti to moc nevadí, ale pro použití na MCU to 
(podle mě, a asi i podle pana weka) moc vhodné není.
Proto když už tam jsou jsou, tak jsou často všelijak osekané a některé 
věci neumí (třeba ty float a double, které se případně musí nějak extra 
povolit).

Takže obecné doporučení: zvažte, jestli fakt potřebujete univerzální 
*printf.
Jestli si raději nenapíšete svou vlastní konverzi pro textový výstup, 
která bude umět jen to, co potřebujete.
Ale zase na druhé straně bude dělat přesně to, co potřebujete.

PL

******************

Dne 15.4.2024 v 14:06 Martin Záruba napsal(a):
>
> Dík. To mě fakt nenapadlo. Nikde jsem nenašel, parametr l. No patří mi to.
>
> Lze ho nějak podobně donutit i k formátování float? Vypisuje otazník.
>
> Martin Záruba
> P.S. co je špatného na printf v jednočipu?
> Dne 15.4.2024 v 13:58 Jan Waclawek napsal(a):
>> %lu
>>
>> C99, 7.19.6.1#7 (conversion modifier l)
>>
>> Conversion specifier, t.j. "zakladny typ", co je tu to "u", je v tych %xxx
>> vzdy posledne.
>>
>> wek
>>
>>
>> PS. <flame on> Na odtazku z nadpisu mam chut odpovedat, ze "pouzivate
>> *printf v jednocipe"...
>>
>>
>> ----- Original Message ---------------
>>
>>> Prostě se to někde orizne na 16bitů. Nemá to být ul?
>>> Opět upozorňuji na zdravý zvyk používat snprintf...
>>>
>>> J.
>>>
>>> ---------- Původní e-mail ----------
>>> Od: Martin Záruba<swz na volny.cz>
>>> Komu: Martin Zaruba<hw-list na list.hw.cz>
>>> Datum: 15.04.2024 13:35:10
>>> Předmět: sprintf - co dělám blbě?
>>>
>>> "
>>>
>>> Tento triviální kousek programu
>>>
>>>
>>>
>>>
>>>
>>>    char sStringBuffer[50];
>>>
>>>    sprintf(sStringBuffer,"%6u",(uint32_t)123456);
>>>
>>>    Serial.print(sStringBuffer);
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> vrací hodnotu 57920. Ale proč?
>>>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240415/e365beb4/attachment.htm>


Další informace o konferenci Hw-list