Czy kiedykolwiek będzie możliwe używanie C ++ do kodowania PIC?
Tak, teraz jest to możliwe. Dla 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 etapu pre-build, przekonwertuj C ++ na C, a następnie przekaż (nieprzyjemnie wyglądające) C do swojego normalnego kompilatora C. Spójrz na LLVM lub kompilator C ++ Comeau, które to robią. Comeau kosztuje tylko 50 USD, ale prawdopodobnie będzie wymagało trochę wysiłku, aby cały zestaw narzędzi i biblioteki działały poprawnie.
Czy są jakieś ograniczenia sprzętowe, które uniemożliwiają nam używanie C ++?
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 borykają się mniejsze MCU z ograniczoną pamięcią RAM.
Dlaczego zmagają się ze stosem? Z dwóch powodów: A) wiele mikrokontrolerów ma ograniczoną pamięć RAM, z pewnością niewystarczającą na stertę i ledwo na stos. B) wiele MCU nie obsługuje dobrze wskaźników, więc użycie zmiennych na stosie naprawdę zabija wydajność.
Kiedy ludzie pytają o używanie C ++ na MCU, uważam, że konstruktywne jest porównywanie C ++ z C. dokładnie te same pytania były (i nadal są) zadawane na temat C na MCU. Ludzie wzdragali się przed tym pomysłem. Język wysokiego poziomu, na 256-bajtowym MCU RAM? Niemożliwy. Ale teraz wszyscy wiemy, że jest to możliwe. Napisałem C dla PIC12. Nie ma problemu. Jest to możliwe, ponieważ A) programiści wiedzą, że muszą być trochę ostrożni: nie używaj funkcji malloc () itp. Oraz 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 pozwolą ci napisać kodu re-entrantowego (rekurencyjnego), który absolutnie wymaga stosu.
Wiedząc, że można napisać C dla MCU, te same odpowiedzi odnoszą się do pytania o pisanie C ++ na MCU. Dopóki kompilator rozumie ograniczenia urządzenia docelowego, a użytkownik rozumie również język, naprawdę nie ma problemu. W C ++ płacisz tylko za to, czego używasz. Całkiem możliwe jest napisanie C ++ (z obiektami i wszystkim), który generuje dokładnie takie wyjście asm, jakie otrzymalibyście, gdybyście użyli C.
Teraz PIC32 z pewnością poradzi sobie z C ++. Posiadają aż 64kB RAM i bazują na rdzeniu MIPS, czyli odpowiednio rozwiniętym 32-bitowym procesorze. Może radzić sobie ze wskaźnikami i stosem, a także z komputerem. Rzeczywiście, istnieją komputery PC oparte na MIPS (a przynajmniej były).
Niestety, wokół C ++ jest wiele nieporozumień. Wydaje się, że nawet bardzo doświadczeni programiści nie mają pojęcia, jak działa ten język. Zobacz moją odpowiedź, dlaczego C ++ jest odpowiedni dla wbudowanych procesorów.
O ile zwiększy się rozmiar wygenerowanego pliku .hex i czas działania programu, gdy zamiast tego użyjemy C ++ z C?
Jak powiedziałem, może nie być różnicy. Bjarne Stroustrup porównał kilka kompilatorów C / C ++, aby porównać wydajność w czasie i przestrzeni dla wielu operacji. Wyniki były bardzo zróżnicowane. W niektórych przypadkach C ++ wyszedł wolniej i większy, w innych wolniejszy i mniejszy lub szybszy i większy, a nawet szybszy i mniejszy! Tak więc odpowiedź na twoje pytanie jest taka, że zależy to w dużej mierze od kompilatora, ale ogólnie nie musi to robić żadnej różnicy. Aby uzyskać więcej informacji, zobacz Raport techniczny o wydajności C ++
Czy są jakieś plany na przyszłość lub trwający rozwój w tej sprawie?
Tego nie wiem. Wiem, że kompilator Microchip C32 jest open source i możesz pobrać jego źródło. Wiem też, że ktoś, z kim pracowałem, znalazł instrukcje online i zdołał przekonać kompilatora do skompilowania kodu C ++. Ale odszedł z firmy, zanim był w stanie ustawić mi odpowiedni łańcuch narzędzi.
AKTUALIZACJA
Microchip ma teraz Kompilator C ++ dostępny dla serii wbudowanych mikrokontrolerów PIC32.