C vs C++ för ARM
C vs C++ för ARM
Hej!
Jag funderar på att gå över till C++ för min STM32 cortex m3 processor. Mest för att få den objektorineterade delen göra klasser ärva etc. Även få bättre typ-checker vid kompilering för att minska risken för problem.
Vad har ni för erfarenheter av C++ för embeded miljöer? blir koden mycket större och långsammare? vilka för/nackdelar har ni hittat? Kör ni full C++ med exception handeling och allt eller kör ni nån lite-variant för att få ner storleken på koden?
Mvh/
Daniel
Jag funderar på att gå över till C++ för min STM32 cortex m3 processor. Mest för att få den objektorineterade delen göra klasser ärva etc. Även få bättre typ-checker vid kompilering för att minska risken för problem.
Vad har ni för erfarenheter av C++ för embeded miljöer? blir koden mycket större och långsammare? vilka för/nackdelar har ni hittat? Kör ni full C++ med exception handeling och allt eller kör ni nån lite-variant för att få ner storleken på koden?
Mvh/
Daniel
Re: C vs C++ för ARM
också intresserad, men inte funnit någon vettig info om vad man ska göra och vad man ska undvika när man kör C++
Re: C vs C++ för ARM
Jag har kört lite c++ på en lpc1769. Utvecklingsmiö code red som använder gcc om jag minns rätt.
Min erfarenhet av den miljön var att objekten från c++ tog ca 20% större plats än samma kod omgjord till vanlig c.
Hastigheten vet jag ej om det skillde.
--Per
Min erfarenhet av den miljön var att objekten från c++ tog ca 20% större plats än samma kod omgjord till vanlig c.
Hastigheten vet jag ej om det skillde.
--Per
Re: C vs C++ för ARM
C++ har väl en förmåga att överlagra funktionsreferenser?, lite opålitligt.
Re: C vs C++ för ARM
C++ är fullt användbart på ARM. Det gär även bra att köra C++ på AVR, men minnet är vanligen lite mer begränsat. Jag har ännu inte använt C++ felhantering ordentligt på annat än PC, men i det projektet jag har satt igång med nu ska jag testa det (Cortex M4).
C++ har en förmåga att ta lite mer minne totalt sett, och det är inte mycket man kan göra åt det om man vill ha C++-fördelarna. Det behöver däremot inte gå väsentligt långsammare. Det finns ett antal saker som kan få det att gå långsamt. Googla om du vill ha en fullständig lista, men de jag tänker på främst är: Oavsiktlig kopiering av objekt istället för att skicka referenser och objekt som skapas i standardkonfiguration för att sedan destrueras och skapas i rätt utförande.
I övrigt handlar det mest om att C++ lockar en att använda potentiellt sega funktioner. Vem får för sig att använda dynamisk minneshantering i C? Inte jag i alla fall, om det inte är en väldigt speciell applikation. Vem gör det i C++? De flesta, och en del vet inte ens om att de har gjort det.
Vad det gäller överlagring handlar det bara om att ha koll. Det är inte nödvändigtvis samma fallgropar som i C, men det är inte fler om man vet vad man gör.
C++ har en förmåga att ta lite mer minne totalt sett, och det är inte mycket man kan göra åt det om man vill ha C++-fördelarna. Det behöver däremot inte gå väsentligt långsammare. Det finns ett antal saker som kan få det att gå långsamt. Googla om du vill ha en fullständig lista, men de jag tänker på främst är: Oavsiktlig kopiering av objekt istället för att skicka referenser och objekt som skapas i standardkonfiguration för att sedan destrueras och skapas i rätt utförande.
I övrigt handlar det mest om att C++ lockar en att använda potentiellt sega funktioner. Vem får för sig att använda dynamisk minneshantering i C? Inte jag i alla fall, om det inte är en väldigt speciell applikation. Vem gör det i C++? De flesta, och en del vet inte ens om att de har gjort det.
Vad det gäller överlagring handlar det bara om att ha koll. Det är inte nödvändigtvis samma fallgropar som i C, men det är inte fler om man vet vad man gör.
Re: C vs C++ för ARM
Hade jag kört C++ på en "embedded" processor så hade jag varit livrädd för alla bibliotek... Man vet inte hur mycket kod och data en liten till synes enkel funktion tar i anspråk.... Så jag hade nog valt C.
Hur är det förresten med olika RTOS, är de oftast skrivna i C++ eller finns de i C också? T.ex. FreeRTOS?
FreeRTOS: "Very portable code structure predominantly written in C." Låter ju som om man föredrar C även där.
Hur är det förresten med olika RTOS, är de oftast skrivna i C++ eller finns de i C också? T.ex. FreeRTOS?
FreeRTOS: "Very portable code structure predominantly written in C." Låter ju som om man föredrar C även där.
Re: C vs C++ för ARM
Eftersom operativssystemet ofta måsta klara sig helt själv i situationer som boot, systemanrop, hårdvaruhantering mm. Typ lyfta sig själv i håret. Så undviker man ofta C++ där. Medan det i userland ofta går utmärkt med C++ eftersom operativsystemet kan hålla spagettin i schack.
Re: C vs C++ för ARM
jag förstår inte riktigt varför det skulle vara svårare att anropa sig själv när man använder C++? I C har man ett länkscript som beskriver vart koden ligger samt en startup-fil som körs innan man hoppar till main som initierar det som behövs. Vill man starta om i C brukar man oftast utlösa watchdogen så att man är säker på att alla initiergar körs innan man hoppar in i main-funktionen (eller boot-funktionen). Fungerar det på annat sätt när man kör C++?
Re: C vs C++ för ARM
Vill inte komma dragande med ännu en åsikt, men värt att tänka på är att det är ju inte som att jämföra C med Java när man jämför C och C++. C++ är ju ofta bara en "förlängning" av C kompilatorn. Visst kan man skapa ineffektiv kod i C++, det kan man i C också.
Jag använder C++ för embedded om det finns en vettig C++ kompilator tillgänglig. Jag kan liksom inte komma på nån bra orsak att inte göra det. Man behöver inte bygga allt superobjektorienterat bara för att man använder C++, och då får man heller inte den eventuella overhead som är förknippad med det.
Jag använder C++ för embedded om det finns en vettig C++ kompilator tillgänglig. Jag kan liksom inte komma på nån bra orsak att inte göra det. Man behöver inte bygga allt superobjektorienterat bara för att man använder C++, och då får man heller inte den eventuella overhead som är förknippad med det.
Re: C vs C++ för ARM
Ok, jag resonerar ung likadant om att C++ är en förlängning av C. Det mesta tyckandet verkar bero på okunskap kring C++ men jag vet inte riktigt vart jag ska hitta information om vad som är värt att tänka på. Nästan alla tutorials jag hittat handlar om just C och misstänker att det finns en hel del fallgropar när man går över till C++.
En tråd som var intressant är denna: http://embdev.net/topic/175304 tredje eller fjärde inlägget handlar om vilken "kostnad" olika funktioner har kring C++ (för IAR kompilatorn). I mitt fall kommer jag anvävända GCC och codecourcery.
någon som har en bra länk till vart man kan "läsa på" om C++ för GCC på ett hyfsat kortfattat sätt så att man slipper plöja genom samtliga manualer för byggverktygen?
En tråd som var intressant är denna: http://embdev.net/topic/175304 tredje eller fjärde inlägget handlar om vilken "kostnad" olika funktioner har kring C++ (för IAR kompilatorn). I mitt fall kommer jag anvävända GCC och codecourcery.
någon som har en bra länk till vart man kan "läsa på" om C++ för GCC på ett hyfsat kortfattat sätt så att man slipper plöja genom samtliga manualer för byggverktygen?
Re: C vs C++ för ARM
Den där länken var ju bra. I övrigt föreslår jag att du gör några enkla testprogram som använder diverse C++ egenskaper och tittar på assemblerlistningen och dyl för att avgöra vad som är ok och vad du bör undvika.
Det som är lite lustigt i sammanhanget är att när folk försöker jämföra C med C++, jämför man funktionalitet i C++ med fuktionalitet som... inte existerar i C. Jag menar, hur skall man kunna jämföra hur effektivt virtuella funktioner, överlagrade operatorer, templates, RTTI, exceptions, etc. är jämfört med C, när dessa egenskaper inte existerar i C !!?!
Jag är ganska säker på att om man manuellt försöker bygga liknande funktionalitet i C, kommer det att bli större och långsammare kod än vad C++ kompilatorn åstadkommer.
Det som är lite lustigt i sammanhanget är att när folk försöker jämföra C med C++, jämför man funktionalitet i C++ med fuktionalitet som... inte existerar i C. Jag menar, hur skall man kunna jämföra hur effektivt virtuella funktioner, överlagrade operatorer, templates, RTTI, exceptions, etc. är jämfört med C, när dessa egenskaper inte existerar i C !!?!
Jag är ganska säker på att om man manuellt försöker bygga liknande funktionalitet i C, kommer det att bli större och långsammare kod än vad C++ kompilatorn åstadkommer.