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

Martin Záruba swz na volny.cz
Pondělí Duben 15 17:14:18 CEST 2024


S tím double máte pravdu. Ale nějak nechápu, jak pomocí utoa() JEDNODUŠE 
dosáhnout, aby se mi vypsaly ty nuly třeba př. 81.002

Martin Záruba

Dne 15.4.2024 v 17:04 Jan Waclawek napsal(a):
> No ved dobre, double to je priamociare peklo este aj v ARM Cortex-Mx kde x
> < 7.
>
> Takze to rozdelte pomocou /1000 a %1000 ako v tom druhom pripade, a pouzite
> utoa(). Treba si dat pozor na zlomkovu cast mensiu ako 100, finta je
> pripocitat 1000 a potom odstranit tu jednicku zo zaciatku.
>
> wek
>
>
>
> ----- Original Message ---------------
>
> Subject: Re: sprintf - co dělám blbě?
>     From: Martin Záruba<swz na volny.cz>
>     Date: Mon, 15 Apr 2024 16:40:23 +0200
>       To:hw-list na list.hw.cz
>
>> Je to zcela logické, ale výsledek překladu tomu neodpovídá, ale zjevně
>> je chyba u mě. Potřeboval jsem vypsat uint16_t proměnnou
>> JKComputedData.BatteryVoltageMillivolt, která obsahuje napětí baterie v
>> milivoltech. Ale chtěl jsem, aby výpis byl ve voltech, tedy aby to napsalo:
>>
>> Napětí 80.245V
>>
>> zkusil jsem dvě varianty:
>>
>> Serial.print(PSTR("Napětí"));Serial.print(dtostrf(JKComputedData.BatteryVoltageMillivolt/1000.0,
>> 7, 3, sStringBuffer));Serial.print("V, ");
>> sprintf_P(sStringBuffer,PSTR("Napětí%3d.%03dV,
>> "),JKComputedData.BatteryVoltageMillivolt/1000,JKComputedData.BatteryVoltageMillivolt%1000);Serial.print(sStringBuffer);
>>
>> ta první, bez sprintf je o 1372 byte delší.
>>
>> Martin Záruba
>>
>> Dne 15.4.2024 v 14:29 Petr Labaj napsal(a):
>>> 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);
>>>>>>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240415/9a95d783/attachment.htm>


Další informace o konferenci Hw-list