Re: sprintf - co dělám blbě?
Martin Záruba
swz na volny.cz
Pondělí Duben 15 17:10:39 CEST 2024
No asi jo. Ale jak to napsat líp?
Martin Záruba
Dne 15.4.2024 v 17:01 Petr Labaj napsal(a):
> I té první máte float-aritmetiku, kdežto ta druhá varianta je jen na
> integerech.
> Nebude to tím?
>
> PL
>
> ******************
>
> Dne 15.4.2024 v 16:40 Martin Záruba napsal(a):
>>
>> 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);
>>>>>>
>>>>>> Serial.print(sStringBuffer);
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> vrací hodnotu 57920. Ale proč?
>>>>>>
>>>
>>>
>>> _______________________________________________
>>> HW-list mailing list - sponsored bywww.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list - sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> 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/92f73cd1/attachment.htm>
Další informace o konferenci Hw-list