ARM 未定义指令错误

2024-03-12

我在运行嵌入式系统、无协处理器、无 MMU、Atmel 9263 时收到未定义指令错误。嵌入式系统的内存范围为 0x20000000 - 0x23FFFFFF。目前为止我遇到过两个案例:

  1. SP 0x0030B840,LR 2000AE78 - LR指向有效代码,所以我不确定是什么导致了异常,尽管SP是假的。我还应该查看哪些其他地址、寄存器、内存位置?

  2. SP 0x20D384A8,LR 0x1FFCA59C - SP 没问题,LR 是假的。我可以做一些事后分析来找出LR是如何被压垮的吗?看起来它从地址空间的末尾向后滚动,但我不知道如何。

现在我只是用模拟替换大块代码并再次运行测试来尝试隔离问题 - 问题是有时需要 4 个小时才能显示问题。

任何提示都将不胜感激,谢谢!

芯片是AT91SAM9263,我们使用的是IAR EWARM工具链。我很确定它是直接的 ARM,但我会检查一下。

EDIT

Undef Instruct 的另一个例子 - 这次 SP/LR 看起来不错。 LR = 0x2000b0c4,当我在附近拆解时:

2000b0bc e5922000 LDR R2,[R2,#+0]
2000b0c0 e12fff32 BLX R2
2000b0c4 e1b00004 MOVS R0、R4

由于 LR 是 Undef 异常之后的指令 - BLX 如何识别为 Undefined?注意CPSR是0x00000013,所以这都是ARM模式。但是,R2是0x226d2a08,位于堆区域中,我认为这是不正确的-反汇编有ANDEQ R0,R0,R12,指令是0x0000000C,那里的其他指令对我来说看起来像是数据。所以我认为糟糕的R2是问题所在,我只是想理解为什么Undef在BLX?

thanks!


检查 CPSR 中的 T 位。如果您无意中从 ARM 模式更改为 Thumb 模式(反之亦然),则会出现未定义的指令。

至于 SP 或 LR 被损坏,可能是因为您以错误的模式执行了一些指令,从而在命中未定义的指令之前损坏了它们。

EDIT

回应问题编辑中的新错误情况:

LR 包含 BLX R2 的返回地址,因此它指向 BLX 之后的一条指令是有意义的。

如果执行 BLX R2 时 R2 指向堆,您将跳转到堆并开始执行数据,就像它们是指令一样。这将在短时间内导致未定义的指令异常......

如果您想查看未定义的确切指令,请查看 R14_und 寄存器(在未定义指令处理程序中定义) - 它包含未定义指令之后的下一条指令的地址。

根本原因是 R2 的值不好。假设这是 C 代码,我的猜测是一个错误的指针取消引用,但我需要查看源代码才能确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM 未定义指令错误 的相关文章

  • 无法使用 RVM、Ruby 1.9.2 和 Rails 3 运行 RubyMine 调试器

    我已经设置了全新的 Ubuntu 安装并遵循本指南 http ryanbigg com 2010 12 ubuntu ruby rvm rails and you安装 RVM Ruby 1 9 2 和 Rails 3 然后我安装了RubyM
  • Visual Studio 调试器提示和技巧(适用于 C/C++ 项目)

    我对有关在 Visual Studio 调试器中调试 C C 项目的提示和技巧感兴趣 我最近发现 如果您有一个指向某种数据类型的指针 比如说 char ptr 那么您可以使用以下语法在监视窗口中将其视为数组 ptr 10 这将显示 ptr
  • JavaFX:无法设置绑定值异常

    在我的 javafx 应用程序中 我创建了一个表视图 其中有一些项目 如果项目存在于表视图中 则应启用删除按钮 否则应禁用删除按钮 现在的问题是 当我选择项目并单击删除按钮时 它会引发以下异常 我该如何解决这个问题 这是我的表格视图代码 t
  • 在 Chrome 开发者工具中禁用脚本编辑

    我使用 Chrome 开发者工具来调试 JavaScript 代码 但我对 Chrome 允许在 脚本 选项卡下编辑 JavaScript 文件的方式感到不满 有时 我没有意识到我在 Chrome 中 开始对 脚本 选项卡下的代码进行更改
  • 无法使 PHP PDT xDebug 在 Eclipse 中的断点处停止

    通过选择 在第一行中断 调试器会在输入每个文件时激活 从而允许我单步进入和退出代码 但是 必须通过 50 万步才能到达开始变得有趣的地步 这有点麻烦 我的设置是 WIMP Window 7 PHP 5 3 xDebug config zen
  • 确保始终捕获异常

    C 中的异常不需要被调用函数捕获 没有编译时错误 因此 是否使用 try catch 来捕获它们取决于开发人员的判断 与 Java 不同 有没有一种方法可以确保调用函数始终使用 try catch 捕获抛出的异常 No See 务实地看待异
  • 有什么方法可以判断我的 iPhone 应用程序在运行时是否在调试器下运行?

    如果我的错误处理代码在调试器下运行 我希望它的行为有所不同 具体来说 如果我在手机上运行 未连接到调试器并且断言失败 我想将错误发送到我的服务器 当我在gdb下时 我想闯入调试器 虽然我可以想象苹果将如何编写代码 但我找不到任何关于测试调试
  • 调试时的监视窗口:CS0103:当前上下文中不存在名称“

    我正在使用 Visual Studio Community 2022 64 bit Version 17 4 2 with NET Framework Version 4 8 09032 昨天 2022 年 2 月 12 日有更新 我是通过
  • 通过JVMTI识别异常

    我正在使用 JVMTI 为 Java 应用程序编写一个检测工具 我已经看到 JVMTI 检测何时抛出异常以及何时捕获异常http docs oracle com javase 7 docs platform jvmti jvmti html
  • 如何正确离开临界区?

    我有以下 C 代码 我在其中使用临界区对象 https msdn microsoft com en us library windows desktop ms682530 v vs 85 aspx EnterCriticalSection
  • 如何在 Python 3.2 程序中优雅地包含 Python 3.3 from None 异常语法?

    我正在尝试重新引发异常 以便为用户提供有关实际错误的更好信息 Python 3 3 包括PEP 409 http www python org dev peps pep 0409 它添加了raise NewException from No
  • 尝试更改冻结标题:有 FB 开发人员吗?

    在过去的几年里 这个问题已经被问过几次了 但正如 Facebook 告诉我的那样 Facebook 工程师积极参与 StackOverflow 所以我希望在这里能得到一些快乐 我们已将视频上传到 YouTube 进行了转发并确保我们对此感到
  • 在 GDB 中显示结构体值

    在 GDB 中 给定一个指向结构体的变量 print将显示原始指针值并x将显示指向的原始字节 有什么方法可以显示指向该结构的数据 即字段及其值的列表 print variable 如果这样做 它将在 GDB 中显示该变量的值 您还可以选择显
  • GSON 是一个 Java Throwable

    我有一个对象 其中包含一段数据和关联的异常 Public class MyBean Private String data Private Exception problem 当我尝试GSON toJSON 对象 它给了我一个循环引用抱怨
  • Laravel 5.2 升级 - 找不到类 AuthServiceProvider

    我目前正在花时间将我的项目从 Laravel 4 2 升级到 Laravel 5 2 经过很多麻烦 我设法让 5 1 版本正确运行 因此我按照官方文档中所述开始了 5 1 到 5 2 的过程 https laravel com docs 5
  • 开始调试和附加到进程有什么区别

    当我将项目附加到我的 w3wp exe IIS 工作进程时 我的项目加载速度明显快于 开始调试 时的加载速度 但是 无论我 开始调试 还是 附加到进程 同一个工作进程似乎都在处理相同数量的模块 DLL w3wp exe 为什么附加到进程的速
  • 调试Windows服务

    Scenario 我有一个用 C 编写的 Windows 服务 我已经阅读了所有关于如何调试它的谷歌线程 但我仍然无法让它工作 我已经运行 PathTo NetFramework InstallUtil exe C MyService ex
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • 单步执行 IPython 中的函数

    有没有办法进入 ipython 中函数的第一行 我想象的东西会是这样的 step foo 1 2 运行的ipdb并在第一行设置断点foo 如果我现在想这样做 我必须转到该函数的源代码并添加一个import ipdb ipdb set tra
  • 在 R 中的异常处理中赋值

    while bo 10 x tryCatch getURLContent Site verbose F curl handle error function e cat ERROR1 e message n Sys sleep 1 prin

随机推荐

  • 通过 ssh 启动时 Docker 容器 mongod 错误

    我已经在 docker 容器上安装了 mongodb 并在 ubuntu 14 04 上安装了 openssh 容器正在使用 ssh 运行 但是当我 ssh 进入容器时 尝试启动 mongod 时出现以下错误 root 430f9502ba
  • 位置侦听器超时

    我当前正在使用计时器来确定位置监听器是否超时 问题是 GPS 仍然打开 我不知道为什么 当位置侦听器超时时 是否有一种可以重写的方法或更优雅的方法 考虑向您的位置管理器添加 GPS 状态侦听器 当 GPS 启动 停止 接收第一次定位或卫星状
  • Javascript - 在一页上复制多个文本区域的文本按钮

    我已经搜索过该网站的类似问题 但我仍然不知所措 基本上 我正在为一位即将离职的同事接手一个项目 他的 Intranet 页面计划应该有多个文本区域 每个文本区域都有自己的预定义文本和自己的 复制文本 按钮 单击时 它会复制到用户的剪贴板 我
  • DrawerLayout 和多窗格布局

    我的应用程序使用多窗格布局 http developer android com design patterns multi pane layouts html显示作业列表 每个Assignment可以放在一个AssignmentCateg
  • 我的自动装配数据源在 Spring 中返回 null,这是怎么回事?

    我正在尝试设置我的 dataSource 以获取连接 但它在 conn dataSource getConnection 上返回 null 这是我的 DAO 中的相关代码 Autowired public void setDataSourc
  • 无法登录部署在 Tomcat7 上的 Apache Usergrid

    我在 Ubuntu 14 04 LTS 上下载并构建了 Apache Usergrid 并按照以下给出的说明在本地 tomcat7 服务器上部署了 ROOT warhttps usergrid incubator apache org do
  • Bittorrent:为什么peers字段的值是二进制的,而不是Bencoded列表?

    我正在尝试用 C 语言实现 Bittorrent 首先 在编写代码片段之前 我尝试使用网络浏览器将以下消息 URL 发送到跟踪器服务器 你可以试试这个网址 http torrent ubuntu com 6969 announce info
  • 如何使用 Spark Scala 将 CSV 行拆分为元组

    这是我想通过 Scala 检索的数据 数据如下 用户ID 电影ID 1 1172 1 1405 1 2193 1 2968 2 52 2 144 2 248 首先我想跳过第一行 然后通过 split 分割用户和电影并映射到 userID m
  • 如何从 UITestControl 获取 ItemStatus?

    The UI自动化框架 http msdn microsoft com en us library ms747327 aspx有一个基类 自动化元件 http msdn microsoft com en us library system
  • md5(file_contents_as_string) 等于 md5_file(/path/to/file) 吗?

    If I do 这将始终产生与以下内容相同的哈希值 是的 他们返回相同的 var dump md5 file get contents FILE var dump md5 file FILE 在我的例子中返回这个 string 32 4d2
  • 在没有注释的情况下将 Hibernate 迁移到 JPA

    我有一个大型的非 Java EE 基于 JSF 的 Web 应用程序项目 我们的系统是分层的 在源代码意义上 有一个数据模型包 其上构建的是 DAO 包 我们在 DAO 包中专门使用 Hibernate 的 XML 配置映射 我们确实不想用
  • 外键和模型继承哪个更好?

    我有这样的用例场景 有些地方是游乐场 餐馆 剧院 酒吧 相同place可以有游乐场 餐馆 剧院等 有几种实现方法 使用外键 class Place models Model name models CharField max length
  • 如何检查连接到 GRPC 服务器的客户端

    为了为我的 GRPC 服务器 客户端设置提供更好的调试信息 我正在尝试寻找一个 APIgrpc server这使我能够检查哪些客户端连接到服务器 我发现的最有希望的问题是问题 它给出了如何在 Java GRPC 中执行此操作的起点 http
  • 使用java的X509序列号

    我需要从 X509 证书获取一些数据 如果我在 Windows 中打开证书文件 它会以这种格式显示其序列号 ex 39 65 70 eb d8 9f 28 20 4e c2 a0 6b 98 48 31 0d 我试图使用 java 获取相同
  • 修复了背景附件在 Chrome 中不起作用的问题

    我尝试在 google 上寻求帮助 这似乎是 chrome 中的一个错误 但我仍然找不到解决方案 我已经查看了许多与此类似的 stackoverflow 问题 但这些解决方案仍然没有帮助 当我尝试在页面上向下滚动时 背景图像会闪烁并变得混乱
  • Matlab:bar 不存在公共属性 CData

    Matlab示例代码无法在Matlab 2017a Linux 64位 中运行 https cn mathworks com help matlab ref bar html https cn mathworks com help matl
  • 在堆栈上增长数组

    这本质上是我的问题 在函数的生命周期中 我生成一些整数 然后在也是同一函数一部分的算法中使用整数数组 整数数组仅在函数内使用 因此将数组存储在堆栈上自然是有意义的 问题是在生成所有整数之前我不知道数组的大小 我知道如何在堆栈上分配固定大小和
  • 从另一个 url 加载动态模块 - angular4

    是否可以引用模块 已以 umd 或 es 格式编译 并将其动态加载到已编译的角度应用程序中 主 shell 应用程序托管于 http plugin shell mydomain com http plugin shell mydomain
  • 在没有数据库或用户名的情况下使用 php 密码保护文件夹/页面的最佳方法是什么

    使用没有数据库或用户名但使用 php 密码保护文件夹的最佳方法是什么 基本上 我有一个页面将列出组织的联系人 并且需要密码保护该文件夹 而无需为每个用户提供帐户 只需一个密码 该密码会经常更改并分发给群组 我知道它不是很安全 但我仍然想知道
  • ARM 未定义指令错误

    我在运行嵌入式系统 无协处理器 无 MMU Atmel 9263 时收到未定义指令错误 嵌入式系统的内存范围为 0x20000000 0x23FFFFFF 目前为止我遇到过两个案例 SP 0x0030B840 LR 2000AE78 LR指