This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] sl_WlanConnect 的接口()

Guru**** 2482105 points
Other Parts Discussed in Thread: CC3235S, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1315858/the-interface-of-sl_wlanconnect

主题中讨论的其他器件:CC3235SSysConfig

cc3235s、而 SDK 为 simplelink_cc32xx_sdk_5_20_00_06、

1、如果我每10秒调用 sl_WlanConnect ()接口,但热点不开放。
是否可以重复调用 sl_WlanConnect ()接口函数?

2、当我使用 sl_WlanConnect ()的接口时,如果 WLAN 连接失败或我们没有获取 IP 地址,它将永远卡在这个功能中。
目前,在重复连接过程中计时器将停止,无法确认问题是否由 sl_WlanConnect ()引起。  
如果我想添加10秒的超时时间、该怎么办?  

标识
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yongman Shang:

    这是一个可怕的想法调用 sl_WlanConnect ()如此快。 API sl_WlanConnect ()不是阻塞调用。 通过调用此 API、您可以开始 WLAN 连接申请。 建立连接后、系统将通过 WLAN 处理程序(SimpleLinkWlanEventHandler)或在出现故障(例如 AP 不允许连接)时通过错误处理程序通知您。

    理论上,通过这样的快速调用 sl_WlanConnect ()不应该崩溃任何东西,但根据所描述的行为,看起来你有一些错误在您的 WLAN 连接状态机。 您是否会从中断上下文(例如计时器)调用 sl_ API? 如果是、请勿这样做、因为这极具风险、需要非常小心地实施。

    能否使用最新 SDK 中的主机驱动程序和服务包进行测试?

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为什么要重复调用 sl_WlanConnect? (为什么不添加配置文件并使用自动连接?)

    正如 Jan 提到的、 不建议过于频繁地调用。

    无论如何、API 不应该卡住、肯定不应该停止计时器。  

    我们需要更多信息(例如 NWP 日志、请参阅 https://www.ti.com/lit/pdf/swru455中的第20章)来检查 NWP 状态、但它肯定看起来应用中有问题。    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Jan D、

    感谢您的回复。  

    1、这不是一个好主意   重复调用 sl_WlanConnect (),我们应该修改我们的代码.

    目前,在我们调用  sl_WlanConnect ()之前,

             若要判断 WLAN 的连接状态,请调用 sl_WlanConnect (),否则不调用。

    WLAN 的连接状态由  WLAN 处理程序(SimpleLinkNetAppEventHandler 和 SimpleLinkWlanEventHandler)设置 。

    2、我们使用的计时器就像这样、

       

    void TIMER_Init (TIMER_TYPE type,void (*fun)(sigval))
    {
        pthread_attr_t     timerThreadAttr;
        sigevent           sev;
    
        pthread_attr_init(&timerThreadAttr);
        timerThreadAttr.stacksize = TIMER_TASK_STACK_SIZE;
        timerThreadAttr.priority = TIMER_TASK_PRIORITY;
        /* Create Timer */
        sev.sigev_notify = SIGEV_THREAD;
        sev.sigev_notify_function = fun;
        sev.sigev_notify_attributes = &timerThreadAttr;
    
        if(type == TIMER_CTRL_TASK){
            timer_create(CLOCK_MONOTONIC, &sev, &CtrkTimer);
        }else if(type == TIMER_SEND_CLOUD_DATA_TASK){
            timer_create(CLOCK_MONOTONIC, &sev, &SendCloudDataTimer);
        }else if(type == TIMER_GET_DEVICE_INFO_TASK){
            timer_create(CLOCK_MONOTONIC, &sev, &GetDeviceInfoTimer);
        }else if( type == TIMER_10S ){
            timer_create(CLOCK_MONOTONIC, &sev, &Timer_10s);
        }else if( type == WIFI_OVERSEE ){
            timer_create(CLOCK_MONOTONIC, &sev, &WiFiOverseeTimer);
        }else{
    
        }
    }

      这是我们使用的五个计时器。 有时、当关闭 WLAN 热点时、从日志中、 timer_get_device 和 timer_send_cloud 会停止,、但 Timer_10s 仍在运行。

     计时器不是硬件计时器(来自任务?)、是否有有关如何使用和配置计时器的文档。

    >您是否从中断上下文(例如计时器)调用 SL_ API? 如果是、请勿这样做、因为这极具风险、需要非常小心地实施。

    在计时器的回调中,将事件 作为 Blow 发送,

    EVENT_SetWifiEvent(EVENT_tEvent, NOTICE_SEND_CLOUD_DATA_EVENT, YES);
       void    EVENT_SetWifiEvent ( EVENT_enType eventType, WIFI_NOTICE_TYPE noticeType, unsigned long const param )
        {
    
            .........
            event.Type = eventType;
            event.Action.WifiNotice = noticeType;
            event.Action.param = param;
    
            ret = mq_send(WiFiQueue, (const char*)&event, sizeof(EVENT_stEvent), 0);
             .......

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉、根据提供的信息、我无法确定出了什么问题。 如果您的某个软件计时器正在运行、则表示您的代码没有发生硬故障。 您可能对任务优先级有问题、谁知道... 从中断上下文(或计时器上下文、如您的情况)中使用消息队列是指示任务更改的好方法。

    可以使用 SysConfig 配置硬件计时器。 我不知道是否有任何用户指南可以做到这一点。 在 CC32xx SDK 中、您可以找到"timerled"示例。

    正如 Kobi 建议的,你可以尝试捕获 NWP 日志。 这将能够发现 NWP (WiFi 协处理器)问题。 恐怕这个问题出在代码内部的某个位置。 但我可能错了、NWP 日志可以给出线索。

    1月