De ce nu Arduino IDE compila schițe (și cum să-l evite)

De ce nu Arduino IDE compila schițe (și cum să-l evite)

Din moment ce eu sunt în curs de dezvoltare intens în Arduino IDE, atunci problema am cu adevărat îngrijorat. De ce schiță, scrisă într-o versiune a IDE refuză să compileze în versiunile vecine? Aceeași întrebare am îngrămădite utilizatorii Arduino sistem Mega Server. De ce AMS este compilat în 1.6.5 și refuză să fie compilate în 1.6.4, 1.6.7 și 1.6.8?

Și, recent, în procesul de portare Arduino Server Mega pe noul controler GENUINO 101, am fost în stare să rezolve acest puzzle mare. Și în acest articol, voi impartasi cu voi aceste cunoștințe sacre și schițele, atunci nu vor fi întotdeauna compilate cu succes. Deci ...

Logica lucrurilor

În mod logic, codul care compilează cu succes în orice versiune a mediului de dezvoltare, cum ar fi 1.6.5, este necesar să fie compilate în versiunile vecine ale IDE, deoarece aceste versiuni diferă numai în al treilea rând și sunt aproape la fel, cu mici modificări . Dar acest lucru nu se întâmplă. De ce?

bucătărie internă

Pentru a înțelege acest lucru, trebuie să se ocupe de modul în care versiunea generată de mediul de dezvoltare Arduino IDE și modul în care utilizatorii lucrează cu aceste medii de dezvoltare.

Să începem cu utilizatorii. Cele mai multe dintre ele sunt primitive proiecte compilează, la figurat vorbind, în 20 de linii și probleme cu aceste proiecte. Aceste proiecte au fost compilate cu succes cu orice versiune de IDE deoarece foloseste doar apelurile standard de bibliotecă, și nu modifică ei înșiși bibliotecile.

Dar, orice proiecte de dezvoltare pe Arduino nu se încadrează în „20 de linii“ și se bucură în mod inevitabil, funcții mai puțin răspândite ale bibliotecilor (care sunt mai predispuse la modificări de la o versiune la alta) și va veni în mod inevitabil la bibliotecă ele însele au nevoie de modificări pentru a se potrivi nevoilor dumneavoastră specifice proiectului.

Și odată ce modificarea biblioteca de sistem, deveniți ostatic său, și forțat să „trageți“ ei pentru o versiune a versiunii.

Acum să înțeleagă cu versiunea modul în care a generat Arduino IDE. Și au format în mod arbitrar (bănuiesc că, în cele din urmă, un programator special, unele Mario) emiterea de comenzi. Și ce versiune a unei biblioteci este inclusă în distribuția și în ce formă (cu unele modificări) rămâne pe conștiința „Mario“.

Acum, să acorde o atenție, acest lucru este foarte important! Echipa Producerea urmărește doar un singur scop - la distribuirea unei versiuni a fost stabilit de comun acord și este consecvent în sine. Sarcina lor este de a se asigura că toate exemplele standard pentru a funcționa corect. Și asta e! Problema compatibilității dintre versiuni nu se pune.

Și pentru că 99% dintre utilizatorii compilează proiecte în „20 de linii“, această abordare perfect, „rulouri“ în practică. Iar faptul că orice proiecte serioase nu sunt compilate, problemele acestor proiecte. Slavă Domnului, acum înțeleg mecanismul problemei și a devenit acum clar modul în care să se ocupe de ea.

Un exemplu concret

De ce nu Arduino IDE compila schițe (și cum să-l evite)

Reamintim AMC portare GENUINO 101 (sprijinit de la versiunea 1.6.7 și mai mare). Aici echipa Arduino are în magazin pentru noi gluma viitoare (baieti bine făcut, nu ne permit să se relaxeze).

Biblioteca noastră: versiunea = 1.0.4 (nu ca compilatorul)
Biblioteca IDE 1.6.7: versiunea = 1.0.4 (cum ar fi compilator)

Biblioteca noastră: 31 de fișiere (nu-mi place compilatorul)
IDE 1.6.7 al bibliotecii: 31 de fișier (cum ar fi compilatorul)

Biblioteca noastra: 123 KB (nu ca compilatorul)
Biblioteca IDE 1.6.7: 123 KB (cum ar fi compilator)

Cu alte cuvinte, Mario „blocat“ în IDE 1.6.7 biblioteca Ethernet cu același număr de versiune ca și în IDE 1.6.5, același număr de fișiere cu aceeași dimensiune, dar cu conținut diferit și am uitat am avertizat despre acest lucru. Și acest lucru este cel mai „conținut diferit“, ca un păianjen păstrează labele sale pentru IDE și alte biblioteci de nivel inferior (de asemenea, modificat în 1.6.7).

Bravo, Mario! Cu această abordare, nimic nu va fi compilate, cu excepția standard și exemple de schițe în 20 de rânduri.

Soluție practică (puzzle-uri de Arduino)

Ea a devenit acum limpede ca cristalul mecanismul de ce proiecte nu sunt compilate în diferite versiuni ale Arduino IDE și, în consecință, același cristal a devenit mod clar de a rezolva această problemă. În acest caz particular, soluția este compusă din trei părți.

  • Partea întâi. Găsirea unei biblioteci de lucru. Amintiți-vă, problema în emiterea de comenzi pentru a crea o versiune consecventă a IDE? Deci, undeva, trebuie să existe o versiune de lucru a bibliotecilor necesare pentru noi.
  • Partea a doua. Extinderea bibliotecii de lucru Ethernet de la Mario răutăcios în locul său în proiectul Arduino Mega Server. Nu este nimic complicat - trebuie doar să-l copiați în locul nostru rupt în IDE 1.6.7 biblioteca Ethernet.
  • Partea a treia. Modificarea pentru proiectul Arduino Mega Server mutat și, evident, de lucru în IDE 1.6.7 biblioteca Ethernet.

Același lucru trebuie să fie făcut cu toate nekompiliruyuschimisya Proiectul Biblioteca (care este, găsiți o versiune de lucru a bibliotecii din IDE și mutați-l la locul său în proiect și să modifice, dacă este necesar). Dar, în acest caz, am avut noroc, restul bibliotecii va funcționa în mod normal (pentru că Mario nu le-au modificat în liniște, cu toate că el ar putea și întotdeauna face acest lucru în noile versiuni ale IDE, dar știm deja cum să se ocupe cu ea).

concluzie

Asta e tot secretul de lucru de succes în Arduino IDE cu proiecte complexe. Acum vă puteți simți pe deplin pregătit și nu va fi dificil de a face munca de proiect în orice versiune a Arduino IDE.