关于调试:开源调试软件OpenOCD调试stm32

刚开始接触嵌入式硬件时只晓得写程序,感觉调试基本不须要,随着工夫的积攒和问题复杂度的晋升,才发现调试对于一个零碎的重要性。生存中很多这样的例子,调试,永远都是事物良性倒退过程中必不可少的一个环节,两个人过日子遇到了矛盾,静下来沟通就是调试,总不能一言不合就离别。在设计一个产品或者一个流程时,都要充沛的思考到调试因素,这样零碎在运行过程中一旦呈现了问题,能够及时的追溯。 OpenOCD就是这样一个工具,配合JTAG调试协定,能够对硬件设施进行指令集级别和寄存器级别的调试。 理解一个新软件最好的形式就是读官网的Manual。当然,不肯定非得从Manual开始,能够从一些实例开始,或者基于母语的博客或者论坛,但想把握得更彻底,还是得找官网的文档,解铃还须系铃人。如果软件的设计思维过于简单,Manual读一遍是不论用的。往往回旋式的后退会收到更好的成果,也就是带着问题读Manual,解决了问题;再遇到一些问题时,再读一遍Manual,就这样重复几遍也就逐步把握了,所谓的一万小时实践也是基于此。 OpenOCD的劣势就是开源,反对N种调试器。充沛的了解和把握整个开发过程中的调试办法,是我的项目稳固进行的牢靠保障,很多未知问题都得通过底层调试能力剖析进去。 调试ARMwindows应用gdb调试stm32能够应用几套环境: stlink硬件+openocd软件+arm-none-eabi-gdbjlink硬件+openocd软件+arm-none-eabi-gdbjlink硬件+jlink_gdb_server软件+arm-none-eabi-gdb搭建环境这里先讲第二种状况的应用: 通过网站http://www.freddiechopin.info/en/download/category/4-openocd下载openOCD for windows软件包,当初的版本是0.9.0。如果心愿下载源代码,能够拜访网站http://openocd.sourceforge.net/。登陆网站http://zadig.akeo.ie/下载zadig软件,用来装置仿真器的驱动程序,以后版本是2.1.2,说的直白一些openOCD只把Jlink仿真器当作一般的USB设施来应用,不应用Jlink自带的仿真器驱动程序,如果已装置了Jlink仿真器驱动程序,这个过程就是把原先的驱动程序换掉。插入Jlink仿真器(如果是第一次插入Jlink仿真器,零碎会要求装置驱动程序,咱们能够点击勾销,不用理睬),运行zadig软件。抉择J-Link,而后抉择WinUSB驱动程序,点击Reinstall Driver按钮或Replace Driver按钮,这样便实现了驱动程序的替换。解压缩openOCD软件包,在硬盘上建设openocd文件夹(可写其它的任意名称),拷贝bin和scripts文件夹上面的所有文件到该文件夹。应用Jlink仿真器连贯指标板,并给指标板上电。在windows运行中输出cmd,启动控制台程序,并切换至步骤7建设的文件夹。输出命令openocd -f interface/jlink.cfg -f target/k60.cfg,jlink.cfg示意应用jlink仿真器,k60.cfg示意下载k60系列MCU。呈现下列界面示意连贯胜利。 openOCD思考OpenOCD是一款功能强大的开源调试软件,反对多种调试器,例如Jlink、STlink、FT2232、并口等;反对多种嵌入式处理器,例如ARM7,ARM9, ARM10, ARM11和Cortex等外围的芯片;另外还提供一个GDB Server接口。 刚一开始可能还摸不清OpenOCD的运作模式,毕竟它不是一款图形化软件,而是基于command line 的交互方式。而且OpenOCD运行后间接就是一个Daemon,我第一次运行时还真有点懵。这种软件还是得靠入手操作实例来把握。 应用OpenOCD开发我的项目,咱们须要做的不止是将调试器连贯到开发板,咱们还须要配置OpenOCD让它晓得咱们的调试器和开发板的型号,能够应用OpenOCD连贯GDB,而后应用例如Eclipse或者其它图形化的工具。 下一篇文章,咱们会写连贯到开发板后,如何进行调试。并且通过OneOS-Lite进行教学实战。 TAPTest Access Ports (TAPs) are the core of JTAG. TAPs serve many roles, including: 测试拜访端口TAPs是JTAG的外围,TAPs服务许多角色,包含: Debug TargetA CPU TAP can be used as a GDB debug target.调试指标端CPU TAP能够作为GDB调试的指标端程序,即GDBServer。艰深点讲,TAP就是一个调试链,通常一个芯片就是一个TAP,然而一个芯片往往蕴含多个IP核,比方,ARM+DSP或者ARM+FPGA或者ARM+ASIC,所以在这个chain外面通常会蕴含多个可调试对象,比方应用scan_chain命令显示的信息,能够看到omap5912上面包含3个可调试成员。 OpenOCD启动时将配置文件作为参数. openocd.exe -f jlink.cfg -f openocd-ralink.cfg 命令就是将jlink.cfg和openocd-ralink.cfg两个配置文件作为配置参数。 怎么学openOCD其实也很简略。首先晓得openOCD是搞毛线用的。 而后,晓得怎么搭建环境。比方须要什么硬件J-Link/st-link,什么软件openOCD,zadig等。 环境搭建好当前,晓得如何输出命令来和指标机连贯。 晓得openOCD的常用命令,晓得如何剖析和更改配置文件。 晓得如何配合gdb进行调试。 如果以上都搞定,那么我就认为,openOCD曾经能够失常相熟应用了,剩下的就是一直尝试和欠缺本人的openOCD的常识体系结构了。 比照JLink驱动通过下面的学习,咱们能够看到openOCD只把Jlink仿真器当作一般的USB设施来应用,不应用Jlink自带的仿真器驱动程序。也即是说:openOCD代替了jlink驱动提供的性能。 关注&&分割gitee: https://gitee.com/cmcc-oneos/OneOS-Lite docs: https://oneos-lite.com/ ...

November 19, 2021 · 1 min · jiezi

关于调试:多媒体开发8调试FFmpeg

编译FFmpeg失去二进制文件,之后就是对二进制库的调用,这时FFmpeg就像一个黑盒子。作为程序员,难道不想钻研一下FFmpeg的具体实现?比方是怎么拿到歌曲信息的、怎么解码的、怎么推流的,等等。 看源码是了解代码实现的一个方法,而单步调试能从另一个维度去帮到你。本文介绍如何单步调试FFmpeg的代码。 (一)为什么要调试调试的益处,一来能够了解程序的执行流程,二来有助于定位问题。 绝对于看源码,单步调试,能够看到数据的变动,会粗浅很多,而且定位问题时也直观疾速,你甚至能够批改变量的值或下条件断点,充分发挥调试器的性能。 所以调试是了解代码与定位问题的无效方法。 (二)怎么调试小程用的是mac机。先实现FFmpeg源码下载与编译的筹备工作。 (0)下载FFmpeg源码git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg或者: curl -0 http://ffmpeg.org/releases/ffmpeg-\${VERSION}.tar.bz2tar jxvf ffmpeg-\${VERSION}.tar.bz2VERSION设置为最新的ffmpeg版本号。 至于用什么工具来关上这些源码文件,你应该思考适宜本人,而且适宜看大型项目的工具,比方sourceinsight、sublime、vim、emacs、xcode、Android Studio之类。 (1)编译FFmpeg编译要应用到编译器,在mac机上最简略的方法就是装置xcode了,这样保障编译器clang是存在的。 为了调试,这次的编译能够很简略,只有把优化选项去掉,再make即可: make clean./configure --disable-optimizationsmake configure是FFmpeg提供的配置脚本,用来生成Makefile跟config.h文件,Makefile在编译时应用,而config.h(外面各种宏的定义)被FFmpeg源码应用,也会影响到FFmpeg的性能裁剪。 对于configure的参数,你也能够通过./configure --help来查看所有的选项,而后再找到对于优化的选项。 这里的make clean,是为了清一下之前的编译净化,如果之前没有编译过,那就不须要执行。 另外,如果make之后,再执行make install,就会把FFmpeg装置到mac零碎。对于调试来说这个是不必要的,只有make出二进制库就好了。 胜利编译后,能够看这几个文件: (2)用gdb调试FFmpeg如果你喜爱用命令行,那应用gdb或lldb来进行调试是不错的抉择。 在应用gdb前,须要装置并给gdb签名,如果你还没有筹备好gdb,并且有趣味应用gdb的话,能够浏览分割线以内的内容,这外面也包含了gdb罕用的命令。 装置gdb: brew install homebrew/dupes/gdb对gdb受权,参照: https://blog.csdn.net/cairo12... 写一个测试的例子: touch gdbtest.c:int main() { int a = 10; printf("%d\n");}编译: gcc -o gdbtest gdbtest.c -g留神须带-g,以生成符号dSYM文件。 而后就能够调试了,常用命令有这些: gdb gdbtest --加载可执行程序r --run,运行,能够带参数i b --info break,断点信息b 3 --break 3,第3行下断点b main --main函数第一行下断点b other_c:fun1 --文件other_c的fun1函数第一行下断点b 120 --在120行下断点clear --删除所有断点d 3 --delete 3,删除断点3disable 1 --禁用断点1enable 1 --启用断点1s --step,跳进去f --finish,跳进去n --next,执行一行n 3 --next 3,执行3行c --continue,持续直至下一个断点或完结p a --print a,输入变量a的值list/l --查看代码q/kill --退出本次调试bt --查看调用堆栈return --把以后函数return为了便当,我间接用FFmpeg的程序来切入调试(当然也能够写本人的代码来调用FFmpeg),比方能够抉择ffplay_g这个程序来切入,调试它所依赖的根底即FFmpeg。 ...

February 25, 2021 · 1 min · jiezi

关于调试:手机hybrid应用H5开发

H5开发引入flexible.js在*.html的<head>标签中引入<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>Note:HTML中无需设置<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0">,否则,不论设施是多少的dpr,都会强制认为其dpr是你设置的值。 通过scss定义px2rem的转换@function px2em($px, $base-font-size: 16px) { @if (unitless($px)) { @warn "Assuming #{$px} to be in pixels, attempting to convert it into pixels for you"; @return px2em($px + 0px); // That may fail. } @else if (unit($px) == em) { @return $px; } @return ($px / $base-font-size) * 1em;}文本字号不倡议应用rem咱们心愿文本在不同dpr屏幕下文本字号雷同咱们心愿在大屏手机上看到更多文本 不心愿呈现13px和15px这样的奇葩尺寸 文本还是应用px作为单位,只不过应用[data-dpr]属性来辨别不同dpr下的文本字号大小 // dpr === 1, 设计图尺寸375 * 667为例@mixin font-dpr($font-size){ font-size: $font-size; [data-dpr="2"] & { font-size: $font-size * 2; } [data-dpr="3"] & { font-size: $font-size * 3; }}// dpr === 2, 设计图尺寸750 * 1135为例@mixin font-dpr($font-size){ font-size: $font-size / 2; [data-dpr="2"] & { font-size: $font-size; } [data-dpr="3"] & { font-size: $font-size; }}@include font-dpr(16px);H5调试手机开启USB调试性能不同手机开启门路不同,能够自行百度; ...

February 21, 2021 · 1 min · jiezi

关于调试:再见本地环境腾讯云全球首发Serverless-在线远程调试

在线调试是云函数为了解决用户在本地搭建调试环境简单,云上环境不便于定位等问题推出的性能。 云上的各种服务,在本地无奈齐全模仿,程序员大都遇到过本地和近程环境运行后果不统一的情景,追究起来费时费力,不仅效率低下,也造成十分郁闷的工作体验。 所以,是否间接在近程环境中实现全副的开发流程,是晋升开发体验的最间接伎俩,然而在其余问题都解决后,近程调试性能是最初的一公里。 本篇文章将以一段内存透露的代码为例,给大家展现如何应用云函数在线调试功能定位和解决问题。Node10 及以上版本的 runtime,应用 Chrome 浏览器关上云函数控制台,在函数代码页即可看到在线调试的入口。 开启调试模式应用Chrome浏览器关上函数代码编辑页,能够看到在【近程调试】页。为保障调试的体验,开启调试模式将批改函数的局部配置,包含函数进入单实例模式、函数超时工夫批改为900秒等。开启前请务必确认这些调整。 待加载实现后,页面将主动展现入口文件。 找不到须要的文件?应用快捷键 Cmd + P(Mac)或 Ctrl + P(Windows)能够关上所须要的文件。但大家可能会发现,刚开启调试模式时,关上文件的列表中找不到所须要的文件。这是因为对于动静脚本语言来说,调试器不会加载所有的内容,只会加载执行过的文件。咱们先点击测试,让函数运行一次。在运行一次后,咱们就能够关上所须要的文件了。 设置断点在代码前点击即可设置断点,在右上角的工具中能够进行继续执行、跨步执行、单步执行等操作,也能够灵便地启动或禁用断点。 内存透露排查 - 内存快照这部分介绍如何应用内存快照性能排查内存透露的问题。内存透露的排查办法大抵为:找准内存透露的机会,在透露的前后对内存进行快照,通过比照快照的内容判断内存透露的问题点。 首先,咱们将调试的窗口切换到 Memory 页面,点击左上方的实心圆形按钮捕获内存快照。 这样,咱们就有了运行前的内存快照。当初咱们执行存在内存透露的代码。这行代码有一个从未清理的全局缓存,随着调用的减少,越来越占内存。 随后,咱们进行第二次内存快照,关上比照页面,通过对Delta值的剖析,能够发现 concatenated string 这个局部减少了很多,很有可能有问题。 关上当前,便能够发现内存中多存储了很多“recording time”的数据。 这些重复性的数据也就意味着代码中呈现了内存透露,在代码中找到相干内容,进行调整,解决内存透露的问题。 除了云函数的控制台,也能够应用 Serverless Framework Dev 模式开启在线调试的性能。

January 27, 2021 · 1 min · jiezi