Re: Lepší C++ pro AVR i do Microchip studia

Pavel Hudeček edizon na seznam.cz
Sobota Leden 4 02:23:01 CET 2025


Zajímavé ale je, že se mi u všech řádků, kde se test(něco) používá, 
objevuje "error" required from here, ale překlad proběhne a program funguje.

Naopak třeba snaha použít try selhala,
> template <class ...C> void test(C ... args) {
>     try {
>         uint8_t siz = sizeof...(C);
>         if (siz>7) throw(1);
>         uint8_t res[siz]={args...};
>
>         for (uint8_t n=0; n<7; n++) {
>             if (res[n]>=cLedValsCnt) throw(2);
>             if (n>=siz) ledky[n] = 0;
>             else        ledky[n] = ledVals[res[n]];
>         }
>     } catch (int e) {
>         pip(50, e);
>     }
> }
napřed že prej musím povolit přes -fexception, pak to vypadalo OK. Jenže 
pokud vznikla situace, že by exception měl nastat, hromada errorů ve stylu:
> Severity    Code    Description Project    File    Line
> Error        C:\Users\edison\Documents\Atmel 
> Studio\DDM\vyrobky\bargraf-814-hand\testGcc2\Debug/.././mainGcc2.cpp:43:(.text._Z4testIJiiiiiiiiEEvDpT_[_Z4testIJiiiiiiiiEEvDpT_]+0x30): 
> undefined reference to `__gxx_personality_sj0'    testGcc2 1
(jen jednou, 43 je řádek deklarace funkce)

> Severity    Code    Description Project    File    Line
> Error        C:\Users\edison\Documents\Atmel 
> Studio\DDM\vyrobky\bargraf-814-hand\testGcc2\Debug/.././mainGcc2.cpp:46:(.text._Z4testIJiiiiiiiiEEvDpT_[_Z4testIJiiiiiiiiEEvDpT_]+0x64): 
> undefined reference to `__cxa_allocate_exception' testGcc2        1
(a tohle hodněkrát pro řádky 46 a/nebo 50, tedy ty s throw)

> Severity    Code    Description Project    File    Line
> Error        undefined reference to `typeinfo for int' testGcc2    
> C:\Users\edison\Documents\Atmel 
> Studio\DDM\vyrobky\bargraf-814-hand\testGcc2\Debug\mainGcc2.cpp 1
(tohle je 3x na konci výpisu chyb, všechno na řádek 1)

Zrovna exceptiony by se mi líbily.

PH


Dne 03.01.2025 v 22:14 Pavel Hudeček napsal(a):
> Dobrý den všem,
>
> tak jsem 10 sekund gůglil a:
> https://github.com/ZakKemble/avr-gcc-build/releases/tag/v14.1.0-1
>
> Rozbaleno do Program files
> V MCh studiu nastaveno jako další flavour a ejhle najednou chodí C++ 
> konstrukce co dřív nechodily
>
> Např. taková testovací blbůstka, ovládat část LEDek dle počtu argumentů:
>
> template <typename T> void ledSet1(uint8_t idx, T arg) {
>     if (idx<4) {
>         if (arg==0) LED_03port.OUTCLR = 1<<(LED_0bp+idx);
>         else        LED_03port.OUTSET = 1<<(LED_0bp+idx);
>     } else {
>         if (arg==0) LED_46port.OUTCLR = 1<<(LED_4bp-(idx-4));
>         else        LED_46port.OUTSET = 1<<(LED_4bp-(idx-4));
>     }
> }
> template <class ...C> void test(C ... args) {
>     uint8_t siz = sizeof...(C);
>     uint8_t res[siz]={args...};
>
>     if (siz>7) { pip(100}; return; }
>     for (uint8_t n=0; n<7; n++) {
>         if (n>=siz) ledSet1(n, 0);
>         else        ledSet1(n, res[n]);
>     }
> }
> Červený místa po ... zůstaly, ale přeložit jde a funguje.
> Tohle otestováno na vzorovém, ručně kresleném blikopípátku s ATtiny814 
> na kroužek, ale chodí i jiné věci třeba pro AVR64DD32.
>
> Vždycky jsem si myslel, že na ty nový AVR má Microchip nějakej novej 
> překladač, ale nikoliv.
> Jen jsem teda nezjistil jak to jinak než editací PRJ přepínat u 
> existujícího projektu, musí se ten flavour vytvořit a nastavit v 
> globálních settings jako default pro nový.


Další informace o konferenci Hw-list