调试
文章平均质量分 76
硬件和软件调试笔记
LostSpeed
c++ coder
展开
-
gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建
正在迁移Smoothieware_best-for-pnp到MCUXPresso的失败实验中徘徊.将Smoothieware_best-for-pnp升级到和MCUXPresso相同的10.3Smoothieware_best-for-pnp编译不过了.报错代码迁移到MCUXPresso工程, 是可以编译过的.观察到Smoothieware_best-for-pnp用的是arm-none-eabi-g++.exe, MCUXPresso用的是arm-none-eabi-c++.exe。原创 2023-05-22 14:57:51 · 1061 阅读 · 0 评论 -
由memcpy越界引起的崩溃
一个linux的cm出了问题,在开发环境下,是正常的。在现场是崩溃的。比较环境的区别,输入的数据不一样。还好运气不错,拿到现场的数据,在开发环境中也能重现其中一个数据引起的崩溃问题。崩溃现象,单步到函数fnA, 任务都做了,看任务结果也都有效,但是从函数返回时,还没到调用处,就崩溃了。这bug现象,我第一感觉就是发生了数据写的越界,导致栈上的返回地址被覆盖成了意料之外的地址。因为其中一条数据可以重现bug, 就去单步,开始没看出来。原创 2017-12-02 13:30:13 · 8524 阅读 · 0 评论 -
Arduino - Debugging on the Arduino IDE 2.0
弄了2块开发板(Mega2560(MCU is ATmega2560), Arduino Nano Every(MCU is ATMega4809)).安装了最新版的Arduino IDE(2.0.3), 发现这2个板子均不支持单步调试. 只能将程序编译完, 上传到开发板盲跑, 最多打印一些串口调试语句供参考. 这不难为我啊.手头正好有个固件, 现在硬件都没好呢, 不知道固件是否好使. 如果有问题, 那不好排错和学习啊.原创 2022-12-27 21:50:04 · 3872 阅读 · 0 评论 -
SysinternalsSuite - 操作整理
SysinternalsSuite - 操作整理前言以前使用SysinternalsSuite,只是简单用一下。今天看到资料,是SysinternalsSuite作者出的。对SysinternalsSuite的细节用法有了进一步了解。笔记实验环境win10 21H2 + SysinternalsSuite 2022环境变量将SysinternalsSuite的路径加入环境变量,工具包中有些命令行程序需要在cmd窗口中执行。命令行程序加 --help 可以看到细节用法。在cmd窗口中打开一原创 2022-05-06 16:20:54 · 1729 阅读 · 0 评论 -
解决一次HardFault的bug
笔记正在写固件工程, 程序框架差不多了, 在和设备通讯.设备上改一个参数, 固件工程中看这个参数是否要保存, 如果是不同的值, 就写入文件.发现只要一调用这个写参数的函数, 再运行几秒, 固件工程就会进HardFault_Handler.如果不调用这个函数, 就正常.开始检查这个函数, 能保证100%的正确.而且从这个函数出来, 单步几下, 也不会HardFault.最后想了一个笨招.这个HardFault在调用写参数文件的函数后, 不是必现么?好.在和这个设备通讯的所有函数(大概50+原创 2022-01-15 22:54:31 · 323 阅读 · 0 评论 -
MAX3232使用全部2路串口互相干扰的问题
前言做了一块4路3V3TTL转2路485 + 2路232的接口板.TTL转232用的MAX3232(正品), 电源5V.做回来, 初步看, 好像是好的.进一步测试, 发现有问题.2路485是好的, 但是232的2路串口之间有干扰, 引起接收乱码.232部分的原理图如下:DIN1, ROUT1, DIN2, ROUT2通过RS0108直接上了MCU的TTL串口.写了固件程序来测试收发, 发现2个485是好的, 2个232问题现象如下:2路232发送都是好的, 在电脑端端口助手上都能按照96原创 2022-01-08 23:42:57 · 10537 阅读 · 0 评论 -
变量命名不规范引起的bug
笔记在同事的固件工程上, 改一个版本出来, 进行中.按照以前同事的是思路, 添加了一个新的设备处理的回调.添加完, 美滋滋的试试, 突然发现UDP线程和socket命令处理现场根本就没 进入.但是可以ping通这个设备, 而且MDK固件工程还在跑.在等锁? 内存分配失败?还好, 我知道我在加这个设备处理实现前,是好使的, 用我自己做的上位机程序, 是可以和设备通讯的.所以如果自己改了程序, 要尽早测试, 如果发现和自己改的代码不相关的问题, 也要查清除, 先回到自己改之前, 看看是不是自己改代原创 2022-01-07 18:06:06 · 735 阅读 · 0 评论 -
MAX3232
笔记前2周, 用同事留下的模块板子(4路3.3VTTL转4路RS485/RS232)时, 将其中的2路485不焊接, 焊接1片MAX3232, 但是2路RS232不通讯.因为同事没见过这模块板子上用RS232的情况, 就只能分析修正.当时分析,是3.3VMCU和5V供电的模块板子没做TTL电平转换引起的问题.当然这肯定是问题之一.打了样板回来, 发现RS232还不能通讯.去查MAX3232的datasheet, 才发现以前同事将232的TTL端和232端搞反了. 这真是想不到, 也只能说, 没有验原创 2022-01-02 14:29:30 · 12457 阅读 · 0 评论 -
迪文串口屏(DMG10600C101-03WTC)的通讯测试
笔记同事从迪文屏接口, 焊接出一个DB9公头.因为手头不好找DB9母头, 就用232转485 + 485转232 + 232转USB上电脑测试.怎么测试都不通, 也将同事焊接的232 TX/RX对调过. 不行.最后测试时, 直接找了一条双母头的D9连接线, 这样就改成了 DB9公头接口 + 双母头DB9转接线 + 232转USB上电脑. 这回好使.我不确定那条双母头的2,3是否有交叉. 反正通讯不行时, 就将同事焊接出的DB9公头的2,3调一下测试.记录一下用串口助手和串口屏通讯的发包的组包配原创 2021-12-14 16:45:54 · 3672 阅读 · 0 评论 -
迪文串口屏(DMG10600C101-03WTC)的使用测试
笔记同事整来一个10寸的迪文串口屏(200+RMB), 让我试试.去淘宝看了一下, 他买的应该是下面这种.这次买的屏用DGUS工具开发时, 和旧版的有点不同, 需要配置字库, CFG, ICL 文件, 烧录进屏内才能正常用. 否则会黑屏, 页面不动作, 或是上一次烧录成功的图片.试验迪文屏的DGUS工具有很多版本(对应不同的串口屏主控MCU), 从他家官方下载, 可能下的不是最新版本或和串口屏不匹配.还好, 迪文的技术支持很到位.买了屏之后, 问负责和你们公司对接的迪文销售就行.DGUS开原创 2021-12-13 20:17:48 · 10997 阅读 · 0 评论 -
ST_LINK_V2 USB communication error 的一种案例
笔记昨天在调试板子, 问题已经查出来了, 板子本身有问题.但是我今天用STLINKV2和板子通讯, 准备下测试程序时, 出现 "USB communication error"的错误.在MDK和STM32CubeProgrammer 中都如此.昨天也遇到这种情况, 以为是STLINK干废了, 将STLINK直接开盖拆了.其实我昨天, STLINK适配插头没插反, 后来反复试验, 都不能通讯了, 就以为坏掉了, 头一次遇到.今天, 板子本身是好的, 又遇到这种情况, 我就不怀疑STLINK的问题.原创 2021-12-09 15:58:58 · 1788 阅读 · 0 评论 -
LAN8720A不能正常通讯的问题
笔记公司有块MCU板(STM32407VGT6 + LAN8720A/AI), 板子是好的, 以前一直在用, 固件工程也是归档的, 软件也是正常的.公司同事去年焊接了20个MCU板, 出货了3块板子, 剩下的板子就丢在那.这几天, 要用这个板子, 找到上次焊接的MCU板子, 插到到主板上, 程序烧录进入后, 网线插入, 连接设备和开发本本, 开发本本上的网卡一直显示网线已经被拔出.开始怀疑是程序不是对应版本的, 看svn归档记录, 固件工程就是这个.同事就怀疑我程序整错了. 那就查呗.在固件工程原创 2021-12-09 11:44:10 · 5704 阅读 · 1 评论 -
windows subst命令实现原理模拟3 - subst挂载目录为盘符
笔记继续研究, 看subst怎么实现的挂载目录为盘符还是在查询subst盘符是否存在的函数中下断点程序参数设定为 z: d:\my_tmp程序跑起来, 看谁调用的查询盘符是否存在.从查询盘符函数出来后, 就是挂载盘符的实现.char __fastcall sub_7FF649D6113C(LPCWSTR lpDeviceName, LPCWSTR lpTargetPath, __int64 a3, MESSAGE *a4){ WCHAR *v4; // r15 MESSAGE *v5;原创 2021-12-06 11:09:33 · 611 阅读 · 0 评论 -
windows subst命令实现原理模拟2 - subst卸载已经挂载的盘符
笔记今天没啥事, 继续研究subst命令的第2个功能,卸载已经挂载的盘符.试验之前,先用subst模拟一个盘符出来.call subst z: %~dp0在cmd中, 如果能进入Z盘, 就可以继续做试验, 看看subst怎么卸载的盘符.C:\Users\me>cd /d z:Z:\>上次试验, 从引入表中,已经怀疑到了DefineDosDeviceW.idata:00007FF649D63130原创 2021-12-06 10:45:01 · 750 阅读 · 0 评论 -
windows subst命令实现原理模拟1 - 打印subst模拟出的盘符的实际路径
笔记现在经常用BAT脚本(使用subst命令),将工程目录模拟成磁盘来用,好处挺多的.今天手头的活验证完后, 突然想起来看看subst命令是咋实现的.知道咋实现之后,以后可以在自己的程序中模拟出一个磁盘来, 很方便啊.今天先研究打印subst模拟盘符对应的实际路径问题.其他2个subst功能(卸载, 加载), 等有时间再弄, 单步了一下, 实现挺简单的.subst的功能列表subst带3个功能, 用subst /? 可以看到subst /?将路径与驱动器号关联。SUBST [drive原创 2021-12-05 21:20:18 · 1034 阅读 · 0 评论 -
记录一次给下位机串口发包不回的bug
前言采购了第三方的传感器。开始只知道是2400bps/8位数据位/1位停止位。用PC端的串口助手发包,传感器不回包。实验先问第三方的研发部,说是偶校验,用串口助手发包有回包。但是用我们自己的上位机(C#)和下位机(STM32)均没有回包。因为我们上位机采用的是无校验的方式,这个选项没法设置,只能采用无校验。先请第三方将他们的协议改成无校验。再用串口助手试一下。手头有2个版本的串口助手...原创 2020-01-14 16:02:56 · 749 阅读 · 0 评论