@annonomus penguin, seguro que podemos Aunque el código se compila en 1180 bytes de flash + 13 bytes de RAM para uno en mi computadora, podemos mejorarlo :) así que aceptamos el desafío de golf y también algunos consejos útiles ya que estamos en el negocio de aprendizaje.
Paso 1: disminuir los requisitos variables. Usar un int para un puerto led parece un poco exagerado, ciertamente no tenemos 65535 puertos IO direccionables en el arduino :) Así que lo cambiamos a un byte solo por diversión. Lo cambiaremos a un #define más adelante, pero para mostrar el impacto de usar tipos de variables demasiado grandes.
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
}
Compila en 1172 bytes + 13 bytes de RAM. Esto ahorra 8 bytes de flash debido a menos operaciones necesarias para el byte en lugar de un entero. Esperaría 12 bytes de ram, pero está bien. No tanto, pero cada byte guardado es bueno.
Paso 2: cambie la variable a define cuando tenga sentido. Por ejemplo, el byte dirigido no es necesario, el pin no se soldará.
#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
}
Compila en 1142 bytes flash + 11 bytes ram. Ya se han guardado 38 bytes. Esto se debe a que se necesitan menos operaciones de registro para obtener el valor int. También guardamos 2 bytes de RAM. (Todavía me pregunto por qué el byte no se compiló en 1 byte menos de ram .....)
Paso 3: optimiza el código. Veo 2 retrasos. Me pregunto si lo cambio a 1 retraso, ahorraría espacio, pero tengo que calcular el valor del pin LED y alternarlo (invertirlo). Podemos hacer eso con digitalRead (), pero ¿ahorrará espacio?
#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
}
Compila en 1134 bytes + 11 bytes de ram. ¡Hurra! otros 8 bytes Eso hace un total de 46 bytes y 2 líneas de código menos.
También otro consejo general sobre la disminución del tamaño del código. No uses la clase String. Es ENORME, aprende a lidiar con matrices de caracteres, strcpy (), strcmp (). Si todo lo que tiene son algunas operaciones básicas de cadena, el uso de la clase String es principalmente desperdiciar espacio en flash y RAM.