檢查下你新建的任務有沒有加延時函數
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
謝謝!應該問題就出在這了。