zoukankan      html  css  js  c++  java
  • 在中断服务函数中使用FreeRTOS系统延时函数vTaskDelay导致看门狗复位的情况

    @2019-04-09

    【问题】

      控制程序工作一段时间异常重启

    【分析】

      经定位分析重启原因为看门狗复位导致

    【解决】

      经排查发现在中断服务函数中使用了FreeRTOS的系统时延函数vTaskDelay,调试发现进入vTaskDelay函数后,会在函数xTaskResumeAll中进入临界段函数,

    进而发现程序会卡死在下面代码处:

    1 if ( uxCriticalNesting == 1)
    2 {
    3     configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );  
    4 }

      上边代码表示发生一次嵌套调用时,会断言检查是否是中断调用,因为vTaskDelay不支持中断调用,所以结果就会死在此断言语句处

    【结论】

      中断函数中要避免使用时延函数,更不能使用系统时延函数

  • 相关阅读:
    php多态简单示例
    php接口
    PHP的两种表单数据提交方式
    PHP操作数据库
    51nod 1575 Gcd and Lcm
    51 nod 1297 管理二叉树
    51 nod 1628 非波那契树
    51 nod 1211 数独 DLX
    51nod:1689 逛街
    51 nod 1203 JZPLCM
  • 原文地址:https://www.cnblogs.com/skullboyer/p/10677419.html
Copyright © 2011-2022 走看看