MCU+RTOS调试

1. 引言

        在做项目时,百分之三十的时间写代码,还有百分之70的时间用于调试。本期将以Keil为例进行调试章节的讲解,目的在于做出一个标准化的调试步骤,方便大家学习如何调试代码。内容分为基础调试、中级调试及进阶调试三部分,本次主要讲解基础调试。

2. 基础调试

2.1 调试设置

        在Keil中,我们通常通过下载调试器进行调试。常见的下载调试器有DAP/Stlink等,本次讲解以Stlink为例。首先,需要点击魔术棒进行设置,点击魔术棒,再点击DeBug--点击红框中的Use,选择Stlink Debugger,同时将其勾选;如下图所示:

        接下来点击Utilities--取消勾选use debug driver,如下图所示:

        选择Stlink Debugger,如下图所示,最后点击确定。

2.2 调试界面讲解

        点击Keil工具栏的 “d”符号进入调试界面(前提是Stlink已经连接板子),如下图所示:

        进入后调试界面如下图所示:

        接下来介绍一下debug工具栏,如下图所示:

复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代 码会重新从头开始执行。

执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的, 而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查 看的地方设置了断点。

停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止 下来,进入到单步调试状态。

执行进去:该按钮用来实现执行到某个函数里面去的功能,也就是进入函数中去执行每一行语句,这个过程会让你看到。

执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个 函数单步执行。

执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩 余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位 置。

执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功 能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。

汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。

堆栈局部变量窗口:通过该按钮,显示Call Stack+Locals窗口,显示当前函数的局部变量 及其值,方便查看。

观察窗口:MDK5提供2个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗 口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。

内存查看窗口:MDK5提供4个内存查看窗口(下拉选择),该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用 的一个调试窗口 串口打印窗口:MDK5提供4个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似 串口调试助手界面的窗口,用来显示从串口打印出来的内容。

逻辑分析窗口:该图标下面有3个选项(下拉选择),我们一般用第一个,也就是逻辑分析 窗口(Logic Analyzer),点击即可调出该窗口,通过SETUP按钮新建一些IO口,就可以观察这 些IO口的电平变化情况,以多种形式显示出来,比较直观。

系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。

2.3 基础调试步骤

        该调试步骤是笔者个人总结的,仅供参考。首先点击调试,进入调试界面后,此时程序会执行到main函数处,这是因为我们勾选了run to main。

        先点击单步调试,点击执行进去或者是点击执行过去,通常点击执行过去可加快调试速度。目的是检查main函数中的各个硬件初始化函数是否正常运行,看有没有卡在哪个初始化函数无法继续往下执行。注意:通常在第一步出现程序卡住的问题大概率是硬件初始化函数的顺序不对,比如说在lcd初始化函数里边调用了串口的printf函数,但是串口初始化函数在lcd初始化函数后边调用,这个时候就会出现程序卡住的情况。

        如果需要快速执行到某个地方,可以添加断点,再点击执行到断点处即可。也可以选择不添加断点,直接点击执行到断点处,此时程序会全速运行,此时你看通过stlink连接的板子显示的现象是否与你预期的一致,如果不一致或者是没现象,代表程序卡住了。此时,点击停止,程序会自动定位到代码卡住的地方,方便快速纠错。

2.4 持续更新中....

ps:如有需要MCU+RTOS项目的同学,请联系1840813505@qq.com,备注CSDN。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91054.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的数据淘汰策略是什么?有哪些?

1.监测设置了TTL的数据volatile-lru:淘汰最近最少使用的数据volatile-lfu:淘汰最近使用次数最少的数据volatile-ttl;淘汰将要过期的数据volatile-random:随机淘汰2.监测全库数据allkeys-lru:淘汰最近最少使用的数据all…

相控阵波束跃度指向误差Matlab仿真

波束跃度影响:TR芯片移相器位数、阵元数量、校准后阵元初始相位、TR芯片移相器精度、波控计算精度等。用MATLAB进行TR芯片移相器位数、阵元数量对指向误差进行仿真。 close all; %线阵波束跃度仿真 20250726 %beam displacement % 波束跃度影响:TR芯片移…

板凳-------Mysql cookbook学习 (十二--------6)

MySQL 8 导入二进制文件(trailer.ogv)操作指南 在MySQL中导入二进制文件(如trailer.ogv视频文件)通常有几种方法,我将详细介绍每种方法的操作步骤。 方法一:使用LOAD_FILE函数导入BLOB字段 这是最直接的方法,适合中小型二进制文件。sql - 1. …

昇思学习营-【模型推理和性能优化】学习心得_20250730

一、权重的加载 模型包含两部分: base model 和 LoRA adapter 其中base model的权重在微调时被冻结, 推理时加载原权重即可,LoRA adapter可通过PeftModel.from_pretrained进行加载。 二、启动推理 通过model.generate,启动推理…

[AI8051U入门第十一步]W5500-服务端

学习目标: 1、连接TCP/IP 2、学习W5500作为服务端代码一、TCP/IP介绍 TCP/IP 协议栈介绍 TCP/IP(Transmission Control Protocol / Internet Protocol)是互联网通信的核心协议族,定义了数据如何在网络中进行传输和路由。它由多个协议组成,采用分层架构,确保不同设备之间…

C 标准库 <time.h> 函数详解

目录 概述 1 核心数据类型 1.1 time_t 1.2 clock_t 1.3 struct tm 1.4 size_t 2 核心函数 2.1 时间获取函数 2.2 时间转换函数 2.3 时间差计算 2.4 时间格式化函数 3 线程安全版本(POSIX 扩展) 3.1 函数列表 3.2 时间处理完整示例 4 重要…

基于BEKK-GARCH模型的参数估计、最大似然估计以及参数标准误估计的MATLAB实现

基于BEKK-GARCH模型的参数估计、最大似然估计以及参数标准误估计的MATLAB实现。BEKK-GARCH模型是一种多变量GARCH模型,用于估计多个时间序列的条件方差和协方差矩阵。 MATLAB实现BEKK-GARCH模型 1. 准备数据 假设你已经有一个时间序列数据矩阵 returns,每…

TDengine 中 TDgpt 用于异常检测

介绍 TDgpt 内置时序数据异常检测模型 TDengine 中定义了异常(状态)窗口来提供异常检测服务。异常窗口可以视为一种特殊的事件窗口(Event Window),即异常检测算法确定的连续异常时间序列数据所在的时间窗口。与普通事件…

统计学08:概率分布

一、随机变量随机变量是一个将 随机事件 映射到 数值 的数学函数,用于描述事件的结果。随机变量可以是离散的(如骰子)或连续的(如人的身高、体重)。1)概率质量函数PMF——离散随机变量P(X x) 对应于某个值…

vue3【组件封装】消息反馈 S-msgWin.vue (针对父容器对齐,左右居中,可自定义顶部距离)

最终效果成功的提示报错的提示代码实现components/SUI/S-msgWin.vue <script lang"ts" setup> const props defineProps({msg: {type: Object,required: true,},top: {type: String,default: "50%",},duration: {type: Number,default: 3000,}, });…

MySQL 8.0.42创建MGR集群

MySQL 8.0.42创建MGR集群 概述 关于MySQL MGR集群的介绍就不在这里做详细的介绍了&#xff0c;大家可以自己到官网上查看阅读。在这里主要是实际操作方面的内容 总体结构设计如下图服务器节点信息序号角色IP地址数据库端口MGR端口1主节点192.168.56.1043309100612从节点192.168…

《Go Web编程实战派--从入门到精通》的随笔笔记

第二章 Go Web 开发基础2.1第一个Go Web 程序package mainimport ("fmt""net/http" )func hello(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello World") } func main() {server : &http.Server{Addr: "0.0.0.0:80&q…

MySQL在Linux环境下的性能调优

&#x1f4ca; MySQL性能基准测试&#xff1a;知己知彼建立性能基线的关键指标# 核心性能指标监控脚本 #!/bin/bash echo " MySQL Performance Baseline " mysql -e "SHOW GLOBAL STATUS LIKE Questions;" mysql -e "SHOW GLOBAL STATUS LIKE Uptime;…

PyQt事件处理机制深度指南:超越信号与槽的底层掌控

—— 5大核心策略实战案例&#xff0c;解锁GUI交互的底层密码 &#x1f50d; 事件与信号槽的本质差异维度事件处理机制信号与槽机制抽象层级操作系统消息的原始封装对事件的高级封装应用场景控件行为定制/底层交互常规业务逻辑绑定执行顺序先于信号槽触发在事件处理完成后触发性…

10_opencv_分离颜色通道、多通道图像混合

split() 通道分离 void cv::split(const Mat & src,Mat * mvbegin ) merge() 通道合并 void cv::merge(InputArrayOfArrays mv,OutputArray dst ) Mat::at()方法 Mat::at()方法返回一个引用到指定的数组元素。 注意是引用&#xff0c;相当于两者等价&#xff0c;也就是…

Kotlin的datetime库

kotlinx 是一组不是 Kotlin 标准库一部分&#xff0c;但非常实用的扩展项目集合。其中&#xff0c;kotlinx-datetime 是一个跨平台的 Kotlin 时间日期处理库。 如何在项目中使用该库 Gradle 项目中 在 repositories 块中添加 Maven Central 仓库&#xff1a; repositories {…

基于模型蒸馏的大模型文案生成最佳实践

背景 大语言模型在生成高质量文案方面表现优异&#xff0c;然而其巨大的计算资源消耗和存储需求&#xff0c;使得实际应用尤其是在资源受限场景中的应用充满挑战。企业在寻求高效的文案生成时&#xff0c;常常面临着在性能和资源之间权衡的困境。在这种背景下&#xff0c;模型…

调用通义千问大模型实现流式对话

前言 我使用的是硅基流动中通义千问免费的大模型&#xff1a;我的技术栈使用的 Next14.2 全栈框架。 代码结构 需要使用的库&#xff1a; npm i ai openai目录结构&#xff1a; 基础测试页面 test-openai/page.tsx&#xff1a; use client;import { useChat } from ai/react;ex…

如何搭建Linux环境下的flink本地集群

第一步&#xff0c;搭建Linux环境 这里我使用的是 WSL2 安装前&#xff0c;先用管理员打开终端&#xff0c;执行以下三条命令&#xff0c;目的是开启安装 WSL2所需要的环境 //开启适用于windows的Linux子系统 dism.exe /online /enable-feature /featurename:Microsoft-Wind…

算法:链表part02:24. 两两交换链表中的节点 + 19. 删除链表的倒数第 N 个结点 + 面试题 02.07. 链表相交

24. 两两交换链表中的节点题目&#xff1a;https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 讲解&#xff1a;https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html 复习可以先…