@annonomus pinguim, com certeza podemos Embora o código seja compilado em 1180 bytes de flash + 13 bytes de RAM para uma unidade no meu computador, podemos aprimorá-la :) para que o desafio do golfe seja aceito e também algumas dicas úteis, pois estamos no negócio de Aprendendo.
Etapa 1: diminuir os requisitos variáveis. Usar um int para uma porta led parece um pouco exagerado, certamente não temos 65535 portas de E / S endereçáveis no arduino :) Portanto, alteramos para um byte apenas para diversão. Mudaremos para um #define mais tarde, mas para mostrar o impacto do uso de tipos de variáveis muito 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 em 1172 bytes + 13 bytes de RAM. Isso economiza 8 bytes de flash devido a menos operações necessárias para o byte, em vez de um número inteiro. Eu esperaria 12 bytes de ram, mas tudo bem. Não muito, mas cada byte salvo é bom.
Etapa 2: alterar a variável para define quando faz sentido. Por exemplo, o byte liderado não é necessário, o pino não será dessoldado.
#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 em 1142 bytesflash + 11 bytes de ram. Já 38 bytes salvos. Isso ocorre devido a menos operações de registro necessárias para buscar o valor int. Também salvamos 2 bytes da RAM. (ainda me perguntando por que o byte não foi compilado em menos 1 byte de ram .....)
Etapa 3: otimizar o código. Eu vejo dois atrasos. Gostaria de saber se eu alterá-lo para 1 atraso economizaria espaço, mas eu tenho que descobrir o valor do pino de LED e alternar (inverter). Podemos fazer isso com digitalRead (), mas isso economizará espaço?
#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 em 1134 bytes + 11 bytes de RAM. Yay! outros 8 bytes. Isso totaliza 46 bytes e menos 2 linhas de código.
Também outra dica geral sobre como diminuir o tamanho do código. Não use a classe String. É ENORME, aprenda a lidar com matrizes de caracteres, strcpy (), strcmp (). Se tudo o que você tem são algumas operações básicas de string, o uso da classe String está apenas desperdiçando espaço no flash e na RAM.