Spørgsmål:
Hvad skal jeg vide, når jeg opretter et bibliotek til Arduino?
Clinton Blackmore
2010-06-05 08:13:13 UTC
view on stackexchange narkive permalink

Det forekommer mig, at jeg ud over mit nuværende problem skal spørge: "Hvad skal jeg vide, når jeg opretter et bibliotek til Arduino?"

Først hvad jeg laver:

Jeg bruger Eclipse som min editor og skriver kode i C ++. Jeg har skrevet et simpelt Arduino-program, der inkluderer min headerfil og arbejder igennem fejl.

Første problem: hvordan laver jeg en 'build clean'? Jeg ser fejl, som jeg tror, ​​jeg har rettet, næsten som om headerfilen var cachelagret. (Ja, sandsynligvis laver jeg noget dumt [ rediger : Jeg var], men jeg vil stadig gerne vide, hvordan man renser biblioteket og ikke ved, hvor objektfilerne er).

For det andet: hvilke konventioner skal jeg være opmærksom på? Jeg har ikke brugt Arduino så meget, som jeg gerne vil, og det føles så godt at programmere i C ++, men jeg ved, at bibliotekerne har til hensigt at holde tingene pæne og enkle for brugerne. Er der konventioner for funktionsnavne? Opretter konstanter (det ser ud til, at det globale navneområde er forurenet med #defines)? Og så videre.

Endelig er der noget andet, jeg bør vide?

Jeg skal nævne, at jeg har kigget på Arduino Library Tutorial, hvilket er godt, men ikke går meget langt. Jeg har også kigget på nogle af de biblioteker, der er installeret på mit system.

Har du prøvet Arduino IDE og opgivet det? Jeg ved, at i betragtning af Eclipse-as-IDEs generelle programmerings-produktivitetsfunktionssæt, falder Arduino-IDE ud. I denne situation, hvis du ikke har prøvet Arduino-IDE, vil du måske gerne gøre det. Selvom jeg finder det trægt, men eksplicit re-kompilerer værker, ligesom de burde.
En svar:
Jay Atkinson
2010-06-05 18:59:36 UTC
view on stackexchange narkive permalink

Jeg tager et stik. Jeg har ikke skrevet kode til Arduino, men jeg har lavet en masse C og C ++ programmering. Det ville hjælpe, hvis jeg faktisk så dine fejl, men alligevel.

Det vigtigste, du altid skal huske, når du bruger C ++ med C-kode, er at din C ++ -kode har brug for funktioner, der er erklæret med "ekstern" C ", hvis du vil have C-kode for at kunne linke mod C ++ -koden . Den "eksterne" C "" er det, der fortæller C ++ - kompilatoren, at jeg opretter linkbar kode til C-filer, eller at jeg bruger kode fra C-filer. Så alle dine funktioner i bibliotekets API-header skal korrelere med en funktion i kildefilen, der er defineret som "ekstern" C "ugyldig dosomething ()". Hvis du prøver at bruge klasser i C ++, skal du huske, at C-kode ikke kan kalde det, skal du oprette funktioner (ekstern "C") for at få adgang til objektet. Hvis din C-kode nu er kompileret med en C ++ -compiler, skal du ikke bekymre dig om "ekstern" C "".

Hvis du vil kalde C-kode inde i din C ++ -kode, skal du indpakke C-headeren med en konstruktion som denne:

  #ifdef ___cplusplusextern "C" {#endif /// alle mine C-funktionserklæringer ... yada yada # ifdef __cplusplus} // end extern " C "#endif  

Hvis du arbejder i C ++, skal du ikke bruge meget a #defines, medmindre du opretter kompileringstidsflag som" DEBUG "eller" VERSION2 "til at oprette specielle sæt kode. Ellers skal du bruge "const int / char / float" til antal definerer til sikker typekontrol. Compilerne er normalt smarte nok til at optimere disse, så de afvikler i ROM / kode plads (afhænger dog). Opret heller ikke MACROS, brug inline-funktioner. Følg heller ikke altid konventionen, når du programmerer, hvis det er dumt, f.eks. Ved at bruge mange makroer og taldefiner i C ++. Det samme gælder C99-versionen af ​​C, den har tilføjet ting som inline-funktioner og consts fra C ++. Branchen indser, hvor meget buggykode og svært at vedligeholde kode kommer af overforbrug af præprocessorsproget.

Eclipse gemmer normalt obj-filerne i en mappe under dit projekt. Hvis du laver en "Debug" -opbygning, er den placeret under "Debug" -mappen under din projektmappe. Hvis du laver en "Release" build, så se under "Release" osv. Normalt fungerer en ren build bare for mig i Eclipse, så jeg ved ikke, hvad der går galt med din opsætning. Jeg gætter på, at du ikke opretter forudkompilerede overskrifter.



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 2.0-licens, den distribueres under.
Loading...