[i=s] 本帖最后由 夜雨喧嚣 于 2025-5-25 22:08 编辑 [/i]
我这边还有几个问题,如果有知道的大佬希望可以解答一下
1、如何得知WIFI已经初始化完成?
我这边测试WIFI没有初始化完成的情况下调用wifi相关API会导致代码卡死
我目前的解决方式是在wifi初始化任务最下方增加了一个标志位,通过读取这个标志位判断是否初始化完成
实际测试是可行的,但是正常应该会有获取是否初始化完成的API的,但是我好像没找到
2、为何杀死wifi_connect所在的任务会导致wifi工作异常,而AP的不会?
我这边测试wifi_connect所在的任务我哪怕是最下面放个死循环也是能正常ping通的
但是如果我这边不加死循环,基本上过一下子之后就会ping不通
3、感觉还有几个问题来着的,但是我忘记了,wifi是三四天前调的了,晚点我想起来再补充吧
1、驱动函数熟悉
驱动函数位置
ameba-rtos-release-v1.1\component\wifi\api\wifi_api.h
ameba-rtos-release-v1.1\component\wifi\whc\whc_host_rtos\whc_host_api_basic.c
具体内容可以自行下载SDK查看
1.1、连接wifi
.h文件中第65行起
.c文件中第62行起
s32 wifi_connect(struct rtw_network_info *connect_param, u8 block)
无需做其他初始化,因为在main函数中已经进行了初始化

2、userWiFi.c,.h创建
.c代码如下
#include "userWiFi.h"
static u8 wifi_password[10] = "12345678";
static struct rtw_network_info STA_cfg = {0};
void userWiFiInit(void * pvParameters)
{
(void)pvParameters;
int ret = 0;
//rtos_time_delay_ms(5000); //若运行后出现死机的情况,请取消该注释优先等待wifi初始化完成
memcpy(&STA_cfg.ssid.val,"12345678",8); //wifi SSID,也就是wifi名
STA_cfg.ssid.len = 8;
STA_cfg.password = wifi_password; //wifi密码
STA_cfg.password_len = 8;
STA_cfg.by_reconn = 0;//自动重连 1, 不自动重连0
while(1)
{
ret = wifi_connect(&STA_cfg,1); //阻塞连接
if(0 == ret)
{
break;
}
else
{
RTK_LOGS(NOTAG, RTK_LOG_ERROR, "STA NO:%d", -ret);
}
}
while(1) //不清楚为什么,如果我这里杀掉了任务就会导致网络连接异常,会ping不通
{
rtos_time_delay_ms(500);
}
rtos_task_delete(NULL);
}
.h代码如下
#ifndef _USERWIFI_H_
#define _USERWIFI_H_
#include "wifi_api.h"
void userWiFiInit(void * pvParameters);
#endif
3、主函数实现
3.1、初始化任务

打开热点,将连接参数设置为热点参数,烧录上电运行后热点连接成功,并且ping设备正常返回数据,2.4G与5G均可正常连接。