问题描述
我目前正在使用 PIC32 和 wifi 模块 ATWINC1500 进行项目。我无法提供所有代码,但我正在使用可以共享的测试功能。 首先,这是我正在使用的一些设置和配置:
- 处理器:PIC32MZ1024EFE064
- IDE:MPLAB IDE 5.45
- 和谐版:2.06
- Wifi 模块:ATWINC1500
- 实时操作系统:FreeRTOS
我想要做的是使用基础架构模式将 Wifi 模块连接到现有接入点。我能够获得我周围接入点的数量,但是当我尝试从这些接入点读取信息时,信息是空的、无效的或不正确的。 这是我的代码:
bool WIFI_Test_Infrastructure(void)
{
//Example: https://www.microchip.com/forums/m906568.aspx
//Wait for WINC1500 to be initialized
if(isWdrvExtReady() == false)
return false;
//Start a scan or wait for result
IWPRIV_ParaM_SCAN scanner;
IWPRIV_GET_ParaM param_scan = {
.scan = scanner
};
iwpriv_get(SCANSTATUS_GET,¶m_scan);
IWPRIV_SCAN_STATUS status = param_scan.scan.scanStatus;
IWPRIV_EXECUTE_ParaM dummy_param;
//Process StateMachine while scanning
if(status == IWPRIV_SCAN_IDLE)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);
//disconnect wifi from everything
WDRV_disconnect();
vTaskDelay(1000 / portTICK_PERIOD_MS);
while(WDRV_ConnectionState_Get() != WDRV_CONNECTION_STATE_NOT_CONNECTED)
vTaskDelay(10 / portTICK_PERIOD_MS);
vTaskDelay(1000 / portTICK_PERIOD_MS);
WDRV_EXT_CmdscanStart();
return false;
}
else if(status == IWPRIV_SCAN_IN_PROGRESS)
{
return false;
}
else if(status == IWPRIV_SCAN_NO_AP_FOUND)
{
iwpriv_execute(SCAN_START,&dummy_param);
return false;
}
else if(status == IWPRIV_SCAN_SUCCESSFUL)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);
//Read liste of wifi access point
uint16_t wifi_number_AP;
wifi_number_AP = m2m_wifi_get_num_ap_found();
WDRV_SCAN_RESULT scanResult;
tstrM2mWifiscanResult result;
int i;
for(i=0; i<wifi_number_AP; i++)
{
m2m_wifi_req_scan_result(i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
winc1500_scan_result_read(&result); //ISSUE HAPPENED HERE
vTaskDelay(1000 / portTICK_PERIOD_MS);
memcpy((void *)scanResult.bssid,(void *)result.au8BSSID,sizeof(scanResult.bssid));
}
//SUCCESS
return true;
}
else
{
return false;
}
}
这里发生了什么:
- 首先,您需要知道该函数是由线程管理器调用的,这就是它返回 false 或 true 的原因。我正在检查扫描的状态。
- 我能够到达 SCAN_SUCCESSFUL 部分,并且检测到的接入点数量是正确的。
- 我标记了发生问题的那一行。当我读取接入点的结果信息时,它是空的。这是我在调试会话中看到的(对于所有接入点都是相同的结果):
我已经等了好几个星期才问这个问题。希望有人可以提供帮助,或者至少给我一些需要检查的提示。 如果我错过了信息,请随时问我。
提前致谢!
阿德里安
解决方法
解决方案只是一个关于堆栈的故事。我还有另外两个任务:SYS 和 TCP/IP。我需要增加他们堆栈的大小,因为他们正在管理几个有关扫描的功能。所以在某处有一个覆盖。