Arduino IDE: Warum werden Skizzen nicht kompiliert (und wie vermeide ich das?)
Da ich mich intensiv in der Arduino IDE entwickle, hat mich diese Frage wirklich beunruhigt. Warum weigert sich eine in einer Version der Entwicklungsumgebung geschriebene Skizze, in benachbarten Versionen kompiliert zu werden? Arduino Mega Server Benutzer haben mich mit der gleichen Frage überwältigt . Warum kompiliert der AMC in 1.6.5 und weigert sich, in 1.6.4, 1.6.7 und 1.6.8 zu kompilieren?Und kürzlich, als ich den Arduino Mega Server auf den neuen Genuino 101-Controller portierte, konnte ich dieses große Rätsel lösen. Und in diesem Artikel werde ich dieses heilige Wissen mit Ihnen teilen und Ihre Skizzen werden danach immer erfolgreich zusammengestellt. Also ...Logik der Dinge
Logischerweise muss Code, der in einer beliebigen Version der Entwicklungsumgebung, z. B. 1.6.5, erfolgreich kompiliert wird, in benachbarten Versionen der IDE kompiliert werden, da sich diese Versionen nur im dritten Zeichen unterscheiden und mit geringfügigen Änderungen nahezu identisch sind . Das passiert aber nicht. Warum?Wohnküche
Um dies zu verstehen, müssen Sie verstehen, wie die Versionen der Arduino IDE-Entwicklungsumgebungen gebildet werden und wie Benutzer mit diesen Entwicklungsumgebungen arbeiten.Beginnen wir mit den Benutzern. Die meisten von ihnen kompilieren im übertragenen Sinne primitive Projekte in 20 Zeilen, und es gibt keine Probleme mit diesen Projekten. Diese Projekte werden in jeder Version der IDE erfolgreich kompiliert, da sie nur Standardbibliotheksfunktionsaufrufe verwenden und die Bibliotheken selbst nicht ändern.Ein etwas entwickeltes Projekt auf Arduino passt jedoch nicht mehr in die „20 Zeilen“ und verwendet unweigerlich weniger gebräuchliche Funktionen aus Bibliotheken (die anfälliger für Änderungen von Version zu Version sind) und muss zwangsläufig die Bibliotheken selbst an ihre spezifischen Anforderungen des Projekts anpassen.Und sobald Sie die Systembibliothek geändert haben, werden Sie zur Geisel und müssen sie von Version zu Version mit sich ziehen.Schauen wir uns nun an, wie die Versionen der Arduino IDE gebildet werden. Und sie werden willkürlich (ich vermute, dass am Ende ein bestimmter Programmierer, ein Mario) des ausstellenden Teams gebildet. Und welche Version einer bestimmten Bibliothek im Distributionskit enthalten sein wird und in welcher Form (mit welchen Modifikationen), bleibt dem Gewissen dieses „Mario“ überlassen.Und jetzt Aufmerksamkeit, das ist sehr wichtig! Das ausstellende Team hat nur ein Ziel: Die Verteilung einer Version ist einvernehmlich und in sich konsistent. Ihre Aufgabe ist es sicherzustellen, dass alle Standardbeispiele korrekt funktionieren. Und das ist alles! Die Kompatibilitätsaufgabe zwischen den Versionen ist überhaupt nicht gestellt.Und da 99% der Benutzer Projekte in „20 Zeilen“ kompilieren, „rollt“ dieser Ansatz in der Praxis perfekt. Und die Tatsache, dass keine ernsthaften Projekte zusammengestellt werden, ist das Problem dieser Projekte. Gott sei Dank ist der Mechanismus für das Auftreten des Problems jetzt klar, und jetzt ist klar geworden, wie man damit umgeht.Konkretes Beispiel
Erinnern wir uns an die Portierung von AMS nach Genuino 101 (es funktioniert seit Version 1.6.7 und höher). Hier hat das Arduino-Team einen weiteren Witz für uns zusammengestellt (gut gemacht, Leute, sie lassen uns nicht entspannen).Der Versuch, das Projekt für den neuen Controller zu kompilieren, führte zu vielen Compilerfehlern. Die Analyse der Nachrichten ergab, dass der Compiler unsere Ethernet-Bibliothek nicht mag. Warum hat sie dem Compiler nicht gefallen?Wir beginnen zu verstehen.Unsere Bibliothek: version = 1.0.4 (mag den Compiler nicht)Bibliothek aus IDE 1.6.7: version = 1.0.4 (wie der Compiler)Allerdings.Unsere Bibliothek: 31 Dateien (mag den Compiler nicht)Bibliothek aus IDE 1.6.7: 31-Datei (wie der Compiler).Unsere Bibliothek: 123 KB (mag den Compiler nicht)Bibliothek aus IDE 1.6.7: 123 KB (wie der Compiler).Mit anderen Worten, Mario hat eine IDE 1.6.7-Ethernet-Bibliothek mit derselben Versionsnummer wie in IDE 1.6.5, derselben Anzahl von Dateien und derselben Größe, aber mit einem VERSCHIEDENEN INHALT „festgeklebt“ und vergessen warnen Sie uns davor. Und dies ist der „unterschiedlichste Inhalt“, wie eine Spinne, die an ihrer IDE und anderen Bibliotheken niedrigerer Ebene festhält (ebenfalls in 1.6.7 geändert).Bravo, Mario! Mit diesem Ansatz wird nichts außer Standardbeispielen und Skizzen mit 20 Zeilen kompiliert.Praktische Lösung (Rätsel von Arduino)
Jetzt ist der Mechanismus, warum Projekte nicht in verschiedenen Versionen der Arduino IDE kompiliert werden, kristallklar geworden, und dementsprechend ist der Weg zur Lösung dieses Problems kristallklar geworden. In diesem speziellen Fall besteht die Lösung aus drei Teilen.- Teil Eins Eine funktionierende Bibliothek finden. Denken Sie daran, die Aufgabe des ausstellenden Teams, eine konsistente Version der IDE zu erstellen? Irgendwo muss es also eine funktionierende Version der Bibliothek geben, die wir brauchen.
- Teil Zwei Übertragen einer funktionierenden Ethernet-Bibliothek von dem ungezogenen kleinen Mario an ihren Platz im Arduino Mega Server-Projekt. Hier gibt es nichts Kompliziertes - kopieren Sie es einfach an den Ort unserer Bibliothek, der in IDE 1.6.7 Ethernet nicht funktioniert.
- Teil drei. Änderung für das Arduino Mega Server-Projekt einer portierten und offensichtlich funktionierenden Bibliothek in IDE 1.6.7 Ethernet.
Dasselbe muss mit allen nicht kompilierten Bibliotheken des Projekts gemacht werden (dh, Sie suchen eine funktionierende Version der Bibliothek aus der IDE und übertragen sie an ihren Platz im Projekt und ändern sie gegebenenfalls). In diesem Fall hatten wir Glück, dass alle anderen Bibliotheken einwandfrei funktionierten (da Mario es nicht geschafft hat, sie leise zu ändern, obwohl er dies in neuen Versionen der IDE definitiv tun konnte und wird, aber wir wissen bereits, wie wir damit umgehen sollen).Fazit
Das ist das ganze Geheimnis einer erfolgreichen Arbeit in der Arduino IDE mit komplexen Projekten. Jetzt können Sie sich voll bewaffnet fühlen und es wird Ihnen nicht schwer fallen, Ihr Projekt in einer beliebigen Version der Arduino IDE zum Laufen zu bringen.Source: https://habr.com/ru/post/de392931/
All Articles