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.

[参考译文] CC3220MODA:[错误]-致命错误:检测到驱动程序中止。

Guru**** 2578945 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/776789/cc3220moda-error---fatal-error-driver-abort-detected

器件型号:CC3220MODA

您好!  

我尝试以1分钟的频率与服务器通信、以接收约256KB 的 JSON 数据。 在开始时、一切都很好5到6倍。 但是、在收到此错误打印后、请告诉我发生这种情况的原因以及如何解决此问题?

[ERROR]-致命错误:检测到驱动程序中止。
[SOCK_EVENT]-意外事件[200040000x]

错误! 代码=-2005、说明= httpTask:断开连接失败

出现此错误后、不会发生 HTTP GET 或 HTTP POST。

注意:在 HTTP 连接失败和/或 请求失败时、最多尝试3次。

谢谢你。   

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

    您能否单步执行代码并找到导致套接字错误的行?

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

    尊敬的 VR:

    我收到错误代码

    [ERROR]-致命错误:检测到驱动程序中止。
    [SOCK_EVENT]-意外事件[200040000x]

    错误! 代码=-2005、说明= httpTask:断开连接失败

    进行呼叫

    HttpClient_sendRequest (https://ClientHandle1、HTTP_METHOD_Get、Request_URI_ON_OFF_SHARTLEE、

                     空、0、

                     0);

    请在此处查找我的代码:

    HttpClient_handle httpClientHandle1;
    int16_t statusCode1;
    bool MoreDataFlag1 = false;
    char data1[HTTP_MIN_RECV];
    int16_t ret1 = 0;
    int16_t len1 = 0;
    int16_t connect = 0;
    int16_t 请求= 0;
    int16_t requestCount = 0;
    
    
    // uart_print ("get =%s%s \n\r\n、domainVal、getVal);
    
    httpClientHandle1 = HttpClient_create (&statusCode1、0);
    if (statusCode1 < 0)
    {
    printError ("httpTask:创建 http 客户端句柄失败"、
    statusCode1);
    }
    
    ret1 = HttpClient_setHeader (httpClientHandle1、
    HttpClient_HFIELD_REQ_USER_AGENT、
    USER_AGENT、strlen (USER_AGENT)、
    0);
    if (ret1 < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret1);
    }
    
    ret1 = HttpClient_connect (https://ClientHandle1、HOSTNAME、0、0);
    连接= ret1;
    // uart_print ("connect =%d \n\r\n、connect);
    requestCount = 0;
    if (connect!= 0 && requestCount <3){
    RequestCount++;
    ret1 = HttpClient_connect (https://ClientHandle1、HOSTNAME、0、0);
    连接= ret1;
    
    睡眠(1);
    }
    
    if (ret1 < 0)
    {
    printError ("httpTask:连接失败"、ret1);
    }
    
    ret1 =
    HttpClient_sendRequest (https://ClientHandle1、HTTP_METHOD_Get、Request_URI_ON_OFF_SHARTLEE、//Request_URI_ON_OFF_SHARTLEE
    空、0、
    0);
    请求= ret1;
    requestCount = 0;
    if (request!= 200 && requestCount <3){
    RequestCount++;
    ret1 =
    HttpClient_sendRequest (https://ClientHandle1、HTTP_METHOD_Get、Request_URI_ON_OFF_SHARTLEE、//Request_URI_ON_OFF_SHARTLEE
    空、0、
    0);
    请求= ret1;
    
    睡眠(1);
    }
    
    if (ret1 < 0)
    {
    printError ("httpTask:发送失败"、ret1);
    }
    
    if (ret1!= HTTP_SC_OK)
    {
    printError ("httpTask:无法获取状态"、ret1);
    }
    
    len1 = 0;
    操作
    {
    ret1 = HttpClient_readResponseBody (https://ClientHandle1、data1、sizeof (data1)、
    MoreDataFlag1);
    
    if (ret1 < 0)
    {
    printError ("httpTask:响应正文处理失败"、ret1);
    }
    // UART_PRINT ("%.*s \r\n"、ret1、data1);
    
    if (request==200 && connect=0){
    // JSON 解析//
    createHttpGetTemplate();
    createHttpGetObject();
    parseHttpGet (data1);
    }
    
    len1 += ret1;
    }
    while (moreDataFlag1);
    
    ret1 = HttpClient_ddisconnect (https://ClientHandle1);
    if (ret1 < 0)
    {
    printError ("httpTask:断开连接失败"、ret1);
    }
    
    HttpClient_Destroy (httpClientHandle1); 


    在下一个相同的调用中出现此错误后、我将收到错误、

    错误! 代码=-2006、说明= httpTask:连接失败
    错误! 代码=-3021、说明= httpTask:发送失败
    错误! 代码=-3021、说明= httpTask:无法获取状态
    错误! 代码=-2006、说明= httpTask:断开连接失败

    谢谢你 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否在收到此错误并重新创建此错误后销毁 HTTP 句柄?

    BR、
    Vince
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Vince:
    是的、我每次都要销毁、请在最后的回复中查看我的代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试执行 sl_stop()和 sl_Start()以重置 NWP,然后尝试连接。

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

    尊敬的 Vince:

    我尝试呼叫

    案例 SL_DEVICE_EVENT_FATAL_DRIVER_ABORT:
    {
    UART_PRINT ("[错误]-致命错误:检测到驱动程序中止。 \n\n");
    
    UART_PRINT (" sl_Stop =%d \n\r\n、sl_Stop (sl_stop_timeout));
    睡眠(1);
    UART_PRINT (" sl_Start =%d \n\r\n、SL_Start (0、0、0));
    }
    中断; 

    并在出现断开失败错误-2005后尝试

    但 sl_Stop 和 sl_Start 都返回-2005

    谢谢你

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

    否。这不正确。 从异步事件处理程序调用 sl_Start()和 sl_Stop()是一个很糟糕的主意。 您应该在任务内设置一个标志并重新启动 NWP。

    BTW... 您使用什么 ServicePack 和 SDK?

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

    e2e.ti.com/.../servicepack_2D00_cc3x20.zipHiJan、

    我使用的是"simplelink_cc32xx_sdk_2_30_00_05"、并随附了相同的 SDK 服务包。

    谢谢你。

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

    好的、该版本的 SDK 看起来不错(版本2.10和更低版本可能是一个问题)。 能否在异步处理程序之外测试 NWP 重新启动过程? 您还可以使用最新的 SDK 和 ServicePack 进行测试。 我不相信最新的 SDK 可以解决问题、但您可以对其进行测试。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、
    如何重新启动 NWP?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    调用 sl_Stop()和 sl_Start()。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将获得针对 sl_Stop (200)和 sl_Start (0、0、0)的-2005错误代码。 在 sl_Stop 和 sl_Start 之间使用1秒睡眠
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您是否在异步处理程序之外调用了 NWP 重新启动?

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

    您好、Jan、

    我的电话 如下:

    三、会议的报告
    
    void getOnOffSched (void);
    void NWPrestart (void);
    
    void getOnOffSched (void)
    {
    //与服务器获取/发布对话的变量//
    HttpClient_handle httpClientHandle1;
    int16_t statusCode1;
    bool MoreDataFlag1 = false;
    char data1[HTTP_MIN_RECV];
    int16_t ret1 = 0;
    int16_t len1 = 0;
    int16_t connect = 0;
    int16_t 请求= 0;
    int16_t requestCount = 0;
    
    
    // uart_print ("get =%s%s \n\r\n、domainVal、getVal);
    
    httpClientHandle1 = HttpClient_create (&statusCode1、0);
    if (statusCode1 < 0)
    {
    printError ("httpTask:创建 http 客户端句柄失败"、
    statusCode1);
    }
    
    ret1 = HttpClient_setHeader (httpClientHandle1、
    HttpClient_HFIELD_REQ_USER_AGENT、
    USER_AGENT、strlen (USER_AGENT)、
    0);
    if (ret1 < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret1);
    }
    
    ret1 = HttpClient_connect (httpClientHandle1、domainVal、0、0);
    连接= ret1;
    // uart_print ("connect =%d \n\r\n、connect);
    requestCount = 0;
    if (connect!= 0 && requestCount <3){
    RequestCount++;
    ret1 = HttpClient_connect (https://ClientHandle1、HOSTNAME、0、0);//HOSTNAME//domainVal
    连接= ret1;
    
    睡眠(1);
    }
    
    if (ret1 < 0)
    {
    printError ("httpTask:连接失败"、ret1);
    }
    
    ret1 =
    HttpClient_sendRequest (https://ClientHandle1、HTTP_METHOD_Get、Request_URI、//Request_URI_ON_OFF_SHAREURE/getVal
    空、0、
    0);
    请求= ret1;
    requestCount = 0;
    if (request!= 200 && requestCount <3){
    RequestCount++;
    ret1 =
    HttpClient_sendRequest (https://ClientHandle1、HTTP_METHOD_Get、Request_URI、//Request_URI_ON_OFF_SHAREURE/getVal
    空、0、
    0);
    请求= ret1;
    
    睡眠(1);
    }
    
    if (ret1 < 0)
    {
    printError ("httpTask:发送失败"、ret1);
    }
    
    if (ret1!= HTTP_SC_OK)
    {
    printError ("httpTask:无法获取状态"、ret1);
    }
    
    len1 = 0;
    操作
    {
    ret1 = HttpClient_readResponseBody (https://ClientHandle1、data1、sizeof (data1)、
    MoreDataFlag1);
    
    if (ret1 < 0)
    {
    printError ("httpTask:响应正文处理失败"、ret1);
    }
    UART_PRINT ("%.*s \r\n"、ret1、data1);
    
    if (request==200 && connect=0){
    // JSON 解析//
    createHttpGetTemplate();
    createHttpGetObject();
    parseHttpGet (data1);
    }
    
    len1 += ret1;
    }
    while (moreDataFlag1);
    
    ret1 = HttpClient_ddisconnect (https://ClientHandle1);
    if (ret1 < 0)
    {
    printError ("httpTask:断开连接失败"、ret1);
    }
    
    HttpClient_Destroy (httpClientHandle1);
    
    if (ret1 < 0)
    {
    UART_PRINT (" HttpClient_ddisconnect =%d \n"r"、ret1);
    睡眠(5);
    NWPRestart();
    
    }
    
    }
    
    void NWPrestart (void){
    UART_PRINT (" sl_Stop =%d \n\r\n、sl_Stop (sl_stop_timeout));
    睡眠(1);
    UART_PRINT (" sl_Start =%d \n\r\n、SL_Start (0、0、0));
    
    }
    
    
    void * dnsclientTask (void * pvParameters)
    {
    三、会议的报告
    
    while (1)
    {
    queueMsg = DnsclientMessageType_SensorsMessagesMax;
    
    Clock_gettime (clock_realtime、&ts);
    ts.tV_sec += 2;
    
    RetVal =
    mq_timedreceive (dnsclientMQueue、(char *) queueMsg、
    sizeof (DnsclientMessageType)、
    null、
    (&T);
    
    switch (queueMsg)
    {
    案例 DnsclientMessageType_SensorsMessagesMax:
    中断;
    
    案例 DnsclientMessageType_CheckOnOffSchedule:
    .
    中断;
    
    案例 DnsclientMessageType_GetOnOffSchedule:
    getOnOffSched();
    中断;
    
    默认值:
    中断;
    }
    }
    
    

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

    一开始我看不到任何明显的错误、但我个人会做这些更改:

    -使用 sl_Stop ()而不超时-这意味着 sl_Stop (0)
    -增加延迟,睡眠(1)不必要地处于低电平
    -将 SLEEP()添加到 while (moreDataFlag1)循环中
    -您的 data1在堆栈上,请确保有足够的堆栈大小
    -您没有针对 data1溢出的保护

    1月