新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2019-1-15
- 在线时间
- 9 小时
|
这是一个基于STM32的freertos下WiFi模块的初始化,但是里面有三个while循环,在freertos中不是一个任务只有一个循环吗,请问一下如下代码是怎么运行的,请大神帮帮忙,若代码作者看到了,可以加下我企鹅码3422217339,麻烦备注一下你的项目名,谢谢。
最近在看看你写代码,好多不懂的地方,向你请教请教
uint8_t esp8266_init(void)
{
uint8_t conn_server_n = 0; //记录连接server的次数
uint8_t conn_wifi_n = 0; //记录连接WIFI次数
set_config_mode(); //设置成配置模式
while(1)
{
//测试AT指令
if(test_at())
{
#if ESP8266_LOG
printf("AT测试成功\r\n");
#endif
//成功
break; //跳出循环
}
else
{
#if ESP8266_LOG
printf("AT测试失败\r\n");
#endif
//AT失败有两种情况:1.当前在透传模式 2.模块损坏
close_tran(); //关闭透传模式
}
}
//关回显
if(close_huixian())
{
#if ESP8266_LOG
printf("关闭esp8266回显 正常\r\n");
#endif
}
else
{
#if ESP8266_LOG
printf("关闭esp8266回显 异常\r\n");
#endif
}
//设置成客户端
if(set_client())
{
#if ESP8266_LOG
printf("设置成客户端 正常\r\n");
#endif
}
else
{
#if ESP8266_LOG
printf("设置成客户端 异常\r\n");
#endif
}
//判断wifi连接是否正常 is_connect_ap
while(is_connect_ap() == 0)
{
conn_wifi_n++;
if(conn_wifi_n > WIFI_CONN_TIMES)
{
#if ESP8266_LOG
printf("连接WIFI超时\r\n");
#endif
wifi_sta = WIFI_OFF_LINE; //更新wifi状态
return 0 ;
}
if(connect_ap())
{
auto_connect_ap(); //设置自动连接WIFI
#if ESP8266_LOG
printf("连接wifi 正常\r\n");
#endif
break;
}
else
{
#if ESP8266_LOG
printf("连接wifi 异常\r\n");
#endif
}
}
wifi_sta = WIFI_ON_LINE; //更新wifi状态
#if ESP8266_LOG
printf("连接wifi 正常\r\n");
#endif
while(is_connect_ap()!=3)
{
#if ESP8266_LOG
printf("尝试连接服务器...\r\n");
#endif
conn_server_n++;
if(conn_server_n > SERVER_CONN_TIMES)
{
#if ESP8266_LOG
printf("服务器连接超时\r\n");
#endif
server_sta = SERVER_OFF_LINE; //更新server状态
return 0 ;
}
if(connect_server()) //如果连接成功,则自动退出
{
break;
}
}
#if ESP8266_LOG
printf("连接服务器 正常\r\n");
#endif
//设置透传模式1
if(set_mode1())
{
#if ESP8266_LOG
printf("设置透传模式1 正常\r\n");
#endif
}
else
{
#if ESP8266_LOG
printf("设置透传模式1 异常\r\n");
#endif
}
//开始透传
if(start_tran())
{
#if ESP8266_LOG
printf("开始透传 正常\r\n");
#endif
//开始接收数据
set_tran_mode();
}
else
{
#if ESP8266_LOG
printf("开始透传 异常\r\n");
#endif
return 0;
}
#if ESP8266_LOG
printf("服务器在线\r\n");
#endif
server_sta = SERVER_ON_LINE; //更新SERVER状态
return 1;
}
|
|