Die Entwicklung des Arduino Mega Server- Projekts ist in vollem Gange und während der Arbeit gibt es unerwartete Hindernisse, die heldenhaft überwunden werden müssen. Ich werde Ihnen heute von einigen erzählen, und vielleicht sparen Sie dadurch ein wenig Zeit und Nerven.Der erste Witz: und die alte Frau ist ein Mistkerl oder sieh die Wurzel!
Ich bereite die Veröffentlichung der 0.14-Version des Systems für Arduino Due vor und werde diese Version an Power Monitor anpassen. Für diejenigen, die es nicht wissen, ist Power Monitor ein Software- und Hardwaresystem zur Überwachung der Stromversorgung, mit dem Sie den Pegel der Netzspannung und des Stromverbrauchs über 14 Kanäle steuern können. Es verfügt über eine integrierte Steuerung der Frequenz des Netzstroms und sogar über ein Netzwerkoszilloskop, das das Formular direkt auf der Webseite anzeigt Strom und Spannung in Echtzeit.
Ich habe die Schaltung zusammengebaut, alles überprüft, ausgeführt - es funktioniert nicht. Nun, es passiert, es ist üblich. Ich beginne den Code zu überprüfen - alles ist in Ordnung, die Hardware zu überprüfen - alles ist in Ordnung, die Verbindungen zu überprüfen - alles ist auch in Ordnung. In tiefen Gedanken setze ich mich auf einen Stuhl und beginne darüber nachzudenken, wo ein Fehler liegen könnte. Nach langem Überlegen komme ich zu dem Schluss, dass alles richtig gemacht wird. Warum funktioniert es nicht? Es gibt keine Wunder, also überprüfe ich alles ein zweites Mal.
Code, Hardware, Verbindungen. Alles scheint richtig zu sein. Ich denke wieder viel. Ich werde den Code noch einmal mit Sucht schaufeln - das Ergebnis ist Null. Da alle ambulanten Methoden erschöpft sind, übergebe ich den Patienten in die chirurgische Abteilung und nehme einen Tester und einen Lötkolben heraus. Der Patient sieht mich vorsichtig an, ist aber sprachlos und kann mir nichts sagen. Nach einigen Manipulationen stellt sich heraus, dass der Power Monitor überhaupt nicht mit Strom versorgt wird! Wie so? Stromversorgungsleiter sind deutlich sichtbar, aber kein Strom!Und dann wird mir klar, dass es Prototyping-Boards gibt, wie
ich sie normalerweise gesehen habe und an die ich gewöhnt war und die ich als die einzig möglichen betrachtete, aber es gibt solche (finde zehn Unterschiede, wie sie sagen)
und genau das ist mir dieses Mal begegnet. Es scheint eine Kleinigkeit zu sein und ist nur dann selbstverständlich, wenn Sie bereits davon wissen und wenn Sie es nicht wissen, können Sie sich den ganzen Kopf brechen, bis Sie herausfinden, warum Ihr Gerät nicht funktioniert.Es gibt noch einen psychologischen Punkt: Wenn Sie den Reifen für intakt halten, achten Sie nicht auf den Pass in der Markierung (Sie wissen nie, was der Hersteller zeichnen wollte). Diese Art von Witzen kommt manchmal in der Entwicklung vor - sehen Sie, wie sie sagen, bis zur Wurzel!Lustige Sekunde: Hallo von unserem geliebten Team arduino.cc
Wie gesagt, die Entwicklung ist in vollem Gange und AMS ist bereits zu einem ziemlich umfangreichen Projekt geworden, und es ist natürlich unmöglich, auf sehr nützliche Anweisungen zur bedingten Kompilierung im Projekt zu verzichten. Dies ist ein leistungsstarkes Code-Management-Tool, insbesondere da der Arduino Mega Server modular aufgebaut ist und Anweisungen zur bedingten Kompilierung verschiedene Module des Systems aktivieren und deaktivieren.#define
#ifdef
#endif
Dies geschieht, damit Sie die nicht benötigten Module deaktivieren und wertvollen Mikrocontrollerspeicher sparen können. Und ich habe mich in meiner Praxis (in verschiedenen Programmiersprachen) nicht getroffen, so dass die Anweisungen zur bedingten Kompilierung nicht funktionieren oder „fehlerhaft“ sind. Das ist Unsinn! Bis vor kurzem hielt ich es für unmöglich, aber die (lustigen) Entwickler der Arduino-Programmierumgebung lassen uns nicht langweilen, sondern das Wichtigste zuerst.Wir versuchen also, das Modul zu deaktivieren, das wir nicht benötigen, in diesem Fall das Modul für die Arbeit mit MajorDoMo (und dies hat bisher wie erwartet funktioniert).
Theoretisch alles zwischen Richtlinien#ifdef MAJORDOMO_FEATURE
...
#endif
sollte von der Kompilierung deaktiviert werden. Aber da war es!
#ifdef MAJORDOMO_FEATURE
char majorMegaObject[] = "ncMega01";
char majorCommObject[] = "comm_mega01";
byte MAJOR_IP[] = {192, 168, 2, 8};
int MAJOR_PORT = 80;
EthernetClient mclient;
void majordomoInit() {
initStart("MajorDoMo");
timeStamp();
Serial.print("Connect to MajorDoMo... ");
if (mclient.connect(MAJOR_IP, MAJOR_PORT)) {
Serial.println("OK");
mclient.println();
} else {
Serial.println("failed");
}
delay(200);
mclient.stop();
modulMajor = MODUL_ENABLE;
initDone();
}
…
Wie Sie sehen können, funktioniert die bedingte Kompilierung nicht nur nicht (es ist schlecht, aber sie ist noch nicht verschwunden), sondern sie funktioniert "so, wie Gott sie in Ihre Seele steckt", dh wo sie will - sie kompiliert, wo sie nicht will - sie funktioniert nicht Und das ist sehr schlimm, weil solche unvorhersehbaren "Pannen" sehr schwer zu fangen sind und zu völlig unvorhersehbaren Konsequenzen führen können.Dieser Artikel handelt übrigens von Arduino IDE Version 1.6.5. Aber anscheinend spielt die Version der Entwicklungsumgebung keine Rolle, sie sind alle ziemlich fehlerhaft. Was ich erst kürzlich gelernt habe, bis ich kleine Skizzen und kleine Projekte zusammengestellt habe, war alles in Ordnung.Der dritte Witz: wieder unser geliebter arduino.cc und ein absolut fantastischer Bug
Ich werde hier meiner Meinung nach lange Zeit keinen ungewöhnlichen Fehler im Compiler der Arduino-Umgebung beschreiben, aber ich werde den Code sofort geben, damit Sie dieses Wunder selbst schätzen können.Deklarieren Sie eine Variable:long errorsHttpSend = 0;
In der Schleife drucken wir:Serial.println(errorsHttpSend);
Ergebnis:808333615
Umbenennen durch Hinzufügen von 2:long errorsHttpSend2 = 0;
In der Schleife drucken wir:Serial.println(errorsHttpSend2);
Ergebnis:0
Es stellt sich die Frage: Wie kann die Entwicklung in einem solchen System durchgeführt werden? Hier können Sie auch die völlig unzureichende Arbeit verschiedener Versionen der Arduino IDE erwähnen. Code, der in einer Version der Umgebung hervorragend funktioniert, kann in einer anderen nicht kompiliert werden. Eine Umgebung kompiliert das Projekt, eine andere "sieht" eine der Bibliotheken nicht. Nach der Neuinstallation der Entwicklungsumgebung wird das Projekt von derselben Version 1.6.5 (die vor der Neuinstallation kompiliert wurde) nicht mehr kompiliert.Denken Sie also daran, was Sie bei der Arbeit mit Arduino tun müssen. Es gibt nur einen positiven Punkt: Mit einem solchen System werden Sie unabsichtlich ein Programmierguru und ein Meister der Systemadministration.Lassen Sie mich dem Arduino-Entwicklungsteam meinen Neujahrswunsch aussprechen: Sie sind unser Schatz! Wir wünschen Ihnen ein frohes neues Jahr und wünschen Ihnen, dass Sie im neuen Jahr eine normal funktionierende Entwicklungsumgebung veröffentlichen!Glückliches neues Jahr!
Freunde! Ich gratuliere Ihnen zum kommenden Jahr 2016 und hoffe, dass die Informationen in diesem Artikel Ihnen helfen werden, im neuen Jahr Zeit und Nerven zu sparen! Und erfolgreiche Entwicklung!PSTrotz aller Machenschaften von Feinden wird in naher Zukunft eine neue Version von Arduino Mega Server für Arduino Mega und Arduino Due mit vielen neuen Funktionen bei 0,14 veröffentlicht .Ergänzung . Ein Youtube-Kanal ist geöffnet und hier ist ein Promo-Video des Arduino Mega Servers, das zeigt, wie man mit einem realen System arbeitet.