Sto lavorando a un progetto di gruppo per la mia università e mi sono imbattuto in un ostacolo importante nel tentativo di far funzionare il mio codice.Come si può fare C++ quando il compilatore incorporato non ha l'operatore new o il supporto STL?
Il compilatore che abbiamo per il nostro microcontrollore Atmel a 8 bit non supporta gli operatori new o delete e non supporta il C++ STL. Potrei programmarlo in C, ma devo implementare un algoritmo A * che non ho mai fatto prima. Mentre ho provato C inizialmente ho capito subito che non avevo mai fatto C pura prima. Cercare di modellare gli oggetti con le strutture e le funzioni mi rallenta perché sono così abituato alla sintassi C++ molto più pulita.
Indipendentemente da ciò, la dicitura esatta per le mie mancanze compilatori può essere trovato qui: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus
Per superarli e utilizzare ancora C++ ho preso in considerazione le seguenti possibilità. 1) Non allocare nulla, basta usare i modelli per generare array fissi nello stack. 2) Assegna e trova qualche trucco per chiamare il costruttore per gli oggetti dopo aver assegnato loro lo spazio. Il posizionamento nuovo non è un'opzione in quanto nuovo non è un operatore. 3) Basta usare C e succhiarlo, è un microcontrollore, perché mi sto immaginando? 4) Trova un compilatore migliore che probabilmente costa $.
La seconda opzione è la più difficile, ma sarebbe la più grande ricompensa in termini di come posso scrivere questo codice. Tuttavia, immagino che il debugging potrebbe essere un enorme problema se mi sbaglio. Sto pensando di creare oggetti sullo stack, copiare i loro bit nello spazio allocato e quindi azzerare i bit nell'oggetto in modo che non chiami il suo distruttore. Per farlo, avrei accesso ai bit direttamente con un puntatore char senza segno e con l'operatore sizeof per ottenere il conteggio dei byte.
Sembra terribile e non so se potrebbe funzionare in modo affidabile, ma ci sto pensando. So che i vtables possono essere un problema, ma non intendo avere vtables dato che è solo un microcontrollore a 8 bit.
Se ricordo bene gli Atomici a 8 bit non hanno abbastanza ram per pensare anche alla memoria dinamica a'la malloc/new. – lothar
Se riesco a sovraccaricare questi operatori, posso controllare da dove proviene la memoria. Può essere nell'heap o nello stack. –
Ho scoperto che avevo solo 1KB con cui giocare, il che essenzialmente escludeva A * come un percorso percorribile per il mio robot. Ora sto usando un DFS semplice fino a quando non ne ottengo uno con più RAM. –