Qualche giorno fa mi sono imbattuto a dover eseguire dei programmi per AVR da una MicroSD.
Ho scritto una semplice libreria, che ho chiamato SBI (Small Bytecode Interpreter), la trovate su SourceForge a questo indirizzo: https://sourceforge.net/projects/sbi-int/.
Ho poi interfacciato il tutto con la libreria Petit FatFs http://elm-chan.org/fsw/ff/00index_p.html per leggere i file della MicroSD.
Il progetto è composto principalmente da un compilatore (compila un linguaggio chiamato SASM che è una sottospecie di assembly/basic/batch) e da un'interprete compilabile per differenti piattaforme.
Fino ad ora funziona tutto a meraviglia, anche se la velocità con cui il programma viene interpretato non è fantastica...
Dato che la libreria è "Platform-Indipendent" (c'è anche l'esempio per Windows), ho messo la possibilità di assegnare (in fase di compilazione dell'interprete) delle funzioni utente, richiamabili dal programma (con vari parametri - fino a 8).
Volevo sapere (tempo permettendo) i pareri di qualcuno su questo mio progetto, in particolare se il lavoro che ho fatto finora può essere sufficiente per creare dei programmi sensati che fanno qualcosa di veramente utile.
Non è necessario che testiate la libreria, mi basta solo sapere se secondo voi le istruzioni che ho messo a disposizione possono portare a qualcosa di concreto. Io finora sono riuscito a far lampeggiare un led aumentando e diminuendo progressivamente la velocità... non mi sembra molto...
Grazie a tutti in anticipo
Eseguire programmi da MicroSD su ATmega
Moderatore: Paolino
43 messaggi
• Pagina 1 di 5 • 1, 2, 3, 4, 5
1
voti
Senza entrare nel merito della tua lodevole realizzazione (che non posso non apprezzare), mi piacerebbe saper quale è lo scopo di tutto questo.
Te lo chiedo perché in passato ho realizzato qualcosa di simile per uso personale con lo scopo si rendere semplici le modifiche al firmware.
Vent' anni fa realizzavo apparecchiature di collaudo che erano soggette a continue modifiche ed adattamenti. I PC erano lenti come mucche, ricompilare i programmi voleva dire passare ore ad aspettare e l' idea di usare un linguaggio semicompilato, modificabile sul posto tramite un terminale e verificabile al momento aveva un senso.
Devo ammettere che oggi provo ancora il desiderio di fare qualcosa del genere ma, onestamente, non ne vedo lo scopo anche perché di sistemi analoghi o comunque sostitutivi ne esistono a bizzeffe.
Usando microcontrollori con architettura Von Neumann, come ad esempio gli ARM (anche quelli piccoli), si possono scrivere programmi che verranno eseguiti in RAM, in modo semplice e senza bisogno di interprete. Inutile dire che la velocità di esecuzione non è assolutamente comparabile con quella di un AT-mega che interpreta.
Quindi ci deve essere un motivo che potrebbe anche solo essere di studio, di sperimentazione, soddisfazione personale o di chissà cosa.
Mi piacerebbe sapere quale è questo motivo, sempre se hai voglia di dirmelo.
Te lo chiedo perché in passato ho realizzato qualcosa di simile per uso personale con lo scopo si rendere semplici le modifiche al firmware.
Vent' anni fa realizzavo apparecchiature di collaudo che erano soggette a continue modifiche ed adattamenti. I PC erano lenti come mucche, ricompilare i programmi voleva dire passare ore ad aspettare e l' idea di usare un linguaggio semicompilato, modificabile sul posto tramite un terminale e verificabile al momento aveva un senso.
Devo ammettere che oggi provo ancora il desiderio di fare qualcosa del genere ma, onestamente, non ne vedo lo scopo anche perché di sistemi analoghi o comunque sostitutivi ne esistono a bizzeffe.
Usando microcontrollori con architettura Von Neumann, come ad esempio gli ARM (anche quelli piccoli), si possono scrivere programmi che verranno eseguiti in RAM, in modo semplice e senza bisogno di interprete. Inutile dire che la velocità di esecuzione non è assolutamente comparabile con quella di un AT-mega che interpreta.
Quindi ci deve essere un motivo che potrebbe anche solo essere di studio, di sperimentazione, soddisfazione personale o di chissà cosa.
Mi piacerebbe sapere quale è questo motivo, sempre se hai voglia di dirmelo.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-
TardoFreak
73,8k 8 12 13 - -EY Legend-
- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Lo scopo...?
Beh è da tanto che ho in mente un progetto basato su AVR, in particolare un "orologio" con LCD da 1.8'', RTC, MicroSD e ATmega328 come CPU. Volevo mettere la possibilità di eseguire "app" da scheda SD, senza dover caricare le applicazioni in Flash (che poi sarebbero sempre quelle, a meno che non aggiorno costantemente il firmware).
Certo, oltre a questo progetto... c'è la soddisfazione!
Poi ho visto che comunque non sono in pochi che cercano di far funzionare programmi su AVR da SD, EEPROM, Flash esterne o altri tipi di memoria... quindi ho pensato che questa libreria potesse tornare utile a qualcuno in futuro.
Giusto come hai detto tu, con l'architettura Von Neumann basta caricare il tutto in RAM e cambiare l'indirizzo per eseguire i programmi, dato che memoria programma e RAM si trovano sullo stesso bus, mentre nella Harvard (utilizzata negli ATmega) questo non è possibile, dato che la Flash dove risiede il programma e la RAM sono su due bus distinti.
Certo, avrei potuto basare il mio progetto su un ARM o su un PIC32, ma non l'ho fatto principalmente per due motivi:
- Avrei dovuto imparare a programmare un'altra famiglia di microcontrollori
- Che divertimento ci sarebbe ad avere già la pappa pronta?
Beh è da tanto che ho in mente un progetto basato su AVR, in particolare un "orologio" con LCD da 1.8'', RTC, MicroSD e ATmega328 come CPU. Volevo mettere la possibilità di eseguire "app" da scheda SD, senza dover caricare le applicazioni in Flash (che poi sarebbero sempre quelle, a meno che non aggiorno costantemente il firmware).
Certo, oltre a questo progetto... c'è la soddisfazione!
Poi ho visto che comunque non sono in pochi che cercano di far funzionare programmi su AVR da SD, EEPROM, Flash esterne o altri tipi di memoria... quindi ho pensato che questa libreria potesse tornare utile a qualcuno in futuro.
Giusto come hai detto tu, con l'architettura Von Neumann basta caricare il tutto in RAM e cambiare l'indirizzo per eseguire i programmi, dato che memoria programma e RAM si trovano sullo stesso bus, mentre nella Harvard (utilizzata negli ATmega) questo non è possibile, dato che la Flash dove risiede il programma e la RAM sono su due bus distinti.
Certo, avrei potuto basare il mio progetto su un ARM o su un PIC32, ma non l'ho fatto principalmente per due motivi:
- Avrei dovuto imparare a programmare un'altra famiglia di microcontrollori
- Che divertimento ci sarebbe ad avere già la pappa pronta?
0
voti
Grazie per la risposta.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-
TardoFreak
73,8k 8 12 13 - -EY Legend-
- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Prego
Secondo te potrebbe essere effettivamente utile?
Hai qualche semplice (o anche complesso) programma per "metterlo alla prova"? Per esempio qualche programma già scritto in C (o anche solo un problema da risolvere) che posso tradurre nel mio linguaggio? Se riuscissi a far funzionare qualche programma con utilità concreta, non sarebbe mica male
Ho a disposizione tutte le funzioni di I/O del micro, le funzioni tipo '_delay_ms' o altre funzioni (scritte da me e non)... ma per ora niente interrupt
Secondo te potrebbe essere effettivamente utile?
Hai qualche semplice (o anche complesso) programma per "metterlo alla prova"? Per esempio qualche programma già scritto in C (o anche solo un problema da risolvere) che posso tradurre nel mio linguaggio? Se riuscissi a far funzionare qualche programma con utilità concreta, non sarebbe mica male
Ho a disposizione tutte le funzioni di I/O del micro, le funzioni tipo '_delay_ms' o altre funzioni (scritte da me e non)... ma per ora niente interrupt
0
voti
giacky98 ha scritto:...Secondo te potrebbe essere effettivamente utile?...
A livello di studio è sicuramente un ottimo esercizio. Lo sarebbe ancora di più se avesse la possibilità di eseguire più programmi contemporaneamente. Trattandosi di un interprete non dovrebbe essere eccessivamente complicato.
Non hai detto se il programma lo esegui leggendolo direttamente dalla SD (cosa sconsigliabile) o se lo trasferisci su una memoria temporanea a cui accedervi velocemente (ad esempio una RAM SPI).
Per quanto riguarda i programmi beh, in 30 anni ne ho scritti parecchi ma nessuno di questi si presta ad essere eseguito con sistemi tipo questo, tutti sono fortemente legati all' hardware e richiedono potenza dal micro.
Come ti ho accennato all' inizio ho usato anch' io questo sistema per questioni di velocità di modifica sul campo (il processore era un 6303, famiglia 6800) ma non ha poi avuto seguito. Oggi ho visto che si fa prima a scrivere direttamente il programma in C, sopratutto se muniti di un ricca libreria di funzioni, drivers e snippets di codice.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-
TardoFreak
73,8k 8 12 13 - -EY Legend-
- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
TardoFreak ha scritto:Non hai detto se il programma lo esegui leggendolo direttamente dalla SD (cosa sconsigliabile) o se lo trasferisci su una memoria temporanea a cui accedervi velocemente (ad esempio una RAM SPI).
No no, non lo leggo direttamente (sarebbe troppo lento!).
Uso un buffer di lettura di 32 bytes (si può anche ridimensionare a piacimento), in modo da leggere 32 bytes alla volta (tenendoli nella RAM del micro). Infatti con la libreria Petit FatFs è più rapido a leggere più bytes consecutivi che un byte alla volta.
0
voti
Io parlavo di un buffer un po' più corposo. Una memorietta come [urlhttp://ww1.microchip.com/downloads/en/devicedoc/22100c.pdf]QUESTA[/url] la colleghi con gran facilità al micro, puoi far funzionare la SPI a gran velocità (fina a 20MHz) ed avresti un buffer di 32KB su cui caricarci l' intero programma (o parte di esso) e farlo eseguire.
E costa pochissimo.
Scusami se mi permetto di suggerirti qualcosa ma ripeto, questo sarebbe uno di quei progetti che avrei sempre voluto fare per la sola soddisfazione personale. Di tanto in tanto mi verrebbe voglia, solo che la voglia arriva ma scappa subito.
E costa pochissimo.
Scusami se mi permetto di suggerirti qualcosa ma ripeto, questo sarebbe uno di quei progetti che avrei sempre voluto fare per la sola soddisfazione personale. Di tanto in tanto mi verrebbe voglia, solo che la voglia arriva ma scappa subito.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-
TardoFreak
73,8k 8 12 13 - -EY Legend-
- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
TardoFreak ha scritto:Scusami se mi permetto di suggerirti qualcosa:
perché scusarsi? Anzi, meglio se ottengo suggerimenti, dopotutto ho aperto questo Topic per questo
Comunque, per il mio progetto, non ho bisogno di così tanta memoria (anche perché volevo tenere l'hardware minimo) e del multitasking, ma la libreria permette di utilizzare facilmente una memoria esterna senza modificare la libreria stessa.
Per il multitasking... non so come procedere.
Diciamo che se avessi tutti i programmi caricati in RAM non sarebbe un problema, ma se carico i programmi a blocchi di 32 byte... non so come caricarne più di uno. Anche perché con la libreria Petit FatFs non è possibile tenere aperti più file contemporaneamente, ci vorrebbe la FatFs (quella completa) che però occuperebbe troppa flash e RAM.
In questi giorni mi verrà in mente sicuramente una soluzione per il multitasking, che probabilmente implementerò a partire dalla versione 0.3 o 0.4 (ho un paio di fix da fare prima).
Comunque, grazie mille per i consigli
0
voti
Se il tuo bytecode è semicompilato il multitasking diventa complicato, se è completamente interpretato hai di sicuro un registro che punta all' istruzione da interpretare (chiamiamolo program counter) ed uno stack software per le chiamate a subroutines (l' hai implementato vero?).
Nulla ti vieta di avere più program counter (uno per ogni task) e far interpretare un' istruzione al primo task, poi un' istruzione al secondo ... e così via.
Nulla ti vieta di avere più program counter (uno per ogni task) e far interpretare un' istruzione al primo task, poi un' istruzione al secondo ... e così via.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-
TardoFreak
73,8k 8 12 13 - -EY Legend-
- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
43 messaggi
• Pagina 1 di 5 • 1, 2, 3, 4, 5
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti