Pages: [1] 2   Go Down
Author Topic: Basta la Ram ?  (Read 1008 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5789
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come si fa a capire se la ram disponibile sul micro e' sufficiente per un determinat sketch ?

C'e' un modo per controllare in realtime quanta se ne sta usando?
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5492
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con l'ide di arduino direttamente... non credo....
tramite AVR dude e AVR studio penso di si...
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21266
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come si fa a capire se la ram disponibile sul micro e' sufficiente per un determinat sketch ?
C'e' un modo per controllare in realtime quanta se ne sta usando?
Ti do una risposta fatalistica: quando incomincia ad impazzire Arduino viene usato troppa Ram.

Come dice ratto93
i programmi fanno una previsione ma durante il funzionamento non c'é un processo supervisore di uso RAM.

Ciao Uwe
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Esiste il comando avr-size, se ne era già parlato tempo fa. Fa un'analisi della memoria usata dallo sketch. E' discretamente valido per avere a grandi linee la quantità di Ram impegnata.
Logged


0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5789
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie a tutti (incluso l'uomo flame)  smiley
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Rome
Offline Offline
Full Member
***
Karma: 2
Posts: 176
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non basta mai la RAM....ehhhhhhhh se ci fosse solo un po' più di RAM quante belle cosette in più si potrebbero fare! smiley
Logged

OpenDomotica ...la domotica con Arduino - www.opendomotica.it

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5492
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non basta mai la RAM....ehhhhhhhh se ci fosse solo un po' più di RAM quante belle cosette in più si potrebbero fare! smiley
Puoi sempre passare a chip diversi.....
Al mega se non vuoi farti stanalone.... usare solo  il chip del mega (ATmega1280/2560) montato su tuo PCB o adattatore + il tuo PCB
oppure puoi usare chip come il mega 664p 40pin dip con flash e ram maggiorata oltre che più porte disponibili..
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vi spiego a grandi linee come funziona il comando avr-size, che fa parte del pacchetto binutils-avr.

Esso serve a determinare, una volta prodotto lo sketch compilato che viene caricato nella memoria flash del micro, il consumo di memoria sia Flash che Ram. Ovviamente non potrà determinare mai la dimensione di un array creato dinamicamente perché non si può sapere a priori quanti elementi il codice andrà ad inserire (se ad esempio dipende da quante volte l'utente premerà un dato pulsantino, avr-size non può leggere nel pensiero dell'utente e sapere quanti click farà  smiley-wink ).

Per usarlo, dovete compilare il vostro sketch premendo il pulsantino Compile, quello a forma di ">", contemporaneamente al tasto SHIFT, in modo che nella finestra di terminale dell'IDE in basso vediate la path di qual'è la cartella temporanea dove l'IDE sta lavorando.
Una volta che l'IDE vi dice "Done compiling", aprite un terminale in quella cartella e date avr-size nome_sketch.elf.
Vi verrà dato un riassunto della memoria usata dallo sketch. Per avere dati usabili dovete specificare il parametro -C, che serve a fornire un output già formattato con i dati in forma leggibile, ed il parametro --mcu=xxxx, che serve a specificare il micro target.

Facciamo un esempio. Usiamo il Blink.
Caricato nell'IDE, premo il tasto di compilazione col tasto shift ed ottengo nel terminale anche questo messaggio:

Code:
avr-objcopy -O ihex -R .eeprom /tmp/build8298356062385171079.tmp/Blink.cpp.elf /tmp/build8298356062385171079.tmp/Blink.cpp.hex

Ecco, quelle path indicano dove vengono creati i file temporanei. Adesso apriamo un terminale e spostiamoci in quella cartella:

Code:
cd /tmp/build8298356062385171079.tmp

Ora diamo il comando seguente (qui usiamo l'Atmega328):

Code:
avr-size -C --mcu=atmega328p Blink.cpp.elf

Ecco cosa risponde avr-size:

Code:
AVR Memory Usage
----------------                                                                                                                                            
Device: atmega328p
                                                                                                                                                            
Program:     990 bytes (3.0% Full)                                                                                                                          
(.text + .data + .bootloader)
                                                                                                                                                            
Data:          9 bytes (0.4% Full)                                                                                                                          
(.data + .bss + .noinit)

Il programma occupa 990 byte (il 3% della Flash disponibile) mentre i dati occupano solo 9 byte.
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21266
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Leo
ora é chiaro.
Ciao Uwe
Logged

0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5789
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il programma occupa 990 byte (il 3% della Flash disponibile) mentre i dati occupano solo 9 byte.
Grazie mille per l'esempio pratico, solo un chiarimento, per PROGRAMMA da 990byte si intende quanto il listato di Blink occupa in flash, e per DATI intendi quanta Ram serve a blink per il normale funzionamento ?

grazie ancora
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì.
Se provi a compilare lo sketch Blink, vedra che dopo che l'IDE ha dato il messaggio "Done compiling" scrive anche quanto spazio occupa lo sketch, che corrisponde proprio allo spazio dichiarato da avr-size (difatti l'IDE usa lo stesso comando).
In più, hai anche la SRAM impiegata dalle variabili e dallo stack del tuo programma.
Logged


0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5789
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi sarebbe sia facile che utile far scrivere oltre allo spazio anche la RAM dall'IDE Arduino.

se si prova a caricare un programma piu' grande della flash l'ide ti blocca giusto ? sarebbe utile che lo facesse anche sulla Ram.

in questo momento se io creo volutamente uno sketch che supera la quantita' di ram del 328, l'ide non blocca giusto ?
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esiste anche un comando che restituisce la ram occupata in real-time, ed è presente nella libreria FATlib(che a sua volta credo la peschi dalla libreria AVR), restituisce la RAM allocata al momento della chiamata, quindi è il valore reale istantaneo.

Sta a te piazzare il comando in quelli che credi essere i momenti di maggiore utilizzo.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5789
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bella questa, e potresti fare un esempio pratico come ha fatto leo ?
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.arduino.cc/playground/Code/AvailableMemory

l'ultimo metodo, composto da memoryfree.cpp, memoryfree.h e uno sketch di esempio
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1] 2   Go Up
Jump to: