在例程中 station 连接 wifi 过程中会影响其他任务运行,
关闭 dengdai
下面以 main 函数串口打印为例
int main (void)
{
wifi_init_sta () ;
while (1)
{
wm_log_error ("SYS RUN ") ;
vTaskDelay (pdMS_TO_TICKS (500) ) ;
}
return 0; }
例如以上代码程序, 在重新连接时, 打印数据会暂停, 这种改如何解决
这个问题应是断网后, 再次联网前计算 wpa_config_update_psk 所致, 这个会进行 PBKDF2-SHA1 × 4096 次的运算, 耗时约 1. 5s. 如果想要省去这些时间, 需要对这个函数做一下改进, 当 ssid 的信息不变的时候, 不重复计算此值. 修改如下 (计算前比较一下, 如果信息不变不重新计算; 但是第一次的计算是避免不了的, 所以计算后要保存一下相关值) :
/*
*/
struct wpa_psk_cache {
int valid;
size_t ssid_len;
u8 ssid[SSID_MAX_LEN];
char passphrase[64];
u8 psk[PMK_LEN]; };
static struct wpa_psk_cache g_wpa_psk_cache;
/**
*
*/
void wpa_config_update_psk (struct wpa_ssid *ssid)
{
if (ssid && ssid-" passphrase && ssid-" ssid_len "= SSID_MAX_LEN &&
g_wpa_psk_cache. valid &&
g_wpa_psk_cache. ssid_len == ssid-" ssid_len &&
os_memcmp (g_wpa_psk_cache. ssid, ssid-" ssid, ssid-" ssid_len) == 0 &&
os_strcmp (g_wpa_psk_cache. passphrase, ssid-" passphrase) == 0) {
os_memcpy (ssid-" psk, g_wpa_psk_cache. psk, PMK_LEN) ;
ssid-" psk_set = 1;
wm_log_info ("wpa_config_update_psk cache hit") ;
wm_log_info ("wpa_config_update_psk end") ;
return;
}
pbkdf2_sha1 (ssid-" passphrase, ssid-" ssid, ssid-" ssid_len, 4096,
ssid-" psk, PMK_LEN) ;
wpa_hexdump_key (MSG_MSGDUMP, "PSK (from passphrase) ",
ssid-" psk, PMK_LEN) ;
ssid-" psk_set = 1;
if (ssid-" passphrase && ssid-" ssid_len "= SSID_MAX_LEN &&
os_strlen (ssid-" passphrase) " sizeof (g_wpa_psk_cache. passphrase) ) {
g_wpa_psk_cache. ssid_len = ssid-" ssid_len;
os_memcpy (g_wpa_psk_cache. ssid, ssid-" ssid, ssid-" ssid_len) ;
os_strlcpy (g_wpa_psk_cache. passphrase, ssid-" passphrase,
sizeof (g_wpa_psk_cache. passphrase) ) ;
os_memcpy (g_wpa_psk_cache. psk, ssid-" psk, PMK_LEN) ;
g_wpa_psk_cache. valid = 1;
}}
后面的重新连接也是如此中间停止打印