Formatovany tisk pro 8bit

Martin Záruba swz na volny.cz
Pondělí Duben 22 16:14:48 CEST 2024


Přesně tak to cítím a proto jsem se snažil udělat tu formátovací funkci, 
kterou ale wek napsal ještě mnohem líp. Už ji mám v programu ještě 
upravenou o umístění textů ve flash a s drobnou úpravou, která má nyní 
dva formátovací znaky:

@ = číslice

# = číslice, pokud je nenulová nebo mezera, pokud je nulová

A dodělal jsem přetížení pro všechny typy proměnných, protože jinak 
kompilátor všechno převádí na int32_t a kód volání je zbytečně delší.

Martin Záruba

Dne 22.4.2024 v 15:34 Petr Labaj napsal(a):
> Já už jsem se v tomto vlákně dávno ztratil a tak už jsem mimo.
>
> Ale když teď píšete o double - já myslel, že cílem, že všechno floatové
> eliminovat a používat čistě integer, třeba s posunutou bází.
> Takže mít proměnné třeba v desetitisícinách voltů a tyhle formátované
> tisky použít pro výpis v lidském formátu.
> Takže to se asi pletu, žejo.
>
> Já jsem to vždy na MCU bral tak, že float se použije opravdu jen když už
> to opravdu jinak nejde. A protože to skoro vždy nějak jde, tak se raději
> nepoužije vůbec nikdy.
>
> PL
>
> ******************
>
> Dne 22.4.2024 v 11:13 Pavel Hudeček napsal(a):
>> Zajímavé je, jak různé konstrukce můžou vést k různé délce kódu.
>>
>> Rozdíl 500 B trochu překvapil, ale OK. Použito je long a double.
>> Vlastně bych to čekal spíš naopak, když se u té delší verze nepředává 
>> val. Ale chápu, že tohle asi snadno sežere nějaká optimalizace, když 
>> se v val nic nedělá.
>>
>> Nějaké nápady na další konstrukce, které by mohly být menší?
>>
>> Dost ale překvapilo 30 B u *nepoužitých funkcí* test.
>> WTF?
>>
>> PH
>>
>>
>> template <typename T> class clDetTyp { // ===========================
>> public:
>>     //const char det() const;
>>      char det(unsigned int x)  {return 'u';}
>>      char det(int x)  {return 'i';}
>>      char det(unsigned long x)  {return 'U';}
>>      char det(long x)  {return 'L';}
>>      char det(float x)  {return 'f';}
>>      char det(double x)  {return 'd';}
>> };
>>
>> /*// tohle bylo delsi o ~500B, const nemají vliv
>> template <> const char clDetTyp<unsigned int>::det() const { return 'u';}
>> template <> const char clDetTyp<int>::det() const {    return 'i';}
>> template <> const char clDetTyp<long>::det() const { return 'L';}
>> template <> const char clDetTyp<float>::det() const { return 'f';}
>> template <> const char clDetTyp<double>::det() const { return 'd';}*/
>>
>> template<typename T>
>> void uartSendF(const char *t, T val, uint8_t mist) { // =============
>>     clDetTyp<T> d;
>>     if (d.det(val)=='f' || d.det(val)=='d') {
>>         float m = 1.0;
>>         for (uint8_t n=0; n<mist; n++) m*=10.0;
>>         uartSendF_(t, static_cast<long>(val*m), mist);
>>     } else if (d.det(val)=='L') uartSendF_(t, val, mist);
>>     else uartSendF_(t, static_cast<long>(val), mist);
>> }
>>
>> /*// tyhhle funkce nejsou použitý, ale zakomentování ušetří 30B 
>> (uartSendF s jedním PSTR se používá i jinde)
>> // Změna délky PSTR v nich nevede ke změně rozdílu zabrané flash
>> const void test(int x) {
>>     uartSendF(PSTR("test: int\r\n"));
>> }
>> void test(char x) {
>>     uartSendF(PSTR("test: char\r\n"));
>> }*/
>
>
> _______________________________________________
> 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/20240422/0224dd92/attachment.htm>


Další informace o konferenci Hw-list