colgo il suggerimento di guglielmo e apro un apposito post, così ci divertiamo un pò.
premetto che non sono un luminare, ma un pò di roba l'ho fatta: metto disposizione quello che e magari qualcun'altro, mette disposizione il suo. vediamo cosa esce fuori.
prologo: l'ambiente di arduino si appoggia cmq su avrlib e altre strutture software di atmel, che sono generalmente utilizzate nel loro ambiente di programmazione principe, quale è avrstudio.
grazie queste caratteristiche è possibile programmare arduino (o meglio, gli atmega) in tre maniere diverse:
1) arduinesca classica (setup, loop)
2) in bare metal e magari anche con classici main e while(1)
3) in maniera ibrida, ovvero mescolando le due di cui sopra
in questo thread ci interessiamo delle ultime due, ovvero in bare metal, e in quella "mescolata" dove possiamo raggiungere una migliore efficienza di codice (risparmio di ram e di flash, e ovviamente, aumento della velocità di esecuzione) insieme librerie che facilitano la stesura (non sempre è ragionevole scrivere in bare metal, quindi ci facciamo andare bene le libbrerie arduinesche)
premetto che non sono un luminare, ma un pò di roba l'ho fatta: metto disposizione quello che e magari qualcun'altro, mette disposizione il suo. vediamo cosa esce fuori.
prologo: l'ambiente di arduino si appoggia cmq su avrlib e altre strutture software di atmel, che sono generalmente utilizzate nel loro ambiente di programmazione principe, quale è avrstudio.
grazie queste caratteristiche è possibile programmare arduino (o meglio, gli atmega) in tre maniere diverse:
1) arduinesca classica (setup, loop)
2) in bare metal e magari anche con classici main e while(1)
3) in maniera ibrida, ovvero mescolando le due di cui sopra
in questo thread ci interessiamo delle ultime due, ovvero in bare metal, e in quella "mescolata" dove possiamo raggiungere una migliore efficienza di codice (risparmio di ram e di flash, e ovviamente, aumento della velocità di esecuzione) insieme librerie che facilitano la stesura (non sempre è ragionevole scrivere in bare metal, quindi ci facciamo andare bene le libbrerie arduinesche)
partiamo dal blink:
blink classico:
sketch uses 1.116 bytes (3%) of program storage space. maximum 32.256 bytes.
global variables use 11 bytes (0%) of dynamic memory, leaving 2.037 bytes local variables. maximum 2.048 bytes
in bare metal:
sketch uses 692 bytes (2%) of program storage space. maximum 32.256 bytes.
global variables use 9 bytes (0%) of dynamic memory, leaving 2.039 bytes local variables. maximum 2.048 bytes.
notare che l'impiego di flash è quasi dimezzato e si risparmia anche ram. non ci portiamo dietro tutto il dinosauro morto di arduino, ma solo la struttura del setup(), del loop() e il delay() (che non è fatto malissimo).
blink classico:
code: [select]
/*
blink
turns on led on 1 second, off 1 second, repeatedly.
example code in public domain.
*/
// pin 13 has led connected on arduino boards.
// give name:
int led = 13;
// setup routine runs once when press reset:
void setup() {
// initialize digital pin output.
pinmode(led, output);
}
// loop routine runs on , on again forever:
void loop() {
digitalwrite(led, high); // turn led on (high voltage level)
delay(1000); // wait second
digitalwrite(led, low); // turn led off making voltage low
delay(1000); // wait second
}
sketch uses 1.116 bytes (3%) of program storage space. maximum 32.256 bytes.
global variables use 11 bytes (0%) of dynamic memory, leaving 2.037 bytes local variables. maximum 2.048 bytes
in bare metal:
code: [select]
void setup()
{
ddrb = 0b00100000; // pb5=d13 setto l'uscita pb5 (d13) come uscita
}
void loop()
{
portb = 0b00100000;
delay(1000);
portb = 0b00000000;
delay(1000);
}
sketch uses 692 bytes (2%) of program storage space. maximum 32.256 bytes.
global variables use 9 bytes (0%) of dynamic memory, leaving 2.039 bytes local variables. maximum 2.048 bytes.
notare che l'impiego di flash è quasi dimezzato e si risparmia anche ram. non ci portiamo dietro tutto il dinosauro morto di arduino, ma solo la struttura del setup(), del loop() e il delay() (che non è fatto malissimo).
Arduino Forum > International > Italiano > Generale (Moderator: leo72) > [Advanced] Programmazione Arduino in Bare Metal
arduino
Comments
Post a Comment