arduino-libraries / WiFiNINA

136 stars 105 forks source link

Refactor WiFi.begin() methods to improve Wifi connecting #263

Closed hasenradball closed 6 months ago

hasenradball commented 8 months ago

why to improve?

With this rework the following benefits added:

tested on

github-actions[bot] commented 8 months ago

Memory usage change @ 03da13c1767f6dd25cc1415e1c0258244dcebc9b

Board flash % RAM for global variables %
arduino:mbed_nano:nanorp2040connect :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
arduino:megaavr:uno2018:mode=on :grey_question: -12 - +4 -0.02 - +0.01 0 - 0 0.0 - 0.0
arduino:samd:mkrvidor4000 :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
arduino:samd:mkrwifi1010 :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
arduino:samd:nano_33_iot :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
Click for full report table Board|`examples/AP_SimpleWebServer`
flash|%|`examples/AP_SimpleWebServer`
RAM for global variables|%|`examples/ConnectNoEncryption`
flash|%|`examples/ConnectNoEncryption`
RAM for global variables|%|`examples/ConnectWithWEP`
flash|%|`examples/ConnectWithWEP`
RAM for global variables|%|`examples/ConnectWithWPA`
flash|%|`examples/ConnectWithWPA`
RAM for global variables|%|`examples/ConnectWithWPA2Enterprise`
flash|%|`examples/ConnectWithWPA2Enterprise`
RAM for global variables|%|`examples/ScanNetworks`
flash|%|`examples/ScanNetworks`
RAM for global variables|%|`examples/ScanNetworksAdvanced`
flash|%|`examples/ScanNetworksAdvanced`
RAM for global variables|%|`examples/SimpleWebServerWiFi`
flash|%|`examples/SimpleWebServerWiFi`
RAM for global variables|%|`examples/Tools/CheckFirmwareVersion`
flash|%|`examples/Tools/CheckFirmwareVersion`
RAM for global variables|%|`examples/Tools/FirmwareUpdater`
flash|%|`examples/Tools/FirmwareUpdater`
RAM for global variables|%|`examples/Tools/SerialNINAPassthrough`
flash|%|`examples/Tools/SerialNINAPassthrough`
RAM for global variables|%|`examples/WiFiChatServer`
flash|%|`examples/WiFiChatServer`
RAM for global variables|%|`examples/WiFiPing`
flash|%|`examples/WiFiPing`
RAM for global variables|%|`examples/WiFiSSLClient`
flash|%|`examples/WiFiSSLClient`
RAM for global variables|%|`examples/WiFiStorage`
flash|%|`examples/WiFiStorage`
RAM for global variables|%|`examples/WiFiUdpNtpClient`
flash|%|`examples/WiFiUdpNtpClient`
RAM for global variables|%|`examples/WiFiUdpSendReceiveString`
flash|%|`examples/WiFiUdpSendReceiveString`
RAM for global variables|%|`examples/WiFiWebClient`
flash|%|`examples/WiFiWebClient`
RAM for global variables|%|`examples/WiFiWebClientRepeating`
flash|%|`examples/WiFiWebClientRepeating`
RAM for global variables|%|`examples/WiFiWebServer`
flash|%|`examples/WiFiWebServer`
RAM for global variables|% -|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|- `arduino:mbed_nano:nanorp2040connect`|2|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|2|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0 `arduino:megaavr:uno2018:mode=on`|-12|-0.02|0|0.0|4|0.01|0|0.0|-2|-0.0|0|0.0|-2|-0.0|0|0.0|-2|-0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.01|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|0|0.0|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0 `arduino:samd:mkrvidor4000`|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0 `arduino:samd:mkrwifi1010`|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0 `arduino:samd:nano_33_iot`|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0
Click for full report CSV ``` Board,examples/AP_SimpleWebServer
flash,%,examples/AP_SimpleWebServer
RAM for global variables,%,examples/ConnectNoEncryption
flash,%,examples/ConnectNoEncryption
RAM for global variables,%,examples/ConnectWithWEP
flash,%,examples/ConnectWithWEP
RAM for global variables,%,examples/ConnectWithWPA
flash,%,examples/ConnectWithWPA
RAM for global variables,%,examples/ConnectWithWPA2Enterprise
flash,%,examples/ConnectWithWPA2Enterprise
RAM for global variables,%,examples/ScanNetworks
flash,%,examples/ScanNetworks
RAM for global variables,%,examples/ScanNetworksAdvanced
flash,%,examples/ScanNetworksAdvanced
RAM for global variables,%,examples/SimpleWebServerWiFi
flash,%,examples/SimpleWebServerWiFi
RAM for global variables,%,examples/Tools/CheckFirmwareVersion
flash,%,examples/Tools/CheckFirmwareVersion
RAM for global variables,%,examples/Tools/FirmwareUpdater
flash,%,examples/Tools/FirmwareUpdater
RAM for global variables,%,examples/Tools/SerialNINAPassthrough
flash,%,examples/Tools/SerialNINAPassthrough
RAM for global variables,%,examples/WiFiChatServer
flash,%,examples/WiFiChatServer
RAM for global variables,%,examples/WiFiPing
flash,%,examples/WiFiPing
RAM for global variables,%,examples/WiFiSSLClient
flash,%,examples/WiFiSSLClient
RAM for global variables,%,examples/WiFiStorage
flash,%,examples/WiFiStorage
RAM for global variables,%,examples/WiFiUdpNtpClient
flash,%,examples/WiFiUdpNtpClient
RAM for global variables,%,examples/WiFiUdpSendReceiveString
flash,%,examples/WiFiUdpSendReceiveString
RAM for global variables,%,examples/WiFiWebClient
flash,%,examples/WiFiWebClient
RAM for global variables,%,examples/WiFiWebClientRepeating
flash,%,examples/WiFiWebClientRepeating
RAM for global variables,%,examples/WiFiWebServer
flash,%,examples/WiFiWebServer
RAM for global variables,% arduino:mbed_nano:nanorp2040connect,2,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,2,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 arduino:megaavr:uno2018:mode=on,-12,-0.02,0,0.0,4,0.01,0,0.0,-2,-0.0,0,0.0,-2,-0.0,0,0.0,-2,-0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.01,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,0,0.0,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0 arduino:samd:mkrvidor4000,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 arduino:samd:mkrwifi1010,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 arduino:samd:nano_33_iot,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 ```
JAndrassy commented 8 months ago

I don't see the change. formatting changed. while instead for and return instead of break. I don't see what it does differently. and the connection time is same too.

hasenradball commented 8 months ago

@JAndrassy then you should have a closer look. see the status =-1;

JAndrassy commented 8 months ago

so yes, but why the other changes in the code? you must adapt to code style of the original source code and not change more lines than needed.

github-actions[bot] commented 8 months ago

Memory usage change @ e8b31b43bb17df044b09f003e58d31805e9649d1

Board flash % RAM for global variables %
arduino:mbed_nano:nanorp2040connect :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
arduino:megaavr:uno2018:mode=on :grey_question: -2 - +4 -0.0 - +0.01 0 - 0 0.0 - 0.0
arduino:samd:mkrvidor4000 :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
arduino:samd:mkrwifi1010 :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
arduino:samd:nano_33_iot :small_red_triangle: 0 - +4 0.0 - 0.0 0 - 0 0.0 - 0.0
Click for full report table Board|`examples/AP_SimpleWebServer`
flash|%|`examples/AP_SimpleWebServer`
RAM for global variables|%|`examples/ConnectNoEncryption`
flash|%|`examples/ConnectNoEncryption`
RAM for global variables|%|`examples/ConnectWithWEP`
flash|%|`examples/ConnectWithWEP`
RAM for global variables|%|`examples/ConnectWithWPA`
flash|%|`examples/ConnectWithWPA`
RAM for global variables|%|`examples/ConnectWithWPA2Enterprise`
flash|%|`examples/ConnectWithWPA2Enterprise`
RAM for global variables|%|`examples/ScanNetworks`
flash|%|`examples/ScanNetworks`
RAM for global variables|%|`examples/ScanNetworksAdvanced`
flash|%|`examples/ScanNetworksAdvanced`
RAM for global variables|%|`examples/SimpleWebServerWiFi`
flash|%|`examples/SimpleWebServerWiFi`
RAM for global variables|%|`examples/Tools/CheckFirmwareVersion`
flash|%|`examples/Tools/CheckFirmwareVersion`
RAM for global variables|%|`examples/Tools/FirmwareUpdater`
flash|%|`examples/Tools/FirmwareUpdater`
RAM for global variables|%|`examples/Tools/SerialNINAPassthrough`
flash|%|`examples/Tools/SerialNINAPassthrough`
RAM for global variables|%|`examples/WiFiChatServer`
flash|%|`examples/WiFiChatServer`
RAM for global variables|%|`examples/WiFiPing`
flash|%|`examples/WiFiPing`
RAM for global variables|%|`examples/WiFiSSLClient`
flash|%|`examples/WiFiSSLClient`
RAM for global variables|%|`examples/WiFiStorage`
flash|%|`examples/WiFiStorage`
RAM for global variables|%|`examples/WiFiUdpNtpClient`
flash|%|`examples/WiFiUdpNtpClient`
RAM for global variables|%|`examples/WiFiUdpSendReceiveString`
flash|%|`examples/WiFiUdpSendReceiveString`
RAM for global variables|%|`examples/WiFiWebClient`
flash|%|`examples/WiFiWebClient`
RAM for global variables|%|`examples/WiFiWebClientRepeating`
flash|%|`examples/WiFiWebClientRepeating`
RAM for global variables|%|`examples/WiFiWebServer`
flash|%|`examples/WiFiWebServer`
RAM for global variables|% -|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|- `arduino:mbed_nano:nanorp2040connect`|2|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|2|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0 `arduino:megaavr:uno2018:mode=on`|0|0.0|0|0.0|4|0.01|0|0.0|-2|-0.0|0|0.0|-2|-0.0|0|0.0|-2|-0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.01|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|0|0.0|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0|4|0.01|0|0.0 `arduino:samd:mkrvidor4000`|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0 `arduino:samd:mkrwifi1010`|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0 `arduino:samd:nano_33_iot`|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|0|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0|4|0.0|0|0.0
Click for full report CSV ``` Board,examples/AP_SimpleWebServer
flash,%,examples/AP_SimpleWebServer
RAM for global variables,%,examples/ConnectNoEncryption
flash,%,examples/ConnectNoEncryption
RAM for global variables,%,examples/ConnectWithWEP
flash,%,examples/ConnectWithWEP
RAM for global variables,%,examples/ConnectWithWPA
flash,%,examples/ConnectWithWPA
RAM for global variables,%,examples/ConnectWithWPA2Enterprise
flash,%,examples/ConnectWithWPA2Enterprise
RAM for global variables,%,examples/ScanNetworks
flash,%,examples/ScanNetworks
RAM for global variables,%,examples/ScanNetworksAdvanced
flash,%,examples/ScanNetworksAdvanced
RAM for global variables,%,examples/SimpleWebServerWiFi
flash,%,examples/SimpleWebServerWiFi
RAM for global variables,%,examples/Tools/CheckFirmwareVersion
flash,%,examples/Tools/CheckFirmwareVersion
RAM for global variables,%,examples/Tools/FirmwareUpdater
flash,%,examples/Tools/FirmwareUpdater
RAM for global variables,%,examples/Tools/SerialNINAPassthrough
flash,%,examples/Tools/SerialNINAPassthrough
RAM for global variables,%,examples/WiFiChatServer
flash,%,examples/WiFiChatServer
RAM for global variables,%,examples/WiFiPing
flash,%,examples/WiFiPing
RAM for global variables,%,examples/WiFiSSLClient
flash,%,examples/WiFiSSLClient
RAM for global variables,%,examples/WiFiStorage
flash,%,examples/WiFiStorage
RAM for global variables,%,examples/WiFiUdpNtpClient
flash,%,examples/WiFiUdpNtpClient
RAM for global variables,%,examples/WiFiUdpSendReceiveString
flash,%,examples/WiFiUdpSendReceiveString
RAM for global variables,%,examples/WiFiWebClient
flash,%,examples/WiFiWebClient
RAM for global variables,%,examples/WiFiWebClientRepeating
flash,%,examples/WiFiWebClientRepeating
RAM for global variables,%,examples/WiFiWebServer
flash,%,examples/WiFiWebServer
RAM for global variables,% arduino:mbed_nano:nanorp2040connect,2,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,2,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 arduino:megaavr:uno2018:mode=on,0,0.0,0,0.0,4,0.01,0,0.0,-2,-0.0,0,0.0,-2,-0.0,0,0.0,-2,-0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.01,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,0,0.0,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0,4,0.01,0,0.0 arduino:samd:mkrvidor4000,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 arduino:samd:mkrwifi1010,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 arduino:samd:nano_33_iot,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,0,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0,4,0.0,0,0.0 ```
hasenradball commented 8 months ago

Hi @JAndrassy,

added now only the necessary stuff to improve the existing WiFi.begin() methods. Here the summary:

JAndrassy commented 8 months ago

looks much better.

hasenradball commented 8 months ago

@JAndrassy one hint why I want to change the loop from for to while was the while loop is much faster than the for loop.

here a small result (while is 1/3 faster):

 === Loop Test === 

Duration while loop: 6 us
Value:   2147483648
Duration for-loop: 9 us
Value:   2147483648
#include <Arduino.h>

unsigned long loop_test1() {
  size_t counter {0};
  unsigned long value {1};
  while (value < 2147483648) {
    ++counter;
    value = value * 2;
  }
  return value;
}

unsigned long loop_test2() {
  volatile unsigned long value {1};
  for (size_t counter = 0; value < 2147483648; ++counter) {
    value *= 2;
  }
  return value;
}

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    yield();
  }

  Serial.println("\n\n === Loop Test === \n\n");
  unsigned long tic {micros()}, toc;
  unsigned long result = loop_test1();
  toc = micros();
  Serial.print("Duration while loop: ");
  Serial.print((toc-tic));
  Serial.println(" us");
  Serial.print("Value:   ");
  Serial.println(result);

  tic = micros();
  result = loop_test2();
  toc = micros();

  Serial.print("Duration for-loop: ");
  Serial.print((toc-tic));
  Serial.println(" us");
  Serial.print("Value:   ");
  Serial.println(result);
}

void loop() {
}
JAndrassy commented 8 months ago

that would lead me to investigate if it is really the same loop logic. I trust C++ compiler to generate the same assembly from both cases.

hasenradball commented 8 months ago

Hi @JAndrassy,

This can easily checked normally by godbold.

From my expirience as SW Developer I have often seen that while is faster than for loop. Thats the reason I suggested this.

If thats the case you will get 30% more performance for free.

I always say trust is fine but control is better.

hasenradball commented 8 months ago

Hi @JAndrassy,

I made some screenshots for you.

a) First example while loop:

Bildschirmfoto 2023-11-12 um 20 16 06

==> You see 15 lines of Assembler instructions.

b) Second Example for loop:

Bildschirmfoto 2023-11-12 um 20 19 45

I hope I compared apples with apples. It seems to be the same code. :-)