Vraag:
Wat moet ik weten als ik een bibliotheek voor de Arduino maak?
Clinton Blackmore
2010-06-05 08:13:13 UTC
view on stackexchange narkive permalink

Het komt bij me op dat ik, afgezien van mijn huidige probleem, zou moeten vragen: "Wat moet ik weten als ik een bibliotheek voor de Arduino maak?"

Ten eerste, wat ik aan het doen ben:

Ik gebruik Eclipse als mijn editor en schrijf code in C ++. Ik heb een eenvoudige Arduino-applicatie geschreven die mijn header-bestand bevat en ik ben bezig met fouten.

Eerste probleem: hoe doe ik een 'build clean'? Ik zie fouten waarvan ik denk dat ik ze heb opgelost, bijna alsof het header-bestand in de cache is opgeslagen. (Ja, waarschijnlijk doe ik iets stoms [ bewerken : ik was], maar ik zou nog steeds graag willen weten hoe ik de bibliotheek moet opschonen en weet niet waar de objectbestanden zijn).

Ten tweede: van welke conventies moet ik op de hoogte zijn? Ik heb de Arduino niet zo vaak gebruikt als ik zou willen, en het voelt zo goed om in C ++ te programmeren, maar ik weet dat de bedoeling van de bibliotheken is om dingen leuk en simpel te houden voor de gebruikers. Zijn er conventies voor functienamen? Constanten maken (het lijkt erop dat de globale naamruimte vervuild is met #defines)? En ga zo maar door.

Ten slotte, is er nog iets dat ik moet weten?

Ik moet vermelden dat ik de Arduino-bibliotheek Tutorial, wat goed is, maar niet erg ver gaat. Ik heb ook gekeken naar enkele van de bibliotheken die op mijn systeem zijn geïnstalleerd.

Heb je de Arduino IDE geprobeerd en het opgegeven? Ik weet dat, gezien Eclipse-as-IDE's algemene programmer-productiviteitsfunctieset, Arduino-IDE verbleekt. Als u in deze situatie echter Arduino-IDE niet hebt geprobeerd, zou u dit misschien willen doen. Hoewel ik het traag vind, maar expliciet opnieuw compileren werkt, precies zoals het zou moeten.
Een antwoord:
Jay Atkinson
2010-06-05 18:59:36 UTC
view on stackexchange narkive permalink

Ik zal een poging wagen. Ik heb geen code geschreven voor Arduino, maar ik heb veel C- en C ++ -programmering gedaan. Het zou helpen als ik je fouten echt zou zien, maar toch.

Het belangrijkste dat u altijd moet onthouden wanneer u C ++ met C-code gebruikt, is dat uw C ++ -code functies nodig heeft die zijn gedeclareerd met "extern" C "" als u wilt dat C-code kan linken met de C ++ -code . De "externe" C "" vertelt de C ++ - compiler dat ik koppelbare code voor C-bestanden maak of dat ik code gebruik uit C-bestanden. Dus al uw functies in de API-header van de bibliotheek moeten correleren met een functie in het bronbestand die is gedefinieerd als "extern" C "void dosomething ()". Als u klassen in C ++ probeert te gebruiken, onthoud dan dat C-code het niet kan aanroepen, u moet functies (extern "C") maken om toegang te krijgen tot het object. Als uw C-code nu is gecompileerd met een C ++ -compiler, hoeft u zich geen zorgen te maken over "extern" C "".

Als u C-code in uw C ++ -code wilt oproepen, moet u de C-header met een constructie als deze:

  #ifdef ___cplusplusextern "C" {#endif /// al mijn C-functieverklaringen ... yada yada # ifdef __cplusplus} // end extern " C "#endif  

Als je in C ++ werkt, gebruik dan niet veel #defines, tenzij je compilatietijdvlaggen maakt zoals" DEBUG "of" VERSION2 "om speciale sets van code. Gebruik anders "const int / char / float" voor het definiëren van getallen voor veilige typecontrole. De compilers zijn meestal slim genoeg om deze te optimaliseren, dus ze eindigen in ROM / code-ruimte (hangt echter af). Maak ook geen MACRO'S, maar gebruik inline-functies. Volg ook niet altijd de conventie bij het programmeren als het stom is, zoals het gebruik van veel macro's en nummerdefinities in C ++. Hetzelfde geldt voor C99-versie van C, het heeft dingen toegevoegd zoals inline-functies en consts van C ++. De industrie realiseert zich hoeveel code met fouten en moeilijk te onderhouden code het gevolg is van overmatig gebruik van de preprocessor-taal.

Eclipse slaat de obj-bestanden gewoonlijk op in een directory onder uw project. Als je bezig bent met een "Debug" build, dan bevindt deze zich in de "Debug" -map onder je projectmap. Als je een "Release" build doet, kijk dan onder "Release", enz. Normaal gesproken werkt een schone build voor mij gewoon in Eclipse, dus ik weet niet wat er mis gaat met je setup. Ik veronderstel dat u geen voorgecompileerde headers maakt.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...