跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. UART发送过程中直接进入到HARDFAULT错误

UART发送过程中直接进入到HARDFAULT错误

已定时 已固定 已锁定 已移动 YTM32B1M系列
10 帖子 3 发布者 109 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • guangnanG 离线
    guangnanG 离线
    guangnan
    编写于 最后由 编辑
    #1

    MCU在启动后运行一到两个小时后会发送PUTDATA函数中直接进入到HARDFAULT中去,试过在UART_ERROR_HANDLE中打断点,但是从来没进去过。调用堆栈和寄存器情况如图。
    71c9f071-08e5-41d0-8fac-3c8566bd4293-image.png 57395d42-302c-418b-83e6-ffb7454d4d9f-image.png 3dbd6773-8f39-4dba-a36d-d9df9b548543-image.png
    在进入错误之前MCU还会发送一段时间的错误数据,之后才会进入到错误中,并且只有头部数据正常。
    b2afc557-6209-499e-8573-a70eb6740bf9-image.png
    下图为异常数据:
    1a1045b4-224e-4300-b65b-2e30e376d186-image.png
    下图为正常数据:
    92c4bf3a-3433-45d6-a055-fb9407ce98cf-image.png
    并且MCU内的数据也能正常接收到这些异常数据:
    4a81cbd7-61ee-455a-b246-6f6a4960790c-image.png 3a25ddfa-75a3-44a8-ae34-9497222bd838-image.png
    该问题困扰了我几天,求指教。

    1 条回复 最后回复
    0
    • DigaD 离线
      DigaD 离线
      Diga
      编写于 最后由 编辑
      #2

      看一下 hardfault 原因是什么
      看起来像溢出了

      guangnanG 1 条回复 最后回复
      0
      • guangnanG 离线
        guangnanG 离线
        guangnan
        回复了Diga 最后由 编辑
        #3

        Diga 你好,我这边暂时没有头绪查出hardfault原因,因为是直接跳转进去的,尝试过把堆栈加大,而且传输结束后都会清除buf里面的数据。能请教一下怎么查看这个原因吗?

        1 条回复 最后回复
        0
        • DigaD 离线
          DigaD 离线
          Diga
          编写于 最后由 编辑
          #4

          IAR 应该是有个可以查看 hardfault 原因的,另外可以看一下 Core 的寄存器,SCB->SHCSR

          guangnanG 1 条回复 最后回复
          0
          • guangnanG 离线
            guangnanG 离线
            guangnan
            回复了Diga 最后由 编辑
            #5

            Diga 附上CPU和Core寄存器的情况0a72ff13-2a37-4ded-8bb9-70a662c0dee5-image.png 35de8e08-41a5-44e0-b132-df3b7b814b98-image.png dd029bbb-2439-44f2-9b04-88ee522776bf-image.png

            1 条回复 最后回复
            0
            • DigaD 离线
              DigaD 离线
              Diga
              编写于 最后由 编辑
              #6

              初步看是 bus fault,bus fault 的错误地址是 0x20010000
              看起来像是你的 tx buff 这个指针在野蛮生长,已经超出 RAM 范围了

              guangnanG 1 条回复 最后回复
              0
              • guangnanG 离线
                guangnanG 离线
                guangnan
                回复了Diga 最后由 guangnan 编辑
                #7

                Diga 我这边查看的linflexd_uart_config1_State的txBuff确实是越界了,但是重复几次现象也没有看到这个txbuff在疯狂变化,直接就从正常指针地址跳到 0x20010000。进错误之前传进去的数据还是正常的。这边检查了有操作linflexd_uart_config1_State.txBuff的也只有这个发送回调函数。
                b1d58fb9-d1b8-4717-95fc-ffc83858eb97-image.png 1c3702c2-290b-4c49-9d0b-837f6c10350c-image.png

                1 条回复 最后回复
                0
                • DigaD 离线
                  DigaD 离线
                  Diga
                  编写于 最后由 编辑
                  #8

                  看起来像 state->txBuff 指向的是一个局部变量,位置应该是在栈内,然后这个位置被你的代码冲掉了
                  你可以把你的 txDataAddr 拿出来当全局变量,固定占一个坑

                  guangnanG 1 条回复 最后回复
                  0
                  • guangnanG 离线
                    guangnanG 离线
                    guangnan
                    回复了Diga 最后由 guangnan 编辑
                    #9

                    Diga 刚刚尝试了把这个txDataAddr 修改为全局变量还是会出错。

                    1 条回复 最后回复
                    0
                    • HarlanH 离线
                      HarlanH 离线
                      Harlan
                      编写于 最后由 编辑
                      #10

                      Debug排查到,主函数与中断都有调用“LINFlexD_UART_DRV_PutData()”函数,存在函数重进入的情况;机缘巧合下txsize会自减2次,如果txsize是1,则会自减为0xffffffff(0D4,294,967,295),最终导致txbuff爆掉,进入Hardfault。

                      image.png
                      image.png

                      解决方法:①避免中断和主函数都调用同一个函数,②通过其他方式做好逻辑管理。

                      1 条回复 最后回复
                      2

                    • 云途论坛规则/Yuntu Forum Rules

                      发帖前请查看

                    • YCT离线License申请流程

                      帮助没办法联网的电脑使用YCT

                    • YT CONFIG TOOL调查问卷

                      帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                    • demo
                      12
                      can
                      8
                      lin stack
                      6
                      yt-link
                      5
                      vscode
                      3
                      adc模块
                      2
                      i2c
                      2
                      uuid
                      2
                      Online Users
                      pengh1994P
                      pengh1994
                      • 登录

                      • 登录或注册以进行搜索。
                      • 第一个帖子
                        最后一个帖子
                      0
                      • 版块
                      • 最新
                      • 标签
                      • 热门