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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. 【反馈】FLASH_DRV_Program 接口因内部指针强转导致非对齐访问 HardFault

【反馈】FLASH_DRV_Program 接口因内部指针强转导致非对齐访问 HardFault

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

    在使用 LE0 SDK 1_4_0 HOTFIX_001 的 FLASH_DRV_Program 接口时发现一个问题。请问除了使用断言,是否有其他方式预防客户,调用时出现HardFault?因为客户基本没开断言

    问题现象:

    • 列表当传入的 pData 地址非 4 字节对齐时,程序会触发 HardFault (Unaligned Access)。

    原因分析:

    • 列表该接口原型定义为 const void * pData,但在内部实现中,直接将其强转为 uint32_t * 使用(源码中带有 /* PRQA S 0316 */ 注释)。
      由于 void * 允许任意地址,当应用层传入非对齐地址时,这种强转会导致在访问时,HardFault。
    status_t FLASH_DRV_Program(..., const void * pData)
    {
        // 强转发生处,PRQA 警告被屏蔽
        state->cmdParam.pdata = (const uint32_t *) pData; /* PRQA S 0316 */
        // ...
    }
    
    static status_t FLASH_LaunchCommandSequence(uint32_t instance)
    {
        // ...
        // 在此处触发 Unaligned Access HardFault
        for (uint32_t i = 0; i < state->cmdParam.word_size; i++)
        {
            state->cmdParam.dest[i] = state->cmdParam.pdata[i]; 
        }
        // ...
    }
    
    1 条回复 最后回复
    0
    • DigaD 离线
      DigaD 离线
      Diga
      编写于 最后由 编辑
      #2

      这个不会改,云途的MCU 基本是单字编程或双字编程。
      如果你传了个非对齐的地址,例如 0x2003, 期望的结果MCU 会从 0x2000 开始编程,那么就需要考虑 0x2000~0x2002 这三个字节的数据,没啥意义

      1 条回复 最后回复
      0

    • 云途开发生态介绍

      快速上手云途开发生态

    • 云途论坛规则/Yuntu Forum Rules

      发帖前请查看

    • YT CONFIG TOOL调查问卷

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

    • can
      22
      demo
      20
      uds
      13
      lin stack
      11
      md14
      6
      fbl
      5
      yt-link
      5
      adc模块
      4
      Online Users
      • 登录

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