首页 > 其他分享 >CM3调试系统简析

CM3调试系统简析

时间:2024-06-22 09:33:07浏览次数:12  
标签:代码 ISD51 简析 代码执行 串口 执行 CM3 调试

CM3 调试系统简析

**“一直以来,单片机的调试一直不是很突出的主题,很多简单些的程序在开发中,甚至都没有调试的概念,而只是把生成的映像直接烧入片子,再根据错误症状来判断问题,然后修改程序重新烧,周而复始,直到问题解决或放弃为止。” **

—《Cortex-M3 权威指南》

大部分初学者在学习嵌入式软件时,往往只注重函数 API 的使用和功能的实现,对于调试工具的使用往往不求甚解,殊不知,熟练使用调试工具对嵌入式设备进行故障排查往往是必不可少的技能。

为什么我们需要使用单片机调试?你可能会问这个问题

畅想一下,当代码有好几个分支时,我们想知道当前代码执行的是哪个分支,或代码执行到某一步时,某个变量的值是多少,抑或是我们想知道某个函数被调用了几次、执行时间是多少?

你可能会说:诶,你看我可以用 LED 状态指示灯来判断当前代码的执行情况啊,我还能用这个串口通信输出变量的值,我看那个串口上位机软件接收时间不就能知道代码执行时间了嘛。

没毛病,这个方法的的确确可以,不过有十分大的限制性:

其一:代码分支复杂情况下无法判断代码执行情况;

其二:无法精确知道代码的执行时间,譬如要求精确到 us 级别;

其三:在功能无法正常运行时,无法进行调试,比如时钟初始化就有问题,后面代码都无法执行。

同时,想象一下如下情况,我们想要同时完成:

(1)使用 ADC 外设扫描八个通道电压值,采样率为 1KHz,我们想知道每个时间点上八个通道的电压值;

(2)与此同时,我们还使用了串口外设,我们想知道某个串口在某种情况下某个寄存器的值;

(3)在某个代码段的某种情况下总是出现 bug,我们想让单片机执行一次代码就暂停一下,同时查看代码中相关变量的值和相关寄存器状态;

(4)整套程序还使用了 RTOS,我们想知道每个任务的执行时间和执行顺序。

此时,你会发现基于串口通信数据输出的“调试方法”不再适用。

你:不慌,你看,我们可以创建一个定时器中断服务程序,利用串口外设,软件定时解析从 PC 端发送的各种指令,对指令进行解析输出寄存器或者变量的值,对各个任务也可以利用 CPU 主频和多个计数变量完成对任务的执行时间和执行顺序的解析。除了不能一步一步执行程序外,照样可以满足其他功能。

**确实,可以,但只限在 MCU 速率较低的情况下,实际上 51 单片机的调试工具 ISD51 在线调试模式下就是这么干的,ISD51 在 8051 系统里增加了一个串口中断函数 (ISD51 中断) 。当 ISD51 连接到 uVision 调试器时, 8051 输入 ISD51 的中断函数。只要到程序运行一被停止, 8051 就只运行 ISD51 中断服务程序。当 uVision2 调试器发出一个"Go"的指令, 8051 就脱离 ISD51 中断函数并且运行用户程序。 **

问题是,该方法会使得程序执行效率大大降低,对于 ISD51 在线模式来说,它的调试会使得程序运行速度将会比原来慢 100 倍,这将使得原本需要高速执行的程序无法正常工作,导致时序出现重大问题。
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image

image

视频课程可以查看以下链接:

bilibili:https://www.bilibili.com/video/BV1bs4y1k7uT?t=2.2
image

原文档可以在以下链接下载:

Github:https://github.com/leezisheng/Doc
image

image

标签:代码,ISD51,简析,代码执行,串口,执行,CM3,调试
From: https://blog.csdn.net/weixin_44719294/article/details/139872487

相关文章

  • Fiddler 是一个功能强大的网络调试工具,通过掌握其高级功能,您可以更深入地进行流量分析
    Fiddler是一个功能强大的网络调试工具,主要用于捕获、检查和修改HTTP请求和响应。以下是一个Fiddler初级应用的大纲,帮助你快速了解如何使用它进行网络调试和分析:1. 安装和基本设置下载和安装Fiddler。启动Fiddler,并了解主界面的基本布局。配置浏览器或应用程序以使用......
  • vue-devtools (firefox浏览器,火狐浏览器) Vue调试
    vue-devtools(firefox浏览器,火狐浏览器)vuedevtools  vue-devtools(firefox浏览器) 打开firefox浏览器,使用快捷键【Ctrl+Shift+A】打开组件管理列表,并搜索vue  安装   重启Firefox 访问一个Vue应用,打开开发者工具 ......
  • Docker + Visual Studio Code IDE实现PHP Xdebug调试
    目录一、前期准备二、配置文件1.VisualStudioCodeIDE配置2、配置docker中php的xdebug.ini三、开始调试参考文档一、前期准备1、安装VSCode软件;2、在VSCode中安装PHPDebug插件;3、安装好Docker4、在容器中php中安装安装Xdebug扩展根据这个链接操作即可:X......
  • 【调试笔记-20240617-Linux- frp 结合 nginx 实现内网网站在公网发布】
    调试笔记-系列文章目录调试笔记-20240617-Linux-frp结合nginx实现内网网站在公网发布文章目录调试笔记-系列文章目录调试笔记-20240617-Linux-frp结合nginx实现内网网站在公网发布前言一、调试环境操作系统:Windows10专业版调试环境调试目标二、调试步骤公......
  • Chromium 调试指南2024 Mac篇 - 准备工作 (一)
    1.引言Chromium是一个由Google主导开发的开源浏览器项目,它为GoogleChrome浏览器提供了基础框架。Chromium不仅是研究和开发现代浏览器技术的重要平台,还为众多其他基于Chromium的浏览器(如MicrosoftEdge、Brave等)提供了基础。调试Chromium对于开发人员来说是一个至关重要的技......
  • clion调试不显示qt变量值的问题
    用Clion做QT开发,调试时不能正常显示qt相关变量的值,只能显示地址,还要切换到qtcreator调试,很麻烦,就在网上找解决办法。搜了一圈,果然找到了,按照这篇文章中Clion调试QTQString看不到值问题处理_macosclion看不到qt变量内容-CSDN博客设置没用,又找到官方文档上一顿操作,还是不行。Q......
  • 【第12章】别人的工作流,如何使用和调试(下)?(安装视频生成模型SVD/服务器报错/爆显存/丢图
    ......
  • QEMU + Vscode + Arm Arch's Linux调试小记
    QEMU+Vscode+ArmArch'sLinux调试小记​ 前几天看到了一篇讲授如何调试ARMLinux内核的文章,这里现在记录一下调试ARMLinux内核的办法下载QEMU​ 对于ArchLinux用户而言,没有必要自己编译,直接上AUR源下载就行。我自己有打算研究和调试多个架构,所以我自己下载了:yay-Sqem......
  • 网络调试利器:Chrome Network工具的详细指南
    前言作为测试工程师,熟练使用Chrome开发者工具中的Network工具可以极大地提升我们调试和分析Web应用的能力。Network工具用于监视网络活动,包括HTTP请求、响应、资源加载时间和数据传输量等。本文将详细介绍如何使用这个强大的工具来进行网络分析和调试。打开Network工具打开Ch......
  • 安卓自动化Tasker和Macrodroid(含ADB调试)
    1.前言首先讲讲自动化的初衷吧。我平时是很少用手机的,用手机就是拍照、聊天和看文章。我个人不是很喜欢现在的聊天方式,它不是纯粹放松的个人聊天,还夹杂学习、工作通知,通知是要看,但个人聊天我只希望在我自己想聊的时候聊,不希望我本来打开手机是要做一件正事,但是因为看到聊天弹窗......