logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Jak użyć kwalifikatora __flash w C++ z avr-g++ 5.4.0 [toolchain-atmelavr 1.50400.0]?

khoam 24 Lut 2019 13:38 882 5
  • #1 17801093
    khoam
    Poziom 42  
    Czy jest jakaś możliwość użycia kwalifikatora __flash w kodzie C++? Przeczesałem net i nie znalazłem jakiejś sensownej odpowiedzi.
    Używam PIO oraz avr-g++ (GCC) 5.4.0 - toolchain-atmelavr w wersji 1.50400.0
    Zdaje sobie sobie sprawę, że w C+11 nie ma wsparcia dla kwalifikatorów __flash oraz __memx, ale może jest jakieś "obejście" na to ;)
  • Pomocny post
    #2 17801178
    tmf
    VIP Zasłużony dla elektroda
    Nie ma obejścia. Nikt nie przeniósł implementacji przestrzeni adresowych do C++ na AVR.
    Ale w C++ to można łatwo obejść pisząć odpowiednie implementacje i przeciążając operatory. Zrób sobie np. klasę FLASHChar i przeciąż w niej operatory m.in. [] i będziesz miał to co chcesz.
    Jednak z własnego doświadczenia ci powiem, że C++ na AVR to jednak walka z wiatrakami, aż dziwne, że przy tak dużej społeczności Arduino nikt nie jest zainteresowany rozwojem C++ na tej platformie...
  • #3 17801224
    khoam
    Poziom 42  
    tmf napisał:
    Ale w C++ to można łatwo obejść pisząć odpowiednie implementacje i przeciążając operatory. Zrób sobie np. klasę FLASHChar i przeciąż w niej operatory m.in. [] i będziesz miał to co chcesz.

    Jest to jakiś pomysł, biorąc pod uwagę, że ten sam kod z Arduino HAL będę chciał kompilować na ESP32 i STM32, więc dla każdej z tych platform implementacja tej klasy będzie pewnie inna (użyję po prostu dyrektyw warunkowych).

    tmf napisał:
    Jednak z własnego doświadczenia ci powiem, że C++ na AVR to jednak walka z wiatrakami, aż dziwne, że przy tak dużej społeczności Arduino nikt nie jest zainteresowany rozwojem C++ na tej platformie...

    Dziwie się, że sam Microchip w tej sprawie nic praktycznie nie zrobił - toolchain dla AVR 8-bit na ich stronie, to ten sam co mam w PIO.
  • Pomocny post
    #4 17801254
    tmf
    VIP Zasłużony dla elektroda
    khoam napisał:
    tmf napisał:
    Jednak z własnego doświadczenia ci powiem, że C++ na AVR to jednak walka z wiatrakami, aż dziwne, że przy tak dużej społeczności Arduino nikt nie jest zainteresowany rozwojem C++ na tej platformie...


    Dziwie się, że sam Microchip w tej sprawie nic praktycznie nie zrobił - toolchain dla AVR 8-bit na ich stronie, to ten sam co mam w PIO.

    Z badań wynika, że prawie wszyscy używają C, a max kilka % używa C++ na AVR. Więc przypuszczam, że po prostu im się to nie opłaca. Poza tym, Atmel, przez lata robił swoje łatki na gcc, które nie były kompatybilne z nowszymi wersjami kompilatora i po każdym wydaniu nowego gcc trzeba było wszystkie łatki na nowo przenosić. Stąd też wieczne opóźnienia w wydawaniu nowszych wersji kompilatora dla AVR. Dopiero później się to troszkę poprawiło. Tu w sumie nawet bym nie winił Atmela/Microchipa - społeczność gcc jest bardzo specyficzna, a 8 bitowe platformy nie są dla nich głównym punktem zainteresowania. Ponieważ każda łatka musi być kompatybilna z całym kodem gcc i nic nie psuć, bardzo trudno się przebić i wprowadzić jakieś nowe rozwiązanie. Dodatkowo sam kod gcc/g++ jest tak pokręcony, że żeby w to wejść trzeba poświęcić sporo czasu. Mnie tylko dziwi, że społeczność Arduino nie naciska na zmiany w g++. Z drugiej strony tak to często bywa w projektach otwartych.
  • #5 17802205
    khoam
    Poziom 42  
    Znalazłem tylko jeden kompilator C++, który wspiera __flash dla AVR, jest to IAR. Niestety nie udostępniają samego toolchain. Zresztą jest tylko pod windows :/
  • #6 17802257
    khoam
    Poziom 42  
    Znalazłem tylko jeden kompilator C++, który wspiera __flash dla AVR, jest to IAR. Niestety nie udostępniają samego toolchain. Zresztą jest tylko pod windows :/

    Dodano po 15 [minuty]:

    Dedykowana klasa flash_char, flash_string z operatorami [].
REKLAMA