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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. CAN 2 次初始化进 Hardfault 的问题分析

CAN 2 次初始化进 Hardfault 的问题分析

已定时 已固定 已锁定 已移动 YT SDK
can
1 帖子 1 发布者 38 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • quanfengQ 在线
    quanfengQ 在线
    quanfeng YunTu
    编写于 最后由 编辑
    #1

    CAN 2 次初始化进 Hardfault 的问题分析

    1.1 问题背景

    1. 硬件:MD14 开发板
    2. 软件:SDK 1_3_1
    3. 问题描述:
    4. 在主函数中进行 CAN 初始化,用中断打断这个初始化,然后在中断里重新做 CAN 初始化,中断弹回时会在当前位置跳入 Hardfault
      512d0664-e144-4f98-b65b-83b21f79b42b-image.png

    1.2 问题分析

    1. 因为 CAN 部分寄存器涉及到冻结模式下才能进行配置,在 CAN 初始化的过程中用中断去打断他,打断的位置不确定,推断可能是冻结模式的切换导致 Hardfault
      44b22bc6-2add-496c-970c-a348f75f211d-image.png

    2. 测试代码流程如下
      cce1b0eb-c896-49ff-824e-1efcc72e3b05-image.png

    3. 测试结果,确实当 main 函数中的 CAN 初始化正在进行,此时被中断打断,中断中又执行了 CAN 初始化,当中断执行结束回到主程序时,就可能会进入 Hardfault,tmrCnt 的值代表进入中断的次数
      ee1b7999-7b7b-45a9-99ca-1f4f57776a5b-image.png

    4. 验证猜想,是 Freeze Mode 导致的 Hardfault
      a. Debug 在 FLEXCAN_ClearRAM 位置打断点,查看寄存器 CAN0 -> MRC -> FRZ 为 1 此时为冻结模式
      8fc55f67-28f9-45cb-ac73-b9b101958301-image.png

      b. 不触发定时器中断,让 FLEXCAN_ClearRAM 函数在非冻结模式下执行
      8ee88495-d46e-4802-90b8-175f5643be44-image.png

      c. 测试结果符合预期当在非冻结模式下去操作需要在冻结模式下操作的寄存器就会触发 Hardfault
      fb0741e6-55f9-448b-96da-47661f874bf0-image.png

    1.3 解决方案

    1. 建议规避在 CAN 初始化过程中,触发其他中断,并且在触发的中断回调函数中又会对 CAN 进行初始化的操作
    1 条回复 最后回复
    0

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YCT离线License申请流程

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

  • YT CONFIG TOOL调查问卷

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

  • can
    15
    demo
    14
    uds
    7
    lin stack
    6
    fbl
    5
    yt-link
    5
    md14
    4
    adc模块
    3
    Online Users
    yishui66Y
    yishui66
    YQHY
    YQH
    ganyongchaoG
    ganyongchao
    quanfengQ
    quanfeng
    jiankang_wangJ
    jiankang_wang
    gaoShengG
    gaoSheng
    • 登录

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