Ich arbeite an einem Gruppen-Senior-Projekt für meine Universität und ich bin in eine große Hürde gerannt, als ich versuchte, meinen Code zum Laufen zu bringen.Wie können Sie C++ ausführen, wenn Ihr eingebetteter Compiler keine Operator-Neu- oder STL-Unterstützung hat?
Der Compiler, den wir für unseren 8-Bit-Atmel-Mikrocontroller haben, unterstützt die neuen oder löschenden Operatoren nicht, und er unterstützt die C++ - STL nicht. Ich könnte es in C programmieren, aber ich muss einen A * Algorithmus implementieren, den ich vorher noch nie gemacht habe. Während ich C anfangs ausprobiert habe, habe ich schnell gemerkt, dass ich noch nie reines C gemacht habe. Der Versuch, Objekte mit Strukturen und Funktionen zu modellieren, verlangsamt mich, da ich mich an die viel sauberere C++ - Syntax gewöhnt habe.
Egal, die genaue Wortlaut für meine Compiler Mängel ist hier zu finden: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus
sie zu überwinden und immer noch verwenden C++ Ich habe die folgenden Möglichkeiten in Betracht gezogen. 1) Ordnen Sie nichts zu, verwenden Sie einfach Vorlagen, um feste Arrays auf dem Stack zu generieren. 2) Zuordnen und finden Sie einen Hack, um den Konstruktor für Objekte aufzurufen, sobald ich den Platz für sie zugewiesen habe. Placement new ist keine Option, da new kein Operator ist. 3) Verwenden Sie einfach C und saugen Sie es auf, es ist ein Mikrocontroller, warum werde ich Lust bekommen? 4) Finden Sie einen besseren Compiler, der wahrscheinlich $$$ kosten wird.
Die zweite Option ist die härteste, aber es würde am meisten auszahlen, wie ich diesen Code schreiben kann. Ich stelle mir jedoch vor, dass das Debuggen ein großer Schmerz sein könnte, wenn ich falsch liege. Ich denke darüber nach, Objekte auf dem Stapel zu erstellen, ihre Bits in den zugewiesenen Bereich zu kopieren und dann die Bits im Objekt auf Null zu setzen, so dass es seinen Destruktor nicht aufruft. Dazu würde ich direkt auf die Bits mit einem vorzeichenlosen char-Zeiger und dem sizeof-Operator zugreifen, um die Bytezahl zu erhalten.
Das klingt schrecklich und ich weiß nicht, ob es zuverlässig funktionieren könnte, aber ich denke darüber nach. Ich weiß, dass VTables ein Problem sein können, aber ich habe nicht vor, irgendwelche VTables zu haben, da es nur ein 8-Bit-Mikrocontroller ist.
Wenn ich richtig die 8bit Atmels erinnern nicht genug RAM sogar darüber nachdenken, dynamischen Speicher a'la malloc/neu. – lothar
Wenn ich diese Operatoren überlasten kann, kann ich kontrollieren, woher der Speicher kommt. Es kann auf dem Heap oder dem Stapel sein. –
Ich fand heraus, dass ich nur 1KB zum Spielen hatte, was im Wesentlichen A * als einen brauchbaren Pfadfinder für meinen Roboter ausschloss. Ich benutze jetzt ein einfaches DFS, bis ich eines mit mehr RAM bekommen kann. –