检查下你新建的任务有没有加延时函数
while(1)
{
tls_os_time_delay(HZ/1000)
}
建议用法
// 可以在网络状态回调函数中发送信号量
static void con_net_status_changed_event(u8 status )
{
switch(status)
{
case NETIF_WIFI_JOIN_SUCCESS:
printf("--->NETIF_WIFI_JOIN_SUCCESS\n");
break;
case NETIF_WIFI_JOIN_FAILED:
printf("--->NETIF_WIFI_JOIN_FAILED\n");
light_off(&led0);
break;
case NETIF_WIFI_DISCONNECTED:
printf("--->NETIF_WIFI_DISCONNECTED\n");
break;
case NETIF_IP_NET_UP:
{
struct tls_ethif *tmpethif = tls_netif_get_ethif();
print_ipaddr(&tmpethif->ip_addr);
#if TLS_CONFIG_IPV6
print_ipaddr(&tmpethif->ip6_addr[0]);
print_ipaddr(&tmpethif->ip6_addr[1]);
print_ipaddr(&tmpethif->ip6_addr[2]);
#endif
}
break;
default:
//printf("UNKONWN STATE:%d\n", status);
break;
}
}
void UserMain(void)
{
printf("\n user task \n");
u8 auto_reconnect = 0xff;
tls_wifi_auto_connect_flag(WIFI_AUTO_CNT_FLAG_GET, &auto_reconnect);
if(auto_reconnect != WIFI_AUTO_CNT_ON)
{
auto_reconnect = WIFI_AUTO_CNT_ON;
tls_wifi_auto_connect_flag(WIFI_AUTO_CNT_FLAG_SET, &auto_reconnect);
tls_wifi_connect((u8 *)"w600", strlen("w600"), (u8 *)"12345678", strlen("12345678"));
printf("--->WIFI_AUTO_CNT_FLAG_SET ON\n");
}
// 注册网络状态回调
tls_netif_add_status_event(con_net_status_changed_event);
#if DEMO_CONSOLE
CreateDemoTask();
#endif
//用户自己的task
}
这样会造成wifi没连上时别的功能都用不了
@Zhang 不会啊,你别的功能另起一个线程啊,在另外的线程中如果需要wifi 的那就判断等WiFi 连接上再使能一段代码,如果线程中跟wifi无关那你就直接运行就好了
@Zhang 或者的话你把工程打包一下,给个链接帮你瞅瞅
嗯,我明天再试一下,今天公司旁边发生火灾,提前下班了,所以推迟回信息,不好意思,随便再问下设备连上路由器后,通过路由器上看到的设备名称是在哪里改。
@Zhang 在 ethernetif_init(struct netif *netif) 函数中
肯定啊,你这是RTOS啊 上了操作系统了,你直接while(1) 死循环的话,直接系统就死掉了呢,必须加上 tls_os_time_delay 让出CPU 使用权,才能保证其他任务照常运行
@ZYQ 如有有代码的画也要加上tls_os_time_delay吗?
@Zhang 这个跟有没有代码没关系,你建立一个任务 进行 while(1) 循环的话,那么必须有一步是让出CPU 使用权的,要么调用延时APi ,要么调用调度API
谢谢!应该问题就出在这了。