在 Cortex-M3 CPU 上通过 printf 进行输出调试,在 BKPT 指令处停止 + JTAG 和 sw 端口混乱

2023-11-29

我有一个 Keil ULINK2 USB 仿真器盒连接到JTAG我的主板上的连接器,与板载 Cortex-M3 CPU(TI/Stellaris/LuminaryMicro LM3S 系列)配合良好。看起来 JTAG 和 SWJ-DP 端口在这些 CPU 上共享相同的引脚(以及板上的连接器)。一个似乎没有 ITM (printf) 功能,而另一个则具有。

以前的固件人们一直使用stdio到UART(串行端口),但我需要释放串行端口,以便调试消息不会干扰从串行端口发送/接收的其他数据,因此我需要跟踪消息去其他地方。遗憾的是我这块板上只有一个串行端口。我认为该 CPU 中的 ITM(跟踪)功能意味着我可以将调试 printf 消息直接发送到我的调试器/IDE (Keil uVision)。 TI/Stellaris CPU 文档将此功能称为“串行线 JTAG 调试端口 (SWJ-DP)”,据我了解,对此功能的支持绝对是 Keil uVision IDE 中实现的功能。

在我的代码中添加 printf 消息会导致我的代码在开始调试时锁定。锁定似乎位于链接到我的应用程序的 RTL 库中,在函数 _sys_open 中的 BKPT 指令中:

                 _sys_open:
  0x00009D7A B50E      PUSH     {r1-r3,lr}
  0x00009D7C E9CD0100  STRD     r0,r1,[sp,#0]
  0x00009D80 F7FFFC0F  BL.W     strlen (0x000095A2)
  0x00009D84 9002      STR      r0,[sp,#0x08]
  0x00009D86 4669      MOV      r1,sp
  0x00009D88 2001      MOVS     r0,#0x01
>>0x00009D8A BEAB      BKPT     0xAB
  0x00009D8C BD0E      POP      {r1-r3,pc}

上面似乎是调用的代码的一部分__rt_lib_init_stdio_1.

到底是怎么回事?我不知道BKPT是做什么的。我认为它会引发一个软件断点,然后应该由调试器处理? Keil/ARM ULINK2 软件和硬件不应该已经为此进行配置吗?是否有一些技巧可以使调试 printf 与 Keil JTAG/sw 端口一起工作?

我不确定 sw 和 JTAG 端口之间有什么区别。 sw到底意味着什么,我相信它指的是板上JTAG物理连接器的两种可能模式之一,其中JTAG是经典但更有限的模式,没有跟踪支持,sw模式增加了跟踪支持,而不向JTAG添加任何引脚连接器布局?但这是嵌入式系统,神秘是常态。我是 Cortex-M3 开发的新手,自从 ARM7TDMI 时代以来,很多东西对我来说都是新的。但 Keil uVision 打印出以下消息:“ITM 仅适用于 SW 端口,不适用于 JTAG”。 SW 是您必须在主板上设计的不同物理端口吗? (我使用的是定制设计的应用板,而不是开发入门板。)

[谷歌搜索让我了解到这样一个事实_sys_open和一些杂注__use_no_semihosting_swi还有其他一些东西与这个难题密切相关,ROM 中的 BRKPT 指令可能是 SWI(“软件中断”)ARM 指令的某种 ARM 变体。]


这对我来说是一个失败,无法理解 stdio 没有实现,而是您必须提供自己的实现,通常在名为“retarget.c”的文件内完成。文件名是纯粹的约定,但在 Keil 的 uVision/RTLIB 文档中有详细记录(事实证明)

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

在 Cortex-M3 CPU 上通过 printf 进行输出调试,在 BKPT 指令处停止 + JTAG 和 sw 端口混乱 的相关文章

  • AOSP 的“午餐”组合是什么意思?我需要选择什么?

    我是 Android 设备 ROM 开发的新手 无论如何 我现在正在为具有 64 位处理器的中国设备构建 AOSP 我按照 source android com 上的菜单进行操作 当我运行 午餐 命令时 终端显示 午餐菜单 选择一个组合 我
  • 我无法在剃刀视图中设置断点

    我知道可以在 MVC Razor 视图中设置断点 但出了点问题 它不再工作了 我尝试重新启动 Visual Studio 2013 并更改调试的一些选项 你有什么建议吗 感谢弗拉基米尔 我能找到解决方案 我必须清理并重建整个解决方案 我之前
  • 可以禁用“应用程序错误”对话框吗?

    我使用 Hudson 作为持续集成服务器来测试 C C 代码 不幸的是 我在某个地方有一个错误导致内存损坏 因此在某些 Windows 计算机上我有时会收到一个 应用程序错误 对话框 解释一条指令引用了无法读取的内存 弹出此对话框并基本上挂
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • 在嵌入式 Jetty 上使用 DefaultServlet 提供静态 html 文件

    我正在开发一个需要独立的项目 因此我决定将 Jetty 嵌入到我的应用程序中 我将提供静态 HTML 页面 一些 JSP 页面 并且还将使用一些自定义 servlet 我找到了一个完美的示例 说明如何设置嵌入式 Jetty 来完成所有这一切
  • 如何记录 ssh 调试信息?

    我需要将 ssh 调试信息的输出写入文件中 这 ssh v email protected cdn cgi l email protection gt result txt ssh v email protected cdn cgi l e
  • :target 伪类在 Firefox 中无法正常工作

    我正在使用 target 伪类制作一个具有 CSS 灯箱类型效果的页面 当您单击图像时 会弹出一个包含信息的框 当您单击任意位置时 该框会再次消失 它在 Chrome 和 IE 中运行良好 但在 Firefox 中存在一个奇怪的错误当您将鼠
  • 直接在 ARM 目标上调试单声道应用程序

    我最近在 BeagleBone 嵌入式 ARM 设备上安装了 Mono 希望通过 USB 连接 Kinnect 传感器并使用 C Mono 控制它 我想知道 Mono 我正在使用 MonoDevelop 但我想这个问题也适用于 VS 是否允
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor
  • 两个程序对象运行时比较的方法

    我正在进行一种特定类型的代码测试 该测试相当麻烦并且可以自动化 但我不确定最佳实践 在描述问题之前 我想澄清一下 我正在寻找合适的术语和概念 以便我可以阅读有关如何实现它的更多信息 当然 欢迎就最佳实践提出建议 但我的目标很具体 这种方法叫
  • 如何在 IntelliJ Kotlin 项目中使用条件断点动态调试变量时更改值?

    在 Java 项目中 通过 mis 调试时可以实现这一点 使用条件断点为属性或变量设置值 Java断点 https i stack imgur com I4JL2 png 不幸的是 同样的事情在 Kotlin 项目中是不可能的 错误是 赋值
  • 调试 Java InterruptedException,即查找原因

    在调试Android应用程序时 有时中断异常发生并使应用程序崩溃 我已经能够在默认异常处理程序上设置断点 但调用堆栈不提供信息 at java util concurrent locks AbstractQueuedSynchronizer
  • Nodejs 调试生产中的错误

    我有一个在生产环境中运行的 Nodejs 脚本 我不太可能 千分之一 遇到这样的错误 TypeError value is out of bounds at checkInt buffer js 1009 11 at Buffer writ
  • Visual Studio 加载符号

    我正在研究一个冷聚变 http en wikipedia org wiki ColdFusion项目已经有一段时间了 Visual Studio 至少对我来说开始表现得很奇怪 我观察到 当我开始调试时 它构建了项目 开始部署 部署完成并开始
  • 交叉编译armv5,但它创建v7二进制文件

    我设法为arm926ej s创建了一个目标文件我在 qemu 上使用 Debian Arm arm linux gnueabi gcc 4 4 static O c mcpu arm926ej s hello c o hello root
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • 英特尔的最后分支记录功能是英特尔处理器独有的吗?

    最后分支记录是指存储与最近执行的分支相关的源地址和目标地址的寄存器对 MSR 的集合 它们受英特尔酷睿 2 英特尔至强和英特尔凌动处理器系列的支持 http css csail mit edu 6 858 2012 readings ia3
  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • chrome 调试器承诺在暂停时不会解析?

    也许我没有正确调试承诺 但基本上 如果您在断点处停止并运行异步代码 它实际上不会完成 直到您恢复执行为止 这是一个问题 调试器允许您快速试验多个 api 方法 但如果您恢复它 您就不能 debugger now type the follo
  • 映射文件和链接器文件之间的区别

    链接器生成的映射文件与包含内存段本身的链接器文件有什么区别 链接器 文件是链接器的一组命令 涉及如何在内存中布置所有内容 并由程序员创建 映射 文件是所有内容在内存中位置的列表 由链接器创建

随机推荐

  • open() 函数对于包含特殊字符的文件路径无法正确运行

    我正在写这个简单的代码 file input File to read fhand open file r 我要打开的文件名为 test txt 它位于子文件夹中 因此 我在请求的输入中输入的是 DB test txt 嗯 它不起作用 返回
  • 如何在php中的特定日期发送?

    我想要一张电子贺卡或类似的东西 用户可以选择电子贺卡 选择后 他必须输入一些字段 例如姓名 收件人和发件人 电子邮件 收件人和发件人 消息 我想让用户选择发送电子贺卡的日期 如何在特定日期发送电子贺卡 我需要编写一个每天运行的脚本吗 怎么做
  • 带有角度的 requirejs - 不解决嵌套路由的控制器依赖关系

    The RequireJS当路由具有多个级别时 无法正确解决依赖关系 如下所示http www example com profile view 如果我有http www example com view 控制器依赖性已正确解决 我的 bo
  • python:递归检查以确定字符串是否是回文

    我的任务是定义一个过程 is palindrome 它将字符串作为输入 并返回一个布尔值 指示输入字符串是否是回文 在这种情况下 单个字母应该返回 True 空字符串也应该返回 True 不幸的是 我没有得到预期的结果 我很感激你的帮助 我
  • 修改 PhaseListener 中的 JSF 组件树

    我有一个问题 我已经实现了一个 PhaseListener 它的目的是向树中附加有消息的任何 UIInput 组件添加一个样式类 如果没有附加任何消息 则删除该样式类 PhaseListener 在 RENDER RESPONSE 阶段运行
  • ST2 键盘映射:“expand_selection”的参数

    有谁知道如何在 Sublime Text 2 中编辑 expand selection 键盘映射 以便它只选择当前行而不是后面的换行符 默认的键盘映射是这样的 keys ctrl l command expand selection arg
  • Android:尝试 HttpURLConnection.getOutputStream() 时抛出 SocketException

    这是我的第一个 Android 程序 它是一个修改后的 hello world 我在 MAC 上的模拟器上运行它 我尝试与 NET Web 服务通信 但出现异常connection getOutputStream 我可以从模拟器访问该网站
  • scanf() 可变长度说明符

    如何使用变量来指定最大字符数scanf 应该读进去吗 例如使用printf 你可以像这样使用 define MAXVAL 5 printf Print at maximum MAXVAL chars s n MAXVAL myStringH
  • JS ES6 通过键数组过滤对象的正确方法

    我想获取一个对象数组并过滤每个对象以仅返回键与数组中的项目匹配的属性 例如 const myKeys key 1 key 3 const myArray key 1 Some Value A key 2 Some Other Value A
  • jqgrid 搜索弹出窗口允许删除所有过滤器!

    我正在 JqGrid 上尝试非常简单的搜索弹出窗口 请参阅下面的代码 有几个问题 The popup comes up with AND OR and controls at the very top See screenshot belo
  • pandas to_csv输出引用问题

    我在获取熊猫时遇到了麻烦dataframe to csv 输出正确的引用字符串 import pandas as pd text this is out text df pd DataFrame index 1 columns 1 2 df
  • 是否可以使用 OpenGL 以 RGB888 进行渲染?

    我在各种设备上的 Android 上玩过一段时间的 OpenGL 除非我错了 否则默认渲染始终使用 RGB565 像素格式执行 不过 我想使用 RGB888 渲染更准确的颜色 The GL表面视图文档提到了两种与像素格式相关的方法 the
  • 由于 Web API 中的特殊字符,未设置 Post 值

    我正在尝试向我的 Web api 服务发布帖子 重点是 在发送类似消息时 message it is done 工作正常 但是 当我在消息中使用 p 等特殊字符时 它无法转换我的 json 因此 post 对象保持为空 我能做些什么 这要么
  • 在 SAS 中导入时删除列中的空格

    我有一个 CSV 文件 我想将其导入 SAS 但 CSV 的列名有空格 例如 其中一列是 国家 地区代码 我想删除删除空格并将 放在该位置 以便列名称变为 Country Code 任何帮助 我如何使用 SAS 代码来做到这一点 如果它是
  • Rails 中嵌入的 ruby​​ 语法“<%= .. %>”[重复]

    这个问题在这里已经有答案了 我对以下有关 ERB 模板的想法是否正确 任何建议将不胜感激 带有等号 的嵌入式 ruby 语法是否旨在渲染某些输出 而没有等号 的则不然 当你使用您将表达式值渲染到输出中 尽管只是简单地写一些Ruby不会呈现为
  • 将 JVM/JRE 设置为自动使用 Windows 代理

    我确实看到了有关为 JVM 设置代理的问题 但我想问的是如何利用已经配置的代理 在 Windows 上 这是我的问题的演示 转到控制面板 gt Java 并设置代理地址 运行以下简单的小程序代码 我使用的是 Eclipse IDE impo
  • 使用createview和modelform在django中自动将登录用户设置为作者

    我正在构建一个前端表单 允许某人在不访问管理员的情况下发布文章 当用户登录时 我希望他 她能够写一篇文章 保存后 我希望该用户自动设置为文章的作者 我陷入了僵局 任何帮助将非常感激 模型 py from django db import m
  • 如何强制 linq to sql 在生成的 sql 中将 ntext 列转换为 nvarchar(max) ?

    下面的问题让我花了几个小时寻找解决方案 我终于找到了它并想分享 这样我就可以节省其他人花在上面的时间 我在 linq to sql 中有一个查询 需要对类型为 ntext 的列进行排序和分组 对 ntext 列进行排序或分组的原因 text
  • Windows/Python pygame.error:添加 Mp3 文件后视频系统未初始化

    我刚刚在我的 pygame 游戏中添加了一些音乐 但我认为代码太混乱了 没有任何东西在正确的位置 由于添加了此内容 我现在收到此错误 回溯 最近一次调用最后一次 文件 C Users 1234 AppData Local Programs
  • 在 Cortex-M3 CPU 上通过 printf 进行输出调试,在 BKPT 指令处停止 + JTAG 和 sw 端口混乱

    我有一个 Keil ULINK2 USB 仿真器盒连接到JTAG我的主板上的连接器 与板载 Cortex M3 CPU TI Stellaris LuminaryMicro LM3S 系列 配合良好 看起来 JTAG 和 SWJ DP 端口