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