Domanda:
È possibile eseguire un binario da EEPROM?
Zeb McCorkle
2014-08-18 06:19:17 UTC
view on stackexchange narkive permalink

Diciamo che ho scritto uno schizzo compilato su EEPROM e poi lo leggo. Posso eseguire il programma da EEPROM? Immagino che la domanda sia: un Arduino può eseguire software non presente nella memoria flash durante l'esecuzione del software in flash?

Due risposte:
#1
+7
BrettAM
2014-08-18 09:38:00 UTC
view on stackexchange narkive permalink

Risposta breve: no; Dalla scheda tecnica di atmega328 (sebbene si applichi a tutti gli AVR):

L'AVR utilizza un'architettura Harvard - con memorie e bus separati per programmi e dati. Le istruzioni nella memoria del programma vengono eseguite con una pipeline a livello singolo. Mentre un'istruzione viene eseguita, l'istruzione successiva viene precaricata dalla memoria del programma

...

Lo spazio di memoria Flash del programma è diviso in due sezioni, la sezione Programma di avvio e la sezione Programma applicativo. Entrambe le sezioni hanno bit di blocco dedicati per la protezione da scrittura e lettura / scrittura. L'istruzione SPM che scrive nella sezione della memoria Flash dell'applicazione deve risiedere nella sezione del programma di avvio

La sua architettura impedisce l'utilizzo della memoria del programma esterno, ma è possibile caricare qualsiasi cosa nella memoria del programma all'avvio. A quel punto mi azzarderei a dire che stai solo programmando AVR e non arduino, dal momento che dovresti sostituire il bootloader arduino e interrompere la capacità dell'IDE di arduino di caricare programmi.

In alternativa potresti anche usare un emulatore o interprete di qualche lingua intermedia; fondamentalmente codice che esegue ed esegue altro codice. Come regola generale, un emulatore funziona circa 8 volte più lentamente.

Ci sono microcontrollori di altre marche che supportano questa funzionalità, so che un paio di PIC diversi lo fanno.

#2
+5
Ignacio Vazquez-Abrams
2014-08-18 09:26:46 UTC
view on stackexchange narkive permalink

No. Il fondamento di un ' architettura Harvard come AVR è di consentire l'esecuzione solo del codice che esiste nello spazio del programma e la EEPROM non è nello spazio del programma. È possibile, tuttavia, scrivere una macchina virtuale che verrà eseguita da flash. Questa VM può quindi leggere i dati del programma da qualsiasi luogo e agire in base ad essi.

+1. Si noti che alcuni MCU utilizzano un'architettura Harvard modificata che consente alla CPU di leggere / scrivere dati nello spazio del programma, quindi è possibile copiare il codice dalla RAM alla ROM ed eseguirlo come un codice auto-modificante
Per la VM, tutto ciò che dovresti fare è ottenere il C ++ compilato, controllare la EEPROM per quale istruzione eseguire ed eseguire quell'istruzione. Ovviamente, eseguirlo nativity sul chip sarebbe molte volte più veloce e non è un compito facile, ma sarebbe un progetto divertente imparare cose di livello inferiore sul 328P ...
Sì, ma se hai intenzione di farlo, potresti anche eseguire qualcosa di divertente come Forth o Python.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...