Optimise M0/M1 code size

Replace two bool variables with one.

It's not obvious but (!hasP && !hasS) is equal to
!(hasP || hasS)

Note: expiration_time_set = hasP || hasS
Truth table:
|--------------------------------------------------|
| hasP| hasS| (!hasP && !hasS)|  !(hasP || hasS) |
|------|-----|--------------------|-----------------|
|   0    |  0   |               1            |            1           |
|   0    |  1   |               0            |            0           |
|   1    |  0   |               0            |            0           |
|   1    |  1   |               0            |            0           |
|--------------------------------------------------|

Change in memory:
Flash: -36 bytes
SRAM: 0 bytes
This commit is contained in:
Guðni Már Gilbert 2023-04-21 17:42:55 +00:00
parent 91b913e997
commit 4ce3fa53a1
1 changed files with 6 additions and 11 deletions

View File

@ -5221,18 +5221,13 @@ void process_commands()
case 1: { case 1: {
const char *src = strchr_pointer + 2; const char *src = strchr_pointer + 2;
codenum = 0; codenum = 0;
bool hasP = false, hasS = false; if (code_seen('P')) codenum = code_value_long(); // milliseconds to wait
if (code_seen('P')) { if (code_seen('S')) codenum = code_value_long() * 1000; // seconds to wait
codenum = code_value_long(); // milliseconds to wait bool expiration_time_set = bool(codenum);
hasP = codenum > 0;
}
if (code_seen('S')) {
codenum = code_value_long() * 1000; // seconds to wait
hasS = codenum > 0;
}
while (*src == ' ') ++src; while (*src == ' ') ++src;
custom_message_type = CustomMsg::M0Wait; custom_message_type = CustomMsg::M0Wait;
if (!hasP && !hasS && *src != '\0') { if (!expiration_time_set && *src != '\0') {
lcd_setstatus(src); lcd_setstatus(src);
} else { } else {
// farmers want to abuse a bug from the previous firmware releases // farmers want to abuse a bug from the previous firmware releases
@ -5247,7 +5242,7 @@ void process_commands()
st_synchronize(); st_synchronize();
menu_set_block(MENU_BLOCK_STATUS_SCREEN_M0); menu_set_block(MENU_BLOCK_STATUS_SCREEN_M0);
previous_millis_cmd.start(); previous_millis_cmd.start();
if (codenum > 0 ) { if (expiration_time_set) {
codenum += _millis(); // keep track of when we started waiting codenum += _millis(); // keep track of when we started waiting
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
while(_millis() < codenum && !lcd_clicked()) { while(_millis() < codenum && !lcd_clicked()) {