调试
David_xtd
这个作者很懒,什么都没留下…
展开
-
使用Jlink的RTT Viewer实现串口打印输出数据功能
问题提出:自从Keil MDK的编译器从AC5更新到AC6之后,原先使用的ITM串口输出方式编译时总提示错误,因为结构替__FILE需要重新定义;而目前又没有找到合适的让AC6编译通过的办法。无奈之下,寻找能替代ITM串口输出的办法,还真找到了,就是RTT Viewer方式的串口输出。问题解答:ITM方式串口输出,使用了MCU的SWO(Serial Wire Output)引脚,RTT方式串口输出,不需要通过SWO引脚,即可实现printf输出,而且性能(耗时)远远高于ITM方式。如上图所原创 2021-01-29 21:08:12 · 2650 阅读 · 2 评论 -
74系列标准逻辑集成芯片分类
74系列集成电路,按工艺特点进行划分,逻辑器件可以分为Bipolar、CMOS、BiCMOS等工艺,其中包括器件系列有:Bipolar(双极)工艺的器件有: TTL、S、AS、LS、ALS、F。(除了标准型和高速型F,都包含一个S)CMOS工艺的器件有: HC、HCT、CD40000、ACL、FCT、LVC、LV、CBT、ALVC、AHC、AHCT、CBTLV、AVC、GTLP。(除了LV和GTLP,都包含一个C)BiCMOS工艺的器件有: BCT、ABT、LVT、ALVT。(都包含一个T)Bip原创 2021-01-15 16:06:19 · 4250 阅读 · 0 评论 -
MDK编译生成的BIN文件占用FLASH大小
STM32烧写Flash时用到的BIN文件大小在MDK中,通过fromelf.exe命令将hex文件转换成bin文件时,所占用的Flash空间是多大?从哪里看呢?1、资源浏览器中通过查看文件属性可以看到上图中,大小一栏中的数字3716,即是BIN文件所占用Flash空间的大小。2、相同功能的浏览器也可以看到在TotalCommander中也同样可以通过文件的属性看到BIN文件的大小。可以看到,BIN文件的大小同样是3716字节。3、MDK编译后的信息中通过计算得到compiling原创 2020-11-02 21:58:48 · 1153 阅读 · 0 评论 -
WIN10中恢复误格式化的dsn和brd文件
资料盘E盘误格式化并安装了WIN10系统后恢复dsn文件和brd文件问题产生解决办法问题产生来到了出差地,白天还在单位打开电脑处理了一些文档。晚上到达宾馆后, 结果就进不了WIN7系统了。无奈之下,只好重装系统。恰好微软马上就要放弃对WIN7维护,于是用8GU盘做好了WIN10的系统盘。原来电脑里有个固态硬盘,分为C盘和D盘:C盘装系统,D盘装软件;有个机械硬盘,分为E盘和D盘:E盘...原创 2019-12-17 22:53:39 · 749 阅读 · 0 评论 -
STM32控制器外中断注意事项
问题:STM32的外部输入经过光耦接到GPIO输入端,如图所示:其中,I5对应的按键检测用于即按即停功能,不能有误触发;MCU中,DI5管脚原来设置成下降沿触发;测试时发现按键按下和弹起时,都会触发中断,进入中断处理程序的回调函数;1、将延时时间由300ms延长到3000ms不能解决问题;2、示波器查看有没有上升沿抖动,时间轴设定为每格100ms,看不到抖动现象;将时间轴放大到每格...原创 2019-11-28 20:08:24 · 1207 阅读 · 0 评论 -
DEADBEEF
“DEADBEEF”是什么?可能很多人都没有听说过。DEADBEEF不是“死牛肉”的意思,而是一个十六进制数字,即0xDEADBEEF。最初使用它的是IBM的RS/6000系统。在该系统中,已分配但还未初始化的内存中用该数字来填充,使得程序员在调试时可以很容易地定位到目标内存区域。某些其他系统也使用DEADBEEF,例如运行在32位PowerPC处理器上的Mac OS和RS/6000一样将其用于填充转载 2016-05-31 16:20:24 · 9065 阅读 · 0 评论 -
Linux Shell命令中判断目录下是否存在已知后缀名文件的命令
今天遇到一个问题,需要判断目录下是否存在.c文件。我使用了if [ -f *.c ],用-f和通配符来判断是否有.c的文件存在,然而linux一直报错“unexpected operator”,因此在-f下,后面是不能使用通配符的。 后来,我想了一个土办法,if [ -n "'ls *.c'" ],这句话的意思是,如果ls命令执行后有得到内容,则是真,其中-n表示后面转载 2013-12-26 20:43:30 · 14607 阅读 · 1 评论 -
如何将C++改为C
我曾参与过公司的bpp项目,就是bluetooth print profile。由于使用了hpijs的开源包,但是是C++的。由于C++解释器比C语言解释器占用的存储空间要大500k左右。为了节省有限的存储空间,降低成本,同时也为了提高效率,将用C++语言写的源程序用C语言改写是很有必要的。 C++与C区别最大的就是C++中的类的概念和特性,将C++改为C的问题,就转换成如何将转载 2013-12-07 15:25:14 · 15485 阅读 · 3 评论 -
linux中shell变量$#,$@,$0,$1,$2的含义解释
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出转载 2013-11-27 15:34:17 · 1202 阅读 · 0 评论 -
SHELL脚本编程的常识
SHELL脚本编程的常识七种文件类型正则表达式字符类描述shell的引号类型变量设置时的不同模式:条件测试命令执行顺序脚本调试一些常用的小TRICK打印一些头信息创建一个长度为0的空文件一些常用的shell变量$0的使用Shift的运用用head或tail指令指定查阅的行数AWK使用规则第一个 awk多个字段外部脚本B转载 2013-11-27 15:40:47 · 1612 阅读 · 0 评论 -
Sed学习笔记
Sed学习笔记作者:Jims of 肥肥世家jims.yang@gmail.com>Copyright © 2004,2005, 本文遵从GNU 的自由文档许可证(Free Document License)的条款,欢迎转载、修改、散布。发布时间:2004年09月20日最近更新:2005年12月22日,增加小技巧章节。转载 2013-11-27 15:24:33 · 863 阅读 · 0 评论 -
wpa_supplicant介绍与使用
1.什么是wpa_spplicantwpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命转载 2013-11-13 16:12:09 · 1436 阅读 · 0 评论 -
shell中continue和break区别
break 命令可以带一个参数,一个不带参数的break 循环只能退出最内层的循环,而break N可以退出N 层循环。continue 命令也可以带一个参数,一个不带参数的continue 命令只去掉本次循环的剩余代码,而continue N 将会把N 层循环剩余的代码都去掉,但是循环的次数不变。#!/bin/sh for i in "a b c d" do echo "$i转载 2013-11-12 13:29:36 · 1242 阅读 · 0 评论 -
写给Web开发人员看的Nginx介绍
译者注:不知道其他开发者是否和我一样,参与或者写了很多Web项目,但是却没有真正的去完整的部署应用,很多时候都是交给ops即运维的同学帮忙来做。而作为一个有节操的开发者,我认为了解一些服务器方面的知识是很有必要的,读了这篇文章之后,自己对nginx也有了一个初步的认识,对自己很有帮助,不敢独享,遂译之。如果你是一名Web开发人员,那么你很有可能听过nginx(读音听起来像engine-x)转载 2013-11-26 17:16:04 · 16996 阅读 · 0 评论 -
Windows XP下更改COM端口的方法
我们在使用串口转USB的时候,就会遇到这个问题。有些串口调试助手提供的COM口可选择性较小,比如只提供COM1——COM4。如何更改串口呢?1、我的电脑-> 管理->设备管理器,如下截图:XP下更改COM端口的方法" title="Windows XP下更改COM端口的方法" style="margin:0px; padding:0px; border:0px; list-styl转载 2014-04-25 12:20:39 · 16404 阅读 · 0 评论 -
VS2010中不能调试CMake生成的工程
问题:解决办法:原创 2014-08-05 10:56:02 · 7419 阅读 · 5 评论 -
vs2010下如何调试带输入参数的程序
当main函数的输入参数为空时,我们可以很方便的通过设置断点,单步运行的方法调试,可是如果需要调试的是有输入参数的程序该怎么办呢?最终还是让我找到了:英文版:Project -> Properties -> Configuration Properties -> Debugging在Command Arguments里填上即可。中文版:菜单[项目] -> 属性页 -> 配置转载 2014-08-05 11:02:50 · 2223 阅读 · 0 评论 -
BCompare报Revoked错误不能打开的解决方法
Beyond Compare报Revoked错误不能打开的解决方法今天到公司BCompare不能打开,报错使用已到期。 最后处理下,就解决了。 解决办法: WIN7下寻找, 把C:\Users[用户名]\AppData\Roaming\Scooter Software\Beyond Compare 4 文件夹下的文件全部删除即可 如果找不到AppData文件, 请查看工具——文件原创 2017-06-08 14:29:50 · 16521 阅读 · 4 评论 -
sublime打开c文件加后缀dump的解决办法
1. 问题:新装了Sublime Text 3,安装好各种插件后,打开c源码文件时,总带有一个后缀.dump,增加了文件名的长度,在打开多个c文件时,不容易分清不同的文件。2. 解决办法:知乎上给出的解决办法是:解决的方法,需要卸载掉GBK Encoding support插件下载ConvertToUTF8插件解决,OK使用Remove Package功能,删除已安装的包含“GTK...原创 2018-10-04 10:14:26 · 1718 阅读 · 0 评论 -
Bcompare提示“这个授权密钥已被吊销”的解决办法
问题:使用TortoiseHG提交文件时,对已修改的文件进行比较,双击修改了的文件,半天后弹出错误提示“这个授权密钥已被吊销”。解决办法:删除以下目录中的所有文件即可 C:\Users\Administrator\AppData\Roaming\Scooter Software\Beyond Compare 4该目录下有四个文件,选中后全部删除。问题解决。...原创 2018-11-28 15:22:14 · 12515 阅读 · 0 评论 -
Error: L6200E: Symbol xxx multiply defined (by adc_1.o and adc.o)的解决办法
问题:Keil MDK-ARM V5的工程,使用HAL库搭建的。HAL库从STM32Cube FW_F1 V1.6.1升级到STM32Cube FW_F1 V1.7.0,重新编译工程后提示有102条错误,而原来的工程是能正确运行的。解决办法:错误信息提示如下:linking...stm32_uart_mx\stm32_uart_mx.axf: Error: L6200E: S...原创 2018-11-28 16:22:26 · 46601 阅读 · 4 评论 -
Keil编译错误error: #20: identifier "XXXX" is undefined
问题:在使用Keil编译工程时,经常遇到提示identifier "XXXX"未定义的error信息。Build target 'canopen_mx_v1d61'compiling main.c...../Src/main.c(104): warning: #223-D: function "setNodeId" declared implicitly setNodeId(...原创 2019-03-15 11:29:10 · 72278 阅读 · 1 评论 -
Ubuntu系统中使用apt-get安装Nginx服务器
在上篇文章说完用supervisor来管理进程之后,自然就要说到用nginx来管理由前者启动程序所监听的端口。 首先是安装nginx,环境依然是ubuntu12.04(64位),通过下面命令:sudo apt-get install nginx安装好之后就是启动,目前我知道的在ubuntu下有两种启动方式:sudo /etc/init.d/nginx start #转载 2013-11-26 17:06:00 · 7153 阅读 · 0 评论 -
用route命令添加永久路由
使用双网卡,同时使用2个网关的时候就需要加一条静态路由了。当然还有很多时候会需要加路由。 一:使用 route 命令添加 使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法: //添加到主机的路由 # route add –host 192.168.1.11 dev eth0 # route add –host 192.168.1.12 gw 192.16转载 2013-11-12 13:02:54 · 13071 阅读 · 0 评论 -
Busybox下tftp命令使用详解
Busybox下的tftp命令可以用来进行单文件传输。使用的时候,是把电脑作为服务器Server,Busybox作为客户端Client,使用tftp命令可以实现从Server下载单个文件到Client,或者从Client上***个文件到Server。 首先来了解一下tftp命令参数,在Busybox下输入tftp –help,得到tftp使用的详细参数,如下图转载 2013-08-19 14:49:09 · 1224 阅读 · 0 评论 -
/usr/bin/ld: cannot find -lxxx 问题总结
linux下编译应用程序常常会出现如下错误:/usr/bin/ld: cannot find -lxxx意思是编译过程找不到对应库文件。其中,-lxxx表示链接库文件 libxxx.so。注:有时候,由于库文件是编译过程临时生成的,如果前面出错也会导致出现这种情况,下面针对的是由于本机系统环境缺失而引起的。。一般出现这种错误有以下几种原因:1.系转载 2013-09-02 14:06:06 · 3176 阅读 · 0 评论 -
计算程序运行时间(time_t, clock_t)
我们有时需要得到程序的运行时间,但我们也要知道,根本不可能精确测量某一个程序运行的确切时间 [3] ,文献 [4]中说的很明白,现摘录如 下。 我们平时常用的测量运行时间的方法并不是那么精确的,换句话说,想精确获取程序运行时间并不是那么 容易的。也许你会想,程序不就是一条条指令么,每一条指令序列都有固定执行时间,为什么不好算?真实情况下,我们的计算机并不是只运行一个程序的,进程的转载 2013-08-30 17:27:07 · 7039 阅读 · 0 评论 -
内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放转载 2013-08-28 10:30:10 · 2380 阅读 · 0 评论 -
对堆和栈区别做了很全面的分析
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(s转载 2013-08-28 10:09:42 · 1112 阅读 · 0 评论 -
Makefile 自动变量
自动变量用于自动代替一条rule的目标和依赖列表:以下是Makefile中的7种自动变量及其说明:$@:表示规则的目标文件名。如果目标是一个文档文件(Linux中,一般称.a文件为文档文件,也称为静态库文件) ,那么它代表这个文档的文件名。在多目标模式规则中,它代表的是哪个触发规则被执行的目标文件名。$%:当规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则的转载 2013-08-15 10:18:19 · 2916 阅读 · 0 评论 -
如何调试makefile
makefile 的调试有点像魔法。可惜,并不存在makefile 调试器之类的东西可用来查看特定规则是如何被求值的,或某个变量是如何被扩展的。相反,大部分的调试过程只是在执行输出的动作以及查看makefile。事实上,GNU make 提供了若干可以协助调试的内置函数以及命令行选项。用来调试makefile 的一个最好方法就是加入调试挂钩以及使用具保护的编程技术,让你能够在事情出错时恢复转载 2013-08-15 09:52:09 · 2778 阅读 · 0 评论 -
应用 Valgrind 发现 Linux 程序的内存问题
简介: 如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在。有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题。掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题。Valgrind概述体系结构Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调转载 2013-08-12 11:32:45 · 998 阅读 · 0 评论 -
设置 linux Ubuntu10.04 Ubuntu11.10 的域名服务器 DNS
(一)ubuntu 11.10不能上网,但是ping能够成功。在ubuntu11.10中如何添加域名服务器。1.打开配置文件sudo vi /etc/resolv.conf2.使用 nameserver 添加域名服务器# Generated by NetworkManagerdomain linksys.comsearch linksys.comnameserver转载 2013-08-20 16:23:33 · 3358 阅读 · 0 评论 -
Linux下C++的通用Makefile与解析
本文给出万能Makefile的具体实现,以及对其中的关键点进行解析。所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改。号称万能Makefile,一统江湖。我对原版的Makefile做了些修改。首先揭开它的庐山真面目:##################################################### Generic makef转载 2013-09-23 17:14:35 · 3866 阅读 · 0 评论 -
ubuntu 12.04中配置thttpd服务编译错误
问题:thttpd是适用于嵌入式设备中的轻量级http服务器,在ubuntu中编译thttpd 2.25b时,出现编译错误:htpasswd.c:52:12: error: conflicting types for ‘getline’/usr/include/stdio.h:675:20: note: previous declaration of ‘getline’ was he原创 2013-09-26 17:40:03 · 2388 阅读 · 0 评论 -
Linux程序调试--查看二进制文件
一,二进制文件的类型 Linux下的二进制文件是ELF格式的,主要有目标文件、静态链接库文件、动态链接库文件、可执行文件和core dump文件。可以使用如下命令查看其类型: file 文件名。 我们还是以之前的例子test.c举例,test.c的源代码和之前的文章一样: int sub转载 2013-10-17 13:31:40 · 11018 阅读 · 0 评论 -
在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
fork ( /directory/script.sh)fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。sub-shell执行完毕后返回parent-shell. sub转载 2013-11-09 18:34:59 · 1350 阅读 · 0 评论 -
c语言中字符串比较易错的地方
问题:源代码由C++代码转化而来,所以对于C风格字符串的比较,仍然使用C++中比较C风格字符串的方式char* pstr = "enable";if (pstr == "enable") { PerformTask();}但在程序运行的时候,发现PerformTask()始终没有被调用到。解决办法:1. 在C++中,问题中所用的字符串比较方式是可行的。原创 2013-11-09 11:00:28 · 13409 阅读 · 3 评论 -
程序报错误Illegal instruction的解决办法
问题:目标板是rt5350,使用mipsel-linux-gcc 3.4.2编译器,源程序由C++转换到C语言。程序中有3个线程:主线程、接受消息队列的线程和上传采集数据的线程;当把上传采集数据的线程启动时,程序运行给出Illegal instruction的错误提示并退出;而屏蔽掉启动上传采集数据线程后,程序能正常运行,所有与上传采集数据无关的功能都是正常的;解决办法:1原创 2013-11-07 09:53:06 · 8615 阅读 · 0 评论 -
正确使用pthread_create,防止内存泄漏
近日,听说pthread_create会造成内存泄漏,觉得不可思议,因此对posix(nptl)的线程创建和销毁进行了分析。分析结果:如果使用不当,确实会造成内存泄漏。产生根源:pthread_create默认创建的线程是非detached的。预防方式:要么创建detached的线程,要么线程线程的start_routine结束之前detached,要么join转载 2013-11-20 10:32:06 · 11470 阅读 · 0 评论