Czy kiedykolwiek będzie można używać C ++ do kodowania PIC? Czy są jakieś ograniczenia sprzętowe, które uniemożliwiają nam używanie C ++? O ile większy jest rozmiar generowanego pliku .hex i czas działania programu, gdy używamy C ++ zamiast C? Czy jest praktycznie możliwe użycie C ++ dla obecnych PIC? Czy są jakieś plany na przyszłość lub dalszy rozwój?
pic
c
development-tools
c++
hkBattousai
źródło
źródło
Odpowiedzi:
Tak, teraz jest to możliwe. W przypadku dsPIC istnieje kompilator IAR Systems C ++ (chociaż jest bardzo stary i nie jest obsługiwany).
Inną opcją jest użycie konwertera C ++ na C. Korzystając z kroku przed kompilacją, przekonwertuj C ++ na C, a następnie (nieprzyjemnie wyglądający) C na normalny kompilator C. Spójrz na LLVM lub kompilator C ++ Comeau, które to robią. Comeau's kosztuje tylko 50 USD, ale prawdopodobnie zajmie trochę wysiłku, aby cały łańcuch narzędzi i biblioteki działały poprawnie.
Krótka odpowiedź, nie, nie ma ograniczeń sprzętowych. Długa odpowiedź, C ++ z pewnością zachęca do korzystania ze sterty i / lub stosu, z którymi zmagają się mniejsze MCU z ograniczoną pamięcią RAM.
Dlaczego walczą ze stosem / stosem? Z dwóch powodów: A) wiele MCU ma ograniczoną pamięć RAM, niewystarczająco na stertę i ledwo na stos. B) wiele MCU nie radzi sobie dobrze ze wskaźnikami, więc użycie zmiennych na stosie naprawdę zabija wydajność.
Kiedy ludzie pytają o użycie C ++ na MCU, uważam, że konstruktywne jest porównywanie C ++ z C. Dokładnie te same pytania były (i nadal są) zadawane o C na MCU. Ludzie zwykli niepokoić się tym pomysłem. Język wysokiego poziomu, na 256 bajtowej pamięci MCU RAM? Niemożliwy. Ale teraz wszyscy wiemy, że to możliwe. Napisałem C dla PIC12. Nie ma problemu. Jest to możliwe, ponieważ A) twórcy oprogramowania wiedzą, że muszą być trochę ostrożni: nie używaj malloc () itp. I B) kompilator został napisany specjalnie dla MCU. Kompilator będzie również bardzo ostrożny przy alokacji pamięci, nie będzie próbował utworzyć sterty i może nie utworzyć stosu. Niektóre kompilatory C po prostu nie pozwalają pisać kodu rekurencyjnego (rekurencyjnego), który absolutnie wymaga stosu.
Wiedząc, że można napisać C dla MCU, te same odpowiedzi dotyczą pytania o pisanie C ++ na MCU. Tak długo, jak kompilator rozumie ograniczenia urządzenia docelowego, a użytkownik rozumie również język, tak naprawdę nie ma problemu. W C ++ płacisz tylko za to, czego używasz. Jest całkowicie możliwe, aby napisać C ++ (z obiektami i wszystkim), który generuje dokładne wyjście asm, które uzyskałbyś, gdybyś użył C.
Teraz PIC32 z pewnością poradzi sobie z C ++. Mają do 64 kB pamięci RAM i są oparte na rdzeniu MIPS, który jest odpowiednio dorosłym 32-bitowym procesorem. Może poradzić sobie ze wskaźnikami i stosem, a także z komputerem PC. Rzeczywiście istnieją komputery oparte na MIPS (a przynajmniej takie były).
Niestety, wokół C ++ jest tyle nieporozumień. Wydaje się, że nawet bardzo doświadczeni koderzy nie mają pojęcia, jak działa ten język. Zobacz moją odpowiedź na temat tego, dlaczego C ++ jest odpowiedni dla wbudowanych procesorów.
Jak powiedziałem, może nie być różnicy. Bjarne Stroustrup dokonał porównania wielu kompilatorów C / C ++ w celu porównania wydajności czasowej i przestrzennej dla wielu operacji. Wyniki były bardzo zróżnicowane. W niektórych przypadkach C ++ pojawiał się wolniej i większy, w niektórych przypadkach wolniejszy i mniejszy lub szybszy i większy, a nawet coraz szybszy i mniejszy! Tak więc odpowiedź na twoje pytanie jest taka, że zależy to w dużej mierze od kompilatora, ale generalnie nie musi w ogóle mieć znaczenia. Aby uzyskać więcej informacji, zobacz Raport techniczny dotyczący wydajności C ++
Tego nie wiem. Wiem, że kompilator Microchip C32 jest oprogramowaniem typu open source i można pobrać źródło. Wiem też, że ktoś, z kim pracowałem, znalazł instrukcje online i udało się uzyskać kompilator do kompilacji kodu C ++. Ale opuścił firmę, zanim zdążył skonfigurować właściwy łańcuch narzędzi.
AKTUALIZACJA
Microchip ma teraz kompilator C ++ dla swoich wbudowanych mikrokontrolerów PIC32.
źródło
Zależy, jakich funkcji używasz. Jeśli użyjesz podstawowych funkcji obiektowych (klasy + metody), prawdopodobnie będą one miały bardzo niewielki wpływ (zniekształcone nazwy zmiennych / funkcji dłużej, więc tablica symboli prawdopodobnie nieco wzrośnie). Szablony nie powinny również dodawać wiele przy dobrym kompilatorze.
Jeśli oszalejesz i wciągniesz takie rzeczy, jak Standardowa Biblioteka Szablonów, i użyjesz dynamicznej alokacji pamięci i wyjątków, najprawdopodobniej napotkasz rozrost kodu.
źródło
Istnieją już kompilatory c ++ dla pic, na przykład http://www.sourceboost.com/Products/BoostCpp/Overview.html
Nie korzystałem z tego i nic o tym nie wiem poza tym, że istnieje ...
źródło
Uogólniając nieco twoje pytanie, istnieją procesory ARM zbudowane dla rynku wbudowanego, które zawierają MMU (moduł zarządzania pamięcią). Rozmiar pamięci i alokacja sprawiły, że języki takie jak Java i C ++ nie były dobrze osadzone. Ponieważ wbudowane procesory stają się coraz szybsze i wydajniejsze, a pamięć staje się gęstsza i tańsza, wybór języka dostępny dla inżynierów osadzonych zmienia się dramatycznie. 32-bitowy procesor ARM 600 MHz z MMU i kartą 64G Flash jest doskonałym kandydatem do aplikacji c ++. To, czy pasuje do definicji klasycznego wbudowanego procesora, to inna kwestia.
źródło
Prawdopodobnie tak ... ale nie powinieneś i tak ... C jest językiem osadzonym i nie ma zalet używania C ++. A raczej zalety C znacznie przewyższają zalety C ++ dla osadzonych. Nie marnuj czasu.
źródło