Formatovany tisk pro 8bit

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


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"));
> }*/
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240422/625c4328/attachment.htm>


Další informace o konferenci Hw-list