Rust czy C++ do Embedded

Rust czy C++ do Embedded
DN
  • Rejestracja:około 4 lata
  • Ostatnio:5 dni
  • Postów:37
0

Koduje w Embedded już od kilku lat, tylko i wyłącznie w C. Chciałbym spróbować jakiejś nowej technologii, ale wciąż związanej z Embedded. Zaszaleć i sprawdzić tego Embedded Rusta czy gra nie warta świeczki i lepiej postawić na C++?
Zawsze chciałem nauczyć się C++ już nawet nie dla samego embedded, ale jak patrzę na ten język to mam wrażenie, że żeby tam dobrze klepać to trzeba być bardzo na bieżąco, a standardy coraz to nowsze. Najzwyczajniej w świecie trochę mi się nudzi czyste C i bym się "pomocował" z innym językiem na bare-metalu na jakimś ARMowym Cortex-M w ramach odskoczni.

Chyba, że znacie jakieś inne dające mocną frajdę technologię? :D .. nie cierpię webdevu jak coś.

edytowany 1x, ostatnio: dnj
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 lata
  • Postów:1493
3

Generalnie problem z językiem C++ w embedded polega na tym, że np. spora cześć STLa bazuje na alokacjach pamięci, które raczej na małych mikrokontrolerach specjalnie korzystne nie są i np. musiałbyś stosować własne implementacje czy to STLa czy alokatorów. Niemniej, kodzić się da w tym nowoczesnym C++ całkiem skutecznie, taki np. DistortOS jest żywym tego przykładem.

edytowany 1x, ostatnio: alagner
Zobacz pozostałe 2 komentarze
DN
kiedyś już się natknąłem na ten DistortOS, a to czasem nie jest jakiś sofcik polski? :^) Muszę zobaczyć.
DN
a co fajnego można porobić w tym Rust na PC? :^)
DN
Jaki ten świat mały, patrzę na contributorów na github tego DistortOSa, a tam kolega z pracy, zapytam u źródła :D
AL
Tak, rzeźbi go człowiek z Zawiercia. A co do Rusta: pobaw się, zobaczysz. Ogólnie (okiem laika także mogę tu się gdzieś mylić) to jest taki C++ z value semantics i by default wbudowanym memory sanitizerem i bez explicit konwersji.
DN
@alagner: wiesz co, jakoś się do C++ nie mogę przekonać. Spróbuję Rust najpierw.
DN
  • Rejestracja:około 4 lata
  • Ostatnio:5 dni
  • Postów:37
1

Zdaję tak trochę relację z tego Rusta w Embedded. Na razie jest trochę ciężko, ale powoli powoli oswajam się z klimatem...
Udało mi się coś już podebugować pod gdb oraz w samym VSCode z dodatkiem Cortex Debug.
Nie tylko na Nucleo, ale także na takim chipie zwykłym na PCBie.

Tak w jak w C wiem jak wszystko się "odprawia" od samego początku w mikrokontrolerach (skrypt linkera, kod startupowy, wektory przerwań i ich obsługa, diassembly...) tak tutaj trochę jeszcze tak się czuję jak bym po omacku coś pisał i nagle działa, ale spokojnie dokopię się do bebechów.

Zacząłem sobie pisać aplikację taką prostą do zapisywania jakiś notatek/zadań i nawet ciekawie się to pisze.
Na pewno cargo na tle jakichś #include'ów to jest niebo a ziemia. Komunikaty kompilatora są o niebo przejrzystsze, ale to chyba kosztem czasu kompilacji (C się o wiele szybciej kompiluje).

SL
Czy czasy kompilacji to problem w embedded? Pytam serio, bo się nie znam. W porównaniu do C/C++ (a zwłaszcza C++) zewnętrzne zależności nie wpływają aż tak bardzo na czas kompilacji (w C++ dodanie standardowego headera do projektu potrafi wydłużyć czas kompilacji jednego pliku do 2 sekund, serio), więc przy dobrej modularyzacji możesz osiągnąć całkiem dobry dev experience. No i Rust ma coś takiego jak cargo check, który odpala tylko frontend kompilacji, który przydaje się przy workflow, że robię małą zmianę i patrzę, czy kompilator nie krzyczy
DN
"Czy czasy kompilacji to problem w embedded?" W moim przypadku nie, nie wiem jak w innych projektach. A co do cargo check to fakt ułatwia o wiele szybkie sprawdzanie po napisaniu jakiegoś kawałka. Może po prostu ja jestem zwykły z C tego, że rebuilduje zazwyczaj cały projekt.
KR
W 2 sekundy to rust potrafi skompilować cały duży projekt po niewielkiej zmianie łącznie z linkowaniem a nie jeden plik. Wg mnie Rust kompiluje znacznie szybciej niż C++ i nieco wolniej od C, ale z C ciężko porównywać bo jednak kodu w C trzeba zwykle napisać sporo więcej aby to samo osiągnąć.
MD
  • Rejestracja:około 8 lat
  • Ostatnio:2 miesiące
  • Postów:43
1

Może to przyśpieszy Ci trochę czas kompilacji: https://github.com/mozilla/sccache

SL
sscache ma sens jako remote cache oraz jak kompilujesz C/C++ (bo tam nie masz normalnego build cache). Przy normalnym rustowym flow zwykły cargo build cache jest wystarczający
Marcin Marcin
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:610
1



Fan moderatora somekind
edytowany 1x, ostatnio: Marcin Marcin
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Wydaje się że na dzień dzisiejszy Rust będzie dużo lepszym zastępnikiem dla C niż C++ w działce embedded.

Zajrzyj na:
https://www.rust-lang.org/what/embedded
https://docs.rust-embedded.org/book/

DN
Chodzi Ci o to, że Rust zagarnie część, która jest aktualnie zajęta przez C, a C++ pozostanie bez zmian w tej działce, dobrze rozumiem?
vpiotr
Wg mnie C++ będzie eliminowany z rynku mimo tego że się rozwija - głównie był stosowany jako bardziej zaawansowane C i na tym polu jest o wiele za bardzo przekombinowany w stosunku do Rust. C++ jest dużo starsze i ma przez to dużo różnego niepotrzebnego bagażu.
DN
No jestem ciekaw. Jestem zainteresowany, ale jest wysokie wejście, przynajmniej ja tak odczuwam.
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:25 minut
  • Postów:8422
0

Arduino to też embedded? (tak pytam, nie znam się). W sensie czy to, co jest mówione o embedded, można zastosować do arduino? (planuję się pobawić tym w ciągu najbliższych miesięcy).


Marcin Marcin
Sprawdź STM32 choć możesz mieć problem z dostępnością.
DN
  • Rejestracja:około 4 lata
  • Ostatnio:5 dni
  • Postów:37
0

@vpiotr: A co do linków to dzięki. Znam je, już nawet trochę porobiłem na nucleo. Tylko mam wrażenie że powinienem najpierw zrobić deep dive w samego Rusta bo powoli mi idzie bo nie znam dobrze filozofii. W każdym razie Rust skomplikowany jest dość moim zdaniem. Na tle C, którego używam na co dzień.

Zobacz pozostały 1 komentarz
DN
Myślałem że potężny embeddedziarz
vpiotr
Nie, raczej mi daleko do tego. Robiłem trochę w tym w poprzednim stuleciu.
DN
To chwal się co robiłeś/robisz, no dawaj!
vpiotr
8042 (analiza kodu sterownika klawiatury), RS232C (terminal siłowni energetycznej), 74XX (różne układy hobbystyczne)
vpiotr
Bardziej mnie interesowały duże maszynki (8bit, pc) + hardware niż embedded. Ostatnio najmniejsze z czym miałem styczność to Raspberry Pi, ale w zasadzie to głównie się kurzy w magazynie. Na 8 bitach zaczynałem programowanie w C (ZX lub Atari - nie pamiętam dokładnie, na obu miałem kompilator).
DN
  • Rejestracja:około 4 lata
  • Ostatnio:5 dni
  • Postów:37
1

@LukeJL: nie wiem czy mnie ktoś zaraz nie zlinczuje, ale uważam że Arduino to się nadaje jak ktoś nie chce wchodzić właśnie w naukę embedded, a chce coś wykonać na sprzęcie elektronicznym albo jako taki pierwszy widok czym to jest. Ja na przykład nie miałem w swoim życiu ani jednego Arduino i raz tylko kumplowi pomagałem bo chcial sobie coś zbudować z tutoriala step by step i mu nie działało. Mimo to technicznie rzecz biorąc jest to embedded bo na płytce jest mikrokontoler i można go programować.

stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:10 minut
1

Arduino (jako biblioteka) technicznie to taki zbior gotowych funkcji. A jako sprzet to po prostu jakas atmega, pewnie 328p (arduino uno) z wyprowadzonymi pinami na plytce. Mozesz wziac dokumentacje AVR i krok po kroku pisac odpowiednie wartosci do rejestrow albo od razu wywolac funkcje i zajac sie tym co ma robic uC. Niekoniecznie jak ma to zrobic z dokladnoscia do bita w rejestrze. Ale tak poza tym to nie masz OS, masz takie same ograniczenia pamieciowe itd.


λλλ
edytowany 4x, ostatnio: stivens
Marcin Marcin
Moim zdaniem to fajna platforma na początek.
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 lata
  • Postów:1493
2

Tak, to jest zdecydowanie embedded. W złym stylu często, z wieloma bibliotekami poniżej poziomu mułu, ale jak chcesz coś na szybko wychałturzyć to ma prawo to zadziałać. Tylko niejednokrotnie okazuje się, że zrobienie czegokolwiek bardziej niestandardowego i tak kończy się pisaniem wszystkiego od zera na rejestrach ;P

edytowany 1x, ostatnio: alagner
VT
No właśnie jak z poziomu Rusta pisać po rejestrach? Znam tylko podstawy Rusta i jakoś tego nie widzę... Zdaje się, że w Ruście nie ma wskaźników. Trzebaby się chyba posłużyć jakąś biblioteczką niższego poziomu pisaną w C :)
AL
Pogooglac musisz, ale w skrócie - da się.
Marcin Marcin
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:610
0

Pamiętajcie że jest arduino
https://www.arduino.cc/
oraz arduino pro
https://www.arduino.cc/pro
To drugie, dużo lepiej nadaje się do zastosowań profesjonalnych

Samo arduino w swojej historii miało być z założenia prostą platformą do prototypów


Fan moderatora somekind
JO
Rust jest drugim najbardziej ekologicznym językiem programowania zaraz po C. Może warto promować ten język i zmniejszać CO2 na świecie? https://hackaday.com/2021/11/18/c-is-the-greenest-programming-language/
WB
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:5
1

Rust? Byle nie ""Rust on bare metal"! Już sama nazwa jest ostrzeżeniem.

DN
Ty dowcipasie Ty :P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.