A tippek NEM C, és nem ASM irányba mutassanak!
Csak standard Arduino tippek számítanak!
Bár még messze jároka 40-41-es leckétől, és nem tudom a pontos tartalmát, azért elkezdem az ötletelést:Robert írta:Hogyan legyen kisebb az Arduino kódunk?
A tippek NEM C, és nem ASM irányba mutassanak!
Csak standard Arduino tippek számítanak!
(Mivel Robert kérte, hogy csak Arduino specifikus dolgokról írjunk, ezért szándékosan csak az Arduino SDK-ban szereplő numerikus egész típusokat soroltam fel)byte 1 bájt 0-255
word 2 bájt 0-65535
unsigned int 2 bájt 0-65535
int 2 bájt -32768 - 32767
long 4 bájt -2147483648 - 2147483647
unsigned long 4 bájt 0 - 4294967295
Robert írta:Hogyan legyen kisebb az Arduino kódunk?
Éppen ezért írtam, csak az Arduino SDK-ban elérhető adattípusokat. Nem kezdős C-sként a határ a csillagos ég lenne (na jó nemRobert írta:Arduino keretrendszer alatt vagyunk, kezdőként.
Lehet pontatlan voltam, de erre gondoltam én is. A keretrendszer kódjába piszkálni, amúgy sem ajánlatos, mert új verzió esetén csak nézhetünk...A header az rendszerszintű, azaz kezdőként "nem nyúlka-piszka".
Maximum ott, hogy feleslegesen külső függvénykönyvtárakat ne linkeljünk a programunk elején.
Gondolom a setup/loop részek melőzését, akkor már ne is említsem?- Ismétlődő programrészeket függvényekbe szervezni
- változók újrafelhasználása
Bocsi, de most muszáj lesz elrugaszkodnom a "kezdőként" feltételtől....Robert írta:setup() és loop() nélkül nem fordul le a kód.
A main() függvényt simán felül tudod deklarálni. Példaként a BLINK példaprogram lefordítva 896 byte nálam. Ugyanezt átírva loop() és setup() nélkül 880 byte:#include <WProgram.h>
int main(void)
{
init(); //Arduino framework saját initje
setup(); //Itt hívja a te setup() eljárásod
for ( ; ; )
loop(); //Itt pedig a loop eljárásod hívja végtelen ciklusban
return 0;
}
Próbáld lefordítani...
int ledPin = 13; // LED connected to digital pin 13
int main(void) {
init(); //Ez fontos!!! Arduino saját init-je
/****************************
* Ide írom a setup() részt *
****************************/
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
/***************************************
* Végtelen ciklusba pedig a loop()-ot *
***************************************/
while(1) {
digitalWrite(ledPin, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(1000); // wait for a second
}
}
Azért azt is leírhatnád, hogy az eredeti blink példaprogram hány bájt nálad. Gyanítom ott is meg lesz a 16 bájt különbség, elvégre csak megspórolunk 2 call/return hívást.Robert írta:A 2. programod Arduino 0022 alatt 1014 byte.
Csak azt akartam szemléltetni, hogy el lehet hagyni a setup() és loop() függvényeket, és ehhez választottam egy egyszerûnek tûnô példaprogramot.Célzott LED villogós nyomorítás:
http://avr.tavir.hu/modules.php?name=Fo ... 1937#21937