Aggiungere SRAM

Sto leggendo che è possibile aggiungere RAM esterna e far sì che il uC la "unisca" alla SRAM interna, in modo da avere più spazio per variabili, heap, stack.
http://www.nongnu.org/avr-libc/user-manual/malloc.html

Ma ciò si può fare anche con l'IDE di Arduino o per forza di cose bisogna usare AVRstudio? Che, tra l'altro, mi pare che per Linux non ci sia, giusto?

Uhm.. mi sono accorto che è l'Atmega128... mi sa che (a parte il package) non sia la stessa cosa dell'168/328...

Quanto io sappi no, non in modo che venga ampiato la RAM interna.
Puoi usare una RAM esterna per memorizzare dati come anche una scheda SD. Se scegli una RAm ti consiglio una FRAM della RAMTron tipo FM25256B; ti serve anche una schedina adattatore da smd a dip.
Ciao Uwe

A me serviva per quel mio progettino.... non per salvarci dati ma per usarla come video buffer.
Cmq ho trovato qualcos'altro... http://www.lucidscience.com/pro-video%20game.aspx

Uhm.. mi sono accorto che è l'Atmega128... mi sa che (a parte il package) non sia la stessa cosa dell'168/328...

L'avevo già letto ma dal momento che non mi interessava esterdere la memoria l'ho letto di corsa.

La differenza tra il 128 e il 328 sembra solo essere il numero di porte a disposizione più qualcosa sul timer2, non ricordo altro.

In nongnu si dice che l'importante che lo stack rimanga in memoria interna e l'heap in sram esterna.
Ho capito come modificare le macro ma non ho capito come realizzare l'estenzione tramite hardware.

Mi sembra interessante.
Ciao resto in ascolto.

Quel progetto che ho linkato aggiunge della SRAM esterna al chip ad una scheda contenente un Atmega128. Perché? Perché in questa maniera la memoria usabile può arrivare fino a 64 kB, il max gestibile dal 128.
A che serve? Pensate al fatto che in tale memoria sono immagazzinate tutte le variabili create dal vostro programma.... se fosse possibile anche sull'Atmega328... slurp :stuck_out_tongue:

se fosse possibile anche sull'Atmega328... slurp

Il problema per il 328 è che ha poche porte digitali, mi pare ne servano 2 per indirizzare ram esterna.

Diversamente si potrebbe pensare ad usare ram seriale o i2c, rimane da capire come fare vedere questi nuovi indirizzi a "malloc", si dovrebbe fare un gestore software, mentre più semplice se la ram esterna viene gestita con accesso sequenziale, l'accesso casuale con allocazione dinamica richiede malloc.

Tutti i micro possono gestire ram esterna ma NON possono eseguire codice su questa ram esterna, ammeno di non inventarsi la paginazione simil kernel linux, la ram esterna la immagini come partizione di swap.

Ciao.

Allora è come è stato detto: solo l'Atmega128 può gestire RAM esterna, è scritto sul suo datasheet esplicitamente che può appunto indirizzare fino a 64 KB di memoria aggiuntiva.
Ovviamente è RAM per le variabili, non per il programma. Si può usare con Malloc, spostarci lo stack ma non usarla per i programmi.

solo l'Atmega128 può gestire RAM esterna, è scritto sul suo datasheet esplicitamente che può appunto indirizzare fino a 64 KB di memoria aggiuntiva.

Non ho il datasheet sotto mano se è scritto così, ma lucidscience usa il ATMega644. C'è da studiare i datasheet per capire perchè 128 e 644 possono usare memoria esterna.

In genere tutti i micro che hanno pin sufficienti possono gestire ram esterna, rimane da capire se alcuni prevedono questo ampliamento nativamente e altri no, comunque il 328 di suo ha il limite fisico delle porte.

Si può usare con Malloc, spostarci lo stack ma non usarla per i programmi.

In nognu mi pare di aver capito che è meglio spostarci lo heap, lasciado lo stack sulla memoria interna.

Onestamente sto studiando un mare di cose tutte diverse e non me la sento di studiare pure il 128.

Se scopri qualcosa in merito alla gestione esterna nativa postala, così una volta per tutte si stabilisce qual'è il limite per il 328, se la mancanza di pin o altro.

Da qualche parte ho letto che il micro può eseguire solo istruzioni che risiedono in ram interna, si diceva che è sempre possibile spostare l'istruzione dall'esterna a quella interna poco prima dell'esecuzione però le prestazione peggiorano. Ora dove l'ho letto non lo ricordo se me lo trovo davanti lo posto.

Domandona? [OT]
Perchè deve essere proprio il 328 e non il mega oppure una board con il 128 o altro più adatto, a me fà tanto gola questa board http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1264932579/90#90 post 86, quel tipo dice di usare l'ide arduino anche con quella board.

Ciao.

Aspetta un attimo.
Io parlo di ampliare la SRAM, non parlo di "usare" della RAM esterna.
Un Atmega può usare della RAM esterna: puoi mettere un paio di convertitori seriale/parallelo per indirizzare una RAM parallela e un convertitore parallelo/seriale per leggere i dati, questo si può facilmente fare.

Quello che intendevo io era proprio ampliare, nel senso di "aggiungere" della memoria alla SRAM dell'Atmega. In questo modo si lasciava il compito di gestire la RAM all'Atmega stesso, che la vedeva come una SRAM interna di grandi dimensioni. Ecco la bellezza del 128, che ha appunto un bus esterno per pilotare tale memoria. Il 328, invece, non ha questo bus per cui non puoi far usare al uC espansioni di memoria.

PS:
a quale scheda ti riferisci? Non ho trovato il link.