千家信息网

ARM非对齐操作异常解决过程是怎样的

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关ARM非对齐操作异常解决过程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在测试MF固件时,发生一个非
千家信息网最后更新 2025年12月02日ARM非对齐操作异常解决过程是怎样的

本篇文章给大家分享的是有关ARM非对齐操作异常解决过程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在测试MF固件时,发生一个非常诡异的异常,代码如下:

CLR_DBG_Commands::Monitor_EraseMemory* cmd = (CLR_DBG_Commands::Monitor_EraseMemory*)msg->m_payload;    debug_printf("EraseMemory addr=0xx len=%d\r\n", cmd->m_address, cmd->m_length);

指定第二行代码时,会跳到异常处理程序,发生了6号异常(用法异常Usage Fault)

我对ARM还是非常陌生,不知道怎么可能发生这个问题。
在今天之前,这行代码执行了无数次也未曾出错,最近也没有修改该函数或者相关函数的代码,昨天倒是大量修改了其它代码。

1,百度找资料
关键点是用法异常Usage Fault,以此为关键字搜索。有资料(http://www.docin.com/p-633872264.html)指出,用法异常包括:执行未定义指令、非对齐操作、除零。
前后两个显然不可能,中间这个非对齐操作倒是引起了我的注意。因为阅读MFPK代码的时候看到很多对齐操作的设计。

2,Keil调试
在Keil中调试这两行代码

0x080071DA 6A74      LDR      r4,[r6,#0x24]  1350:         debug_printf("EraseMemory addr=0xx len=%d\r\n", cmd->m_address, cmd->m_length);   1351:  0x080071DC A012      ADR      r0,{pc}+4  ; @0x080072280x080071DE E9D41200  LDRD     r1,r2,[r4,#0]0x080071E2 F001FD93  BL.W     debug_printf (0x08008D0C)

抛出异常的是0x080071DE这一行,代码是LDRD r1,r2,[r4,#0],大意是把r4开始,偏移#0的数据加载到r1,下一个字加载到r2
从寄存其中看到,r4此时是0x200006D2,这是半字对齐而不是字对齐。
奇怪了,MDK为啥编译一个半字对齐的呢?
回到第一行代码的msg->m_payload,它是关键。因为它就是0x200006D2,如果r4没有字对齐,那么肯定跟这个msg->m_payload有关。
我们看看msg->m_payload是哪里分配的!

3,寻根
从代码中看到msg->m_payload来自msg->m_payload = pThis->m_receptionBuffer;
而m_receptionBuffer的声明

    COM_HANDLE    m_port;    UINT8         m_receptionBuffer[ 2048 ];    UINT32        m_flags;    UINT32        m_lastPacketSequence;    WP_Controller m_controller;

到这里,就明白了!
因为我昨天把typedef INT32 COM_HANDLE;改为了typedef INT16 COM_HANDLE;

以上就是ARM非对齐操作异常解决过程是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

代码 关键 过程 一行 倒是 函数 就是 更多 知识 篇文章 资料 有关 实用 诡异 陌生 两个 关键字 关键点 固件 大意 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 无线传感器网络技术题目 数据库数据按日期迁移 代理服务器 免费 中国 加工中心数据库详解 java软件开发和后端 泰康保险软件开发待遇 为什么要开展国家网络安全教育 中职计算机网络技术课件 谷歌服务器优化工具 Dw6链接数据库 数据库安全性试验体会 网络安全对于世界的意义 车联网部标平台软件开发 山东省济南服务器经销商 pssql无法登陆数据库 阿里研发的数据库是免费的吗 软件开发公司财务做账流程 mfc数据库操作很慢 网络技术与信息安全专业好不好 燃气终端软件开发 北京数据库安全箱批量定制 机关网络安全防护作法 网络安全主题活动的主要内容 软件开发实习岗位简介怎么写 青岛存储服务器哪家是专业做的 浙江信息化软件开发市场价 机关网络安全宣传月讲话稿 数据库应用技术形考任务5 我的世界服务器信号有红叉 辽宁网络技术基础
0