Optimalizace kódu
Napsal: 11 dub 2024, 17:58
Mám rozpracovaný na mé poměry dosti složitý kód, dostal jsem se do situace, kdy flash paměť byla z 95 % zaplněna. Pustil jsem se do optimalizace. Dostal jsem se na cca 80%. Když jsem "uklízel v setupu, zjistil jsem zajímavou věc. Mám tam kus kódu, který mi vypisuje hodnoty z EEPROM. Běžně ho mám zakomentovaný a jen když potřebuji info, uvolním ho.
Zakomentavaný kód dává velikost programu 79 %
Když ho uvolním, tak 68 % (???)
když tuto část kódu smažu, program má opět 79 %
Přikládám část Setup, ve kterém je zakomentovaná sporná část vypisující eeprom. Nevkládám celý kód, je to přes 2000 řádků kódu ...
Napadá někoho, proč se takto zvláštně chová?
Zakomentavaný kód dává velikost programu 79 %
Když ho uvolním, tak 68 % (???)
když tuto část kódu smažu, program má opět 79 %
Přikládám část Setup, ve kterém je zakomentovaná sporná část vypisující eeprom. Nevkládám celý kód, je to přes 2000 řádků kódu ...
Napadá někoho, proč se takto zvláštně chová?
Kód: Vybrat vše
void setup() {
Serial.begin(9600);
/*
//===============
for (long i = 0; i <= adressMax; i++) {
if (countE == 0) {
Serial.print("EEPROM ");
Serial.print(i);
Serial.print(": ");
}
Serial.print(EEPROM.read(i));
countE ++;
if (countE < 10) Serial.print(", ");
if (countE == 10) {
Serial.println();
countE = 0;
}
}
while (1) delay(1000);
//===============
*/
RezimPrace = 0;
ss = 0;
mode = 0; // 0 = listovani PGM, 1 = zvratny, 2 = radialni, 3 = manual L, 4 = manual R
pgm = 1;
SetupMillis = SetupMillis * 1000; // převod sec. na milisec.
LCD_head ();
Keypad(); // čtení klávesnice
setup_progressbar();
if (ZnakKey == 65) { // Menu nastaveni >>> F1
AktualMillis = millis();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Setup program");
SettingMode = 1;
KeyValue = 1;
// edit_pgm = 99;
delay(1000);
menu ();
}
if (ZnakKey == 66) { // Nastaveni zrychlení motoru >>> F2
AktualMillis = millis();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Setup motor");
SettingMode = 2;
KeyValue = 1;
delay(1000);
Setupmotor ();
}
if (ZnakKey == 68) { // Tovarni nastaveni >>> F4
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Original settings");
delay(2000);
EEPROM.write(200, 255); // priprava pro reset EEPROM
EepromSetings ();
}
for(int i=5;i<9;i++){ // nastavení pinu PWM
pinMode(i,OUTPUT);
}
for(int i=5;i<9;i++){ // pocatecni stav pinu PWM
digitalWrite(i,LOW);
}
}