Closed LiamMehle closed 1 month ago
Hi! I had this on pause as I wanted to do many updates before merging this, but this is great to learn as (I know now) switch is faster the if in this special cases
No problem!
In this case, switch
-case
probably isn't noticeably faster. I used it because I figured it's a more appropriate than many if
s checking the same variable, but it works much the same.
If there's anything you'd like me to change, just let me know.
Hi, I added and tried all your proposal and compared byte by byte how it worked
strangely switch adds more size than if validation
so i tested them and decided to have less error validations and just one IF is enough
all other were added manually just to learn and test
PD: some PL ham op told me you were working on some special feature about search and rescue or emergencies and I want to participate!!!!
all of this was manually compared and added on certain parts, nice ideas!
Greetings, apologies for the late response. Swapping out the if-elses with switch-case was mainly aimed at code readability, since switch case is for enumerating values a single variable or expression can have, where if takes an arbitrary expression. In other words: switch-case is a special case of many if-elses. I've also included a default branch, at least for printing the currently selected frequency which almost certainly adds more code size. Default is a special case that is taken if no other case is selected before it, meaning it's the equivalent of adding an extra if or else at the end and the code that goes in there.
When comparing against contiguous values, switch case can be optimized to a table lookup. GCC is even clever enough to optimize some switch-cases to a mathematical expression! https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGISQDspK4AMngMmAByPgBGmMQgZgDMpAAOqAqETgwe3r7%2BQemZjgJhEdEscQnJtpj2JQxCBEzEBLk%2BfoG19dlNLQRlUbHxiSkKza3t%2BV3j/YMVVaMAlLaoXsTI7BzmSeHI3lgA1CZJbsjjxOHAJ9gmGgCCd/fhBIf8qBAvh2gM44eqS2OAQsh0OAHowYdUKlHCw8AAvTDoQ5Ef7HACs2EOEAAtFwlk9QaCFAB3QjIBDYgFAqwPIn075MJSHDQgQkMjnETAEdYMQ54k60%2B4c0GiZlcNl0kX0rk84h8nFmQXsjlizCHMyS4XSomy3n8pLKqWgkwBAAiT1NFoeXxiLU%2Bgm%2BAj%2B1NNIPBkOhsIRSJRqDR1gDlkOARVh1J5MpEFdwLD9LV/IlcZFevlh3RRu1qqZ6tZyc53P1oaSQulCaTxp1qb5AE5M/SrZbzU9bUx4Q7Xj8XYC3aCIVCYXg4YjkaicdHjsGAWGIwQKVSe7HK/Gc4mtTrdYW00qS/nGcy88uU1u%2BRp6yLy%2BuN4dq/yd6WiY2HlaOCtaJx0bw/NxeKhOG5rEDBQ1g2dUdh4UgCE0V8VgAaxAdENH0ThJF4FgJA0JDvy0Ug/w4XgFBAJCoI4LQVjgWAkDQFhUjoeJyEoajaPoBJMAUVIkjMYAzA0MwzGILg%2BDoAh4kIiAYmg0gYnCFoAE9OAg6TmGIWSAHkYm0TAHAU3hqLYQRVIYWh5NI3gsBiLxgDcMRaEIn9SCwFhDGAcRTIcvAuQcPAADc2MkzBVC0rwRJ08hBDqSTaDwGJiDkjwsEkghLnQ%2BzfOIGIMkwM1MCcowoqMaCVioAxgAUAA1PBMBJVTUkYUL%2BEEEQxHYKQZEERQVHUNzdEEgwCtMSxrH0aLCMgFYvWyOycVUpJfzSy4sFGiAVjsLSGhcBh3E8Do9FCcIhkqEZBKKLIBCmPxjoyU6GHmYYEkE1avIEPpJm2/IHrqNbegmAZ9oWI7bB%2B869FmVpbsO%2B6VpAzYJDfD8v0kvDDgADRE34mEObAhGUTjDmAZBkEOLguAAOjMEmNGxHi%2BIEwEIFwQgSEnJJ8V4EiyJWBBMCYLAEmW0h4MQ5COFQ0hsN/TgCKIyDCrhjgzARty8LZ2XSDSzJnEkIA%3D%3D
If you don't trust the above link (which is fair), godbolt.org allows you to inspect the assembly generated by compilers for many different languages. The link is for the code in the attachment compiled with Xtensa ESP32 GCC with -O3 flag, though -O2 also works.
Warm regards, S56IM
On Tue, May 14, 2024 at 12:30 AM Ricardo Guzman (Richonguzman) < @.***> wrote:
Hi, I added and tried all your proposal and compared byte by byte how it worked
strangely switch adds more size than if validation
so i tested them and decided to have less error validations and just one IF is enough
all other were added manually just to learn and test
PD: some PL ham op told me you were working on some special feature about search and rescue or emergencies and I want to participate!!!!
— Reply to this email directly, view it on GitHub https://github.com/richonguzman/LoRa_APRS_Tracker/pull/98#issuecomment-2108910536, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMHLRJLX3MQRIJYWF7IDC63ZCE5HBAVCNFSM6AAAAABHSE6UK2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMBYHEYTANJTGY . You are receiving this because you authored the thread.Message ID: @.***>
A small refactor of the main menu display. An else-if cascade turned into a switch-case.
String
move constructor no longer called at the end ofshowOnScreen()
.