keil调试技巧 keil中的debug调试技巧单片机调试技巧 定位单片机程序异常位置 定位程序异常错误原因计算程序执行时间多少

ops/2024/11/15 0:56:36/

单片机常用调试技巧(B站UP分享)

如何查看程序运行时间

使用Event Recorder 组件 查看运行时间

https://blog.csdn.net/twx11213030422/article/details/114013796

https://blog.csdn.net/weixin_43866583/article/details/125874888?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125874888-blog-114013796.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125874888-blog-114013796.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=1

在这里插入图片描述

在这里插入图片描述

#include "EventRecorder.h"

在这里插入图片描述
在这里插入图片描述

添加初始化代码

在这里插入图片描述

/* 初始化 EventRecorder 并开启 */EventRecorderInitialize(EventRecordAll, 1U);EventRecorderStart();

时间测量起始函数

EventStartG (slot) 
或者 
EventStartGv (slot, val1, val2)

函数说明:

1)函数中的字母 G 是表示分组 A,B,C,D,即实际调用函数为 EventStartA,EventStartB,EventStartC 和 EventStartD。

2)函数的第一个形参 slot 的范围是 0-15,也就是最大可以测量 16 路。

3)函数后面的两个形象 val1 和 val2 是 32 Bit变量,用户可以用这两个形参来传递变量数值给 Event Statistics 调试组件里面,用于图形化展示。
时间测量结束函数

EventStopG (slot) 
或者 
EventStopGv (slot, val1, val2)

函数说明:

1)函数中的字母G是表示分组A,B,C,D,即实际调用函数为EventStopA,EventStopB,EventStopC 和 EventStopD。

2)函数的第一个形参 slot 的范围是 0-15,也就是最大可以测量 16 路。

3)函数后面的两个形象 val1 和 val2 是 32 位变量,用户可以用这两个形参来传递变量数值给 Event Statistics 调试组件里面,用于图形化展示。
使用示例–比如

在开始和结束添加的

	EventStartA(0);//测量开始处EventStopA(0);//测量结束处

在这里插入图片描述

#include "EventRecorder.h"
单片机_通信协议等.assets/image-20221115133330241.png" alt="image-20221115133330241" />

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如何定位程序异常位置 定位程序卡死异常位置

https://blog.csdn.net/supermuscleman/article/details/103929606

点击全速运行
在这里插入图片描述

通过LR的值确定当前堆栈使用的PSP或者MSP
在这里插入图片描述

然后在memory中定位到堆栈地址、然后就找到LR=08000F2D、PC=08000A02

在这里插入图片描述

Disassembly中,查找定位代码

在反汇编窗口中点击右键,选中show disassembly at address 。

输入LR地址:为发生异常后调用的下一条指令的地址,可看到发生异常的为
在这里插入图片描述
在这里插入图片描述

输入PC地址:可以定位到发生异常的调用语句
在这里插入图片描述

keil常用调试手段

要查看变量一定要用全局变量,效果更好

资料来源:https://www.bilibili.com/video/BV1FE411i79f/?spm_id_from=333.788.recommend_more_video.3&vd_source=16940ba3adbc66f0fb14e0c1d87db878

存储位置设置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

观察硬件寄存器或者直接修改硬件寄存器

在这里插入图片描述

想跳过某一句,执行另一句话,或者直接执行到,直接修改PC指针

在这里插入图片描述

黄色箭头和绿色箭头都代表什么

在这里插入图片描述

不知道那个中断出现问题,或者没有写中断异常服务函数,找不到出问题中断

在这里插入图片描述

不知道要观察的变量在哪里被更改了,找不到–解决:给变量添加跟着断点,每个更改的操作都被捕捉

如果硬件改变了,或者DMA改变的

在这里插入图片描述

计算中断服务函数需要多少时间

在这里插入图片描述

单片机开发过程中的调试绝招–韦东山

来源:https://www.bilibili.com/video/BV1bB4y1q72a?spm_id_from=333.999.0.0&vd_source=16940ba3adbc66f0fb14e0c1d87db878

栈回溯原理及示例

函数调用关系

在这里插入图片描述

修改bin文件自己实现断点

使用比较偏的编译器或者芯片,或者产品没有调试接口

想查看代码任意位置的状态

这一部分适用于不满足调试条件的,,有点看不懂、可以

答疑环节(内存分配-内核了解等)

推荐的书

问:单片机使用堆、运行一段时间后,造成碎片化一般怎么处理?

少用malloc和free 或者少用free

问:内存溢出错误

使用专业工具、或者对free 或者mollc函数替代

问:要注意的函数strcopy

要注意,有些可以替换防止溢出,strcpy 替换成strncpy 还有sprintf 替换为snprintf这些会指定大小。


http://www.ppmy.cn/ops/110093.html

相关文章

Java集成开发环境(IDE)之 => “IntelliJ IDEA“ 安装

一、软件介绍 IntelliJ IDEA 是一款由 JetBrains 公司开发的集成开发环境(IDE),它主要用于 Java 语言的开发,但同时也支持多种其他编程语言,如 Kotlin、Groovy、Scala、Python、Ruby、PHP、JavaScript、TypeScript 等…

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C的类型转换 📒1. C语言…

【MySQL】了解并操作MySQL的缓存配置与信息

目录 一、查看缓存配置 二、查看缓存信息 查询MySQL的缓存相关信息,一般我们用两个命令: show variables like %query_cache%; show status like %qcache%; 一、查看缓存配置 查看缓存配置的相关的系统变量变量,返回给我们服务器缓存的配置…

钉钉虚拟位置打卡

我用蓝奏浏览器分享了[base_r_sign], 下载链接:https://wwp.lanzoup.com/i5NK526t7u9e 提取码 : 7wib, 你可以不限速下载哦\n\n通过百度网盘分享的文件:彤彤240724…\n链接:https://pan.baidu.com/s/1x_xhRQDopvQBAg-nWUNf4Q?pwd6666\n提取码:6666 下载好以后先配置…

2024 天池云原生编程挑战赛决赛名单公布,9 月 20 日开启终极答辩

历时 4 个月,2024 天池云原生编程挑战赛决赛名单公布! 本届大赛规模创新高,参赛战队达 20000 支, 广覆盖国内外优秀高校和杰出企业!吸引了来自北京大学、清华大学等 176 所国内外优秀高校,以及美团、米哈游…

【Http 每天一小问 ,Post上传文件时, 文件和 -d(--data)和 -F(--form) 不能同时存在 ,怎么办】

今天在做文件上传的时候 ,遇到报错, Warning: You can only select one HTTP request method! You asked for both POST , 调用命令 curl -X POST https://example.com/log/upload \-F "file/usr/log/app.log" …

贪心算法day29|134. 加油站(理解有难度)、135. 分发糖果、860. 柠檬水找零、406. 根据身高重建队列

贪心算法day29|134. 加油站(理解有难度)、135. 分发糖果、860. 柠檬水找零、406. 根据身高重建队列 134. 加油站暴力非暴力 135. 分发糖果860. 柠檬水找零1.哈希表2.直接法 406. 根据身高重建队列 134. 加油站 在一条环路上有 n 个加油站,其…

中级练习[4]:Hive SQL商品销售与用户增长数据分析

1. 筛选去年总销量小于100的商品 1.1 题目需求 从订单明细表(order_detail)中筛选出去年(2021年)总销量小于100的商品及其销量,同时不考虑上架时间少于一个月的商品。假设今天的日期是2022-01-10。 期望结果如下: sku_idnameorder_num1xiaomi 10513apple 12364xiaomi 13…