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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT MCAL
  4. MD24 MCAL 0_9_1 EWDG SetCompareHigh 形参 uint8 截断,导致看门狗提前复位

MD24 MCAL 0_9_1 EWDG SetCompareHigh 形参 uint8 截断,导致看门狗提前复位

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

    1.结论摘要

    • MD24 MCAL 的 EWDG_SetCompareHigh() 形参类型为 uint8,而 EWDG 的 CMPH 寄存器字段为 16 位。客户配置 1s 超时(CompareHigh = 10000)时,高 8 位被静默截断,实际写入寄存器的值为 0x10(= 16),实测看门狗 2.3712ms 即触发复位。MC03 的同名函数形参为 uint16,不存在该问题。
    • 影响:所有 CompareHigh(及 CompareLow,见第 5 节)配置值 大于 255 的 MD24 客户,看门狗都会提前复位;由于配置值 ≤ 255 时表现正常,该缺陷在简单测试中不易暴露。
    • 修复:将形参类型改为 uint16(与寄存器字段位宽一致),并补充超范围参数校验以防再次静默截断。修复后的实测结果见第 6节。

    2. 问题描述

    客户在 MD24 上配置 EWDG 超时时间为 1s,实际超时时间远小于 1s,看门狗持续触发复位;相同配置在 MC03 上表现正常。
    客户的 EWDG 硬件设计如下图所示:EWDG_OUT 通过一个二极管连接到复位脚,EWDG_OUT 拉低即触发复位。
    图 2-1:客户 EWDG 硬件设计
    949a49eb-503d-4cdc-835d-4adc25890572-image.png
    MD24 侧的 MCAL WDG 配置如下:
    图 2-2:MCAL WDG 配置(CompareHigh = 10000)
    3077c656-3c0c-46fb-b586-a8a38109b87c-image.png
    实测现象:EWDG_OUT 从初始化完成到拉低仅 2.3712ms,远小于配置的 1s。
    图 2-3:实测 EWDG_OUT 波形(2.3712ms)
    68d97214-0730-4ed2-8d51-753721fecf93-image.png

    3. 复现步骤

    1. 基于 MCAL 配置工具,将 EWDG 的 CompareHigh 配置为 10000(按配置工具口径对应 1s 超时,即 1 计数 = 100µs);
    2. 初始化并启动 EWDG,不再喂狗;
    3. 用示波器测量 EWDG_OUT 从启动到拉低的时间;
    4. 实测结果为 2.3712ms,而预期为 1s。
      说明:客户原始场景中上一步骤的"停止喂狗"由功能未及时喂狗自然触发,此处为便于复现改为主动停止。

    4. 根因分析

    • 4.1 配置值与寄存器实际值的差异
      配置项 CompareHigh = 10000,但读回寄存器发现实际写入值为二进制 10000b,即 16。
      图 4-1:配置项截图
      225ffde0-4c4f-47c2-87d0-fdacb017e2b1-image.png
      图 4-2:寄存器实际值截图
      890d7d6f-bfe2-4de1-9b0a-020054682360-image.png
    • 4.2 定位:形参类型与寄存器字段位宽不匹配
      对比 MC03 与 MD24 驱动实现,发现 EWDG_SetCompareHigh 的形参类型存在差异:
    • MC03:形参 Value 类型为 uint16;
    • MD24:形参 Value 类型为 uint8。
      图 4-3:MC03 与 MD24 形参类型对比
      094836fb-cdb7-4e7d-8dc5-e6c92aa8c053-image.png
      而 MD24 的 EWDG -> CMPH 寄存器字段与 MC03 一致,均为 16 位:
      图 4-4:MD24 EWDG CMPH 寄存器定义(16 位)
      cfc07a0a-e5aa-40cb-b9dd-4c48da793984-image.png
    • 4.3 失效机理
    CompareHigh = 10000
            ↓ 十进制转十六进制
          0x2710                (占 16 位)
            ↓ 传入形参 uint8 Value(仅 8 位),高位被丢弃
            0x10 = 16           (写入寄存器的实际值)
    

    由于该截断发生在赋值处,既不会有编译告警,也不会触发 DET 参数校验,属于典型的静态静默截断:配置工具显示正常、代码编译通过、只有运行时行为异常。

    5.修复方案

    当前临时修复:在 EWDG_SetCompareHigh 的条件编译处补上 MD24 分支,使其形参类型与寄存器字段位宽一致(uint16)。
    图 5-1:修复代码
    d77575aa-a3fb-4c3f-b2c5-f92ff19457e5-image.png

    6. 回归验证

    实测结果:
    图 6-1:修复后实测波形
    f06e34bd-9935-49d3-820f-a70ba3adb8af-image.png

    1 条回复 最后回复
    0
    • yt0069Y yt0069 从 MCAL BUGS 移动了该主题

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

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

  • can
    29
    demo
    26
    uds
    14
    lin stack
    13
    fbl
    6
    md14
    6
    yt-link
    6
    adc模块
    4
    Online Users
    • 登录

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