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.

[参考译文] CC3220SF:配置强制程序进入 FaultISR

Guru**** 2588005 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/834266/cc3220sf-provisioning-forcing-program-into-faultisr

器件型号:CC3220SF

你好!

我使用的 CC3220SF 基于 SDK 版本2.40.02.00中的配置示例运行程序。 我修改了代码以运行一个或两个额外的线程、还修改了 GPIO 中断、当接收到该中断时执行 SignalEvent (AppEvent_restart)、最终将器件恢复到配置模式。 但是、在初始配置之后、如果配置在稍后再次启动、则程序会被困在 FaultISR 中。 如果从网络断开连接、配置是由于原始示例的超时而启动、还是 GPIO 中断触发它、这一点没有什么不同。 找出程序进入 FaultISR 的触发因素的最佳方法是什么? 谢谢!

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

    您好 Brian、

    对于任何硬故障、RTOS 对象查看器是一个有用的调试工具。 这是一个 CCS 工具、可查询和显示来自 CC3220上运行的 TIRTOS 实例的信息。 请参阅本文中的说明以启动 ROV 工具: https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/733294/2707429#2707429

    一旦您进入硬故障并启动 ROV 工具、您就可以检查 RTOS 状态并查看是否存在任何明显的硬故障原因。 我会检查堆的状态以及每个线程的堆栈、因为内存溢出是硬故障的常见原因。

    如果您在 ROV 工具中发现任何异常、请告诉我。

    此致、

    Michael

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

    大家好、Michael、我在启动 ROV 工具时遇到了问题、我不确定我应该在首选项中添加哪些内容才能使用它。 不确定它的重要性、但我使用的是项目的 FreeRTOS 版本。


    我发现的任何东西都希望我在这里添加一些东西、但我不确定具体是什么。

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

    您好 Brian、

    ROV 工具只能与 TIRTOS 配合使用、而不能与 FreeRTOS 配合使用。

    我建议您转到 TIRTOS 项目、或查看 FreeRTOS 的第三方调试解决方案。 还有一些内置挂钩可用于 FreeRTOS 以捕获某些错误事件、例如堆栈溢出事件。 有关详细信息、请参阅我的文章 :https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/773264/2863066#2863066

    此致、

    Michael

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

    您好、Michael、

    现在、我宁愿避免将项目更改为与 TI-RTOS 一起运行、而不是将 FreeRTOS 一起运行。 我已隔离、在我创建的线程内运行特定函数是确定 FaultISR 是否跳闸。 使用线程中的函数、FaultISR 会跳闸。 在注释掉函数后、程序正常运行。 我在下面为这个函数添加了我的代码。 我是否缺少会导致故障触发的东西? 我尝试增加调用此函数的线程的栈大小、但没有成功。

    void httpPostTask(){
    log_message ("HTTP 任务已启动\r\n);
    静态 bool isFirstTaskRun = true;
    
    /*根据需要初始化计时器*/
    if (isFirstTaskRun){
    HttpPost_TimerInit();
    isFirstTaskRun = false;
    }
    
    SP_ResetSample (spiData);//重置 AFE 样本数据
    
    /*打印到显示器*/
    SH1106_ClearScreen();
    SH1106_Print_Row (0、" Application Running ");
    
    /*
    *如果已设置 timerFlag,则应将其发布到服务器。 如果不发布、
    *继续读取 AFE 通道数据。
    *
    while (1){
    /*如果暂停,则延迟以便其它线程可以运行*/
    if (applicationPaused){
    vTaskDelay (1);
    }
    否则{
    /*如果设置了 timerFlag,则将数据发布到服务器,然后重置标志*/
    if (timerFlag){
    httpSendPost();
    }
    
    /*如果设置了屏幕标志,则更新显示并重置标志*/
    if (screenFlag){
    SH1106_Print_Row (2、timerBuf);
    SP_UpdateScreen();
    SP_ResetScreenAccumulator ();
    ScreenFlag = false;
    }
    
    /* AFE 通道读数*/
    AFE_ReadChannels (spiData);
    }
    }
    

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

    您好 Brian、

    如果您已经将故障原因缩小到 了 httpPostTask(),我建议您使用调试器单步执行该函数,并查看哪一行代码会导致整个 FaultISR。 准确地知道故障发生的位置会使该问题更容易调试。

    一旦您发现程序中的故障发生位置、请告诉我。

    此致、

    Michael

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

    您好、Michael、  

    自从我上次发布以来、我已对代码进行了一些更改。 httpPostTask 函数代替了控制配置任务的状态机中的 SendPingToGW 函数、而不是从单独的线程运行。 此外、它不是 while (1)循环、而是 while (!applicationPaused)。 但是、我的 httpPostTask 函数似乎不是触发 FaultISR 的内容。 调用在 ProvisioningTask 的 while (1)循环内运行的 MQ_receive()后,程序进入 FaultISR。 我无法将任何原因隔离得更远。

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

    您好 Brian、

    如果程序在 MQ_receive()处进入 faultISR,则我将进入该函数,以精确查看 faultISR 发生的位置。 这可能是由于将错误指针传递到 mq_receive()函数造成的。

    此致、

    Michael

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

    您好 Brian、

    我假设您已经解决了您的问题、因为我没有听到您的反馈。 如果没有、请随时发布对此主题的响应、或打开有关此问题的新主题。

    此致、
    Michael