@annonomus pingouin, bien sûr que nous pouvons Bien que le code compile en 1180 octets flash + 13 octets de RAM pour un uno sur mon ordinateur, nous pouvons l'améliorer :) donc défi de golf accepté et aussi quelques conseils utiles puisque nous sommes dans le métier de apprentissage.
Étape 1: diminuez les exigences variables. Utiliser un int pour un port led semble un peu exagéré, nous n'avons certainement pas 65535 ports IO adressables sur l'arduino :) Nous le changeons donc en octet juste pour le plaisir. Nous le changerons plus tard en #define, mais pour montrer l'impact de l'utilisation de types de variables trop grands.
byte led = 13;
int val;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
blink();
val = digitalRead(10);
}
void blink() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Compile en 1172 octets + 13 octets de RAM. Cela permet d'économiser 8 octets de flash en raison d'un nombre réduit d'opérations nécessaires pour l'octet au lieu d'un entier. Je m'attendrais à 12 octets de RAM, mais d'accord. Pas tant que ça, mais chaque octet enregistré est bon.
Étape 2: changez la variable en définit quand cela a du sens. Par exemple, l'octet mené n'est pas nécessaire, la broche ne se dessoudera pas.
#define LED 13
int val;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
blink();
val = digitalRead(10);
}
void blink() {
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Compile en 1142 octetsflash + 11 octets de RAM. Déjà 38 octets enregistrés. Cela est dû à moins d'opérations de registre nécessaires pour récupérer la valeur int. Nous avons également enregistré 2 octets de RAM. (se demandant toujours pourquoi l'octet n'a pas été compilé en 1 octet de moins de ram .....)
Étape 3: optimisez le code. Je vois 2 retards. Je me demande si je le change en 1 retard, cela économiserait de l'espace, mais je dois déterminer la valeur de la broche LED et la basculer (inverser). Nous pouvons le faire avec digitalRead (), mais cela économisera-t-il de l'espace?
#define LED 13
int val;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
blink();
val = digitalRead(10);
}
void blink() {
digitalWrite(LED, !digitalRead(LED)); // toggle the led based on read value
delay(1000); // wait for a second and spare yourself the other delay
}
Compile en 1134 octets + 11 octets de RAM. Yay! encore 8 octets. Cela fait un total de 46 octets et 2 lignes de code en moins.
Un autre conseil général sur la diminution de la taille des codes. N'utilisez pas la classe String. C'est ÉNORME, apprenez à gérer les tableaux de caractères, strcpy (), strcmp (). Si vous n'avez que quelques opérations de base sur les chaînes, l'utilisation de la classe String ne fait que gaspiller de l'espace à la fois sur le flash et la RAM.