大神们都来说下你们调试单片机的办法吧!!
本帖最后由 10xjzheng 于 2014-5-25 18:04 编辑调试单片机其实是很多人写程序过程的一个周期相对长的一个环节,会调试的人才能更好地解决问题,用了一年多的单片机,想想是时候来学习下一些调试的技巧,学一些办法更好地调试。但是很少人写着方面的资料,都是靠经验。
在我看来,低级一点调试办法只要是看现象,比如设置一些LED灯在某个程序环节就亮或者蜂鸣器响来说明一些问题之类,高级一点的调试办法主要是使用串口吧。希望在这里能像各位大神学习下调试的办法,我近期是想些一些可以复用的调试程序块,给单片机,方便单片机调节。完成程序之后,调试段可以全身而退,并且占用资源比较少。
我看过原子的一个文章,也许我可以学习下他
http://www.openedv.com/posts/list/877.htm引用下面他说的话,就是我想达到的效果。
“有了USMART,你可以轻易的修改函数参数、查看函数运行结果,从而快速解决问题。比如你调试一个摄像头模块,需要修改其中的几个参数来得到最佳的效果,普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直到满意为止。而利用USMART,则只需要在串口调试助手里面输入函数及参数,然后直接串口发送给单片机,就执行了一次参数调整,不满意的话,你在串口调试助手修改参数在发送就可以了,直到你满意为止。这样,修改参数十分方便,不需要编译、不需要下载、不会让单片机折寿。”
正所谓磨刀不误砍柴工,我想掌握调试的办法至关重要。
大神们发表下自己一下调试的心得给我们这些初学者学习下吧,大家都可以再这里交流下自己调试的程序,调试的方法,或者帮忙上一些资料,谢谢。
折寿这点应该不用考虑, 以擦写10W次记, 以每分钟擦写1次, 24小时不停的工作, 能使用100000/24/60 = 69天, 如果工作时间减半12小时则为 138天, 频率减半即每2分钟1次, 则为 276天. 实际上频率远不可能这么高, 所以寿命无需考虑 ysu533 发表于 2014-5-25 16:50
折寿这点应该不用考虑, 以擦写10W次记, 以每分钟擦写1次, 24小时不停的工作, 能使用100000/24/60 = 69天,...
恩,也是,主要不是这点,主要是调试时间的问题,真的是会调试和不会调试解决问题的速度完全不一样。 ysu533 发表于 2014-5-25 16:50
折寿这点应该不用考虑, 以擦写10W次记, 以每分钟擦写1次, 24小时不停的工作, 能使用100000/24/60 = 69天,...
怎么看着看着我感觉您貌似变身成了一个半自动的下载器了!哈~ {:titter:} 单片机也是有寿命的啊,老这样不停的刷,很折寿的。呵呵,现在除了OTP类的片子,基本寿命不会这么少的,都是几十万次以上。
想用串口与单片机交互进行调试?参考ARM9之类的片子的bootloader的思想就行了 xyz543 发表于 2014-5-25 16:59
怎么看着看着我感觉您貌似变身成了一个半自动的下载器了!哈~ ...
呵呵, 只是为了说明, 一般情况下, 寿命是不用考虑的这一论题 {:lol:}我用51,AVR就没调试过,直接不断下载。
现在用STM32,的确很难搞定的问题才跟踪一下,不过板上留几个LED当测试标志是很有必要的 topdog 发表于 2014-5-25 17:15
不是有在线仿真的吗?
可以n多断点的说。
没有用过,不知道还有没有更高级的功能,可能进行更厉害的调试吗? 用UART来改变程序函数参数的方法是一个很好的方法,不过前提是要有一定的软件基础,况且那一套并不是所有的单片机都扛得住的(前提要单片机有些资源的)
如果 用仿真器调试单片机老板还要求考虑单片机的闪存擦写寿命,建议你换个公司,毕竟跟项目进度比,烧坏几个单片机那简直不值得一提 rootxie 发表于 2014-5-25 17:40
用UART来改变程序函数参数的方法是一个很好的方法,不过前提是要有一定的软件基础,况且那一套并不是所有的 ...
删掉了那句话,其实烧坏单片机那句话不是重点。重要的是调试方便,不用不断地烧写,改程序。如果能写出复用性高的,占用资源少的当然是最好,用的人可能只要会移植就好。 当年调K60中断的时候,用的液晶加按键,当时还不知道K60 还能在线调试。。。。 我一般都是插入串口输出语句来看程序运行调用的函数和过程。
用STC12的时候,一般都是串口传数据给LCD的,所以LCD都是最后搞。 10xjzheng 发表于 2014-5-25 18:07
删掉了那句话,其实烧坏单片机那句话不是重点。重要的是调试方便,不用不断地烧写,改程序。如果能写出复 ...
可以参考 RT-THREAD的finsh,优点是非常方便,缺点就是基本要M3的级别,耗费一定的SRAM和Flash
1K RAM字节的单片机 就不要考虑了,只能用用printf了 调试和测试,有什么区别呢?
如果有LCD,就先把LCD搞定,然后LCD显示相关量。
如果没有LCD,就printf。
最重要的一点,如果有仿真器,首选仿真器。 最好的还是仿真器吧{:lol:} 10xjzheng 发表于 2014-5-25 16:57
恩,也是,主要不是这点,主要是调试时间的问题,真的是会调试和不会调试解决问题的速度完全不一样。 ...
做单片机都有流程图吧。主要调流程,流程没问题,一般程序也不会有大的问题。 wye11083 发表于 2014-5-25 21:06
做单片机都有流程图吧。主要调流程,流程没问题,一般程序也不会有大的问题。 ...
有时候有画,但是粗心加上功力不够所以一般都会出错 很早使用AVR-JTAG-MKII,效果非常的,后来就习惯了JTAG。一般的代码写好调试,很容易通过的。高级点的需要跟踪的。。。。。老是下载-调试-下载-调试的 就要吸取经验了,提高代码的设计质量减少BUG处理时间。 本帖最后由 lswhome 于 2014-5-25 21:25 编辑
俺调试都是自己做好16位的数码管和LCD模块,哪个方便用哪个调试。。。。那个PRINTF速度太慢,有的程序里PRINTF反倒会导致问题。所以,数码管的速度最快,但显示有限制,LCD的速度次之,但是可以显示很多内部信息。。。很不错(OLED的显示速度非常快,可以用来代替LCD哦,对于观察某些快速变化的东西,OLED的优势是绝对的。。)
以上是我的笨办法。。。 普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直到满意为止。
晕,现在的仿真器直接可以修改变量的值,这都不知道? gliet_su 发表于 2014-5-25 21:56
普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直 ...
对于初学者来说,真的不知道啊,现在知道了 liao-ljj 发表于 2014-5-25 21:22
很早使用AVR-JTAG-MKII,效果非常的,后来就习惯了JTAG。一般的代码写好调试,很容易通过的。高级点的需要 ...
需要反思 全凭脑袋想象,哈哈 直接在编译器仿真,再不行,就printf 以前有人写代码成品率非常高的,一次成型。老工程师的很有耐心,细心,厉害吧! gliet_su 发表于 2014-5-25 21:56
普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直 ...
有的是流程错了,再改参数也没用啊。多的东西可以跳过不执行,但少的东西免不了重新编译下载。 liao-ljj 发表于 2014-5-25 22:57
以前有人写代码成品率非常高的,一次成型。老工程师的很有耐心,细心,厉害吧! ...
我有些朋友也是盲写的,不用电路板,不用实物设备,根据文档资料来写,基本上一次成型。
感觉很神奇的事情{:lol:} 来学习一下啊 在51上一般用printf,从串口输出调试信息,调试蛮方便,不过就是会占用点资源 以前搞linux驱动和BSP的时候,代码的要求非常的高,核心网交换机使用的要求很高!开发缓慢但是质量很高,最终的效果也是非常厉害的,2TB线速级交换。。。。。 涨知识了,谢谢 这个调试会占用资源吧 canspider 发表于 2014-5-27 08:33
这个调试会占用资源吧
如果占用资源小的话也没有什么关系 好方法。 我用的都很低端,一般是串口或者LCD调试。 仿真器啊。与工资比,仿真器不值钱了。 68336016 发表于 2014-5-25 23:38
我有些朋友也是盲写的,不用电路板,不用实物设备,根据文档资料来写,基本上一次成型。
感觉很神奇的事 ...
以前我提过这种事,有人盲写几个小时,一次通过,但代码量不会太大,中间真的没有调试过;但好些年轻工程师不信,嗨,现在的年轻人都忘了早些年的51是完全靠LED和峰鸣器来调试的,甚至这两个都没有; 10xjzheng 发表于 2014-5-25 22:20
需要反思
他那个所谓的USART移值性不好,有机会还是自己弄一个吧;其实没多难; 仿真器仿真 逻辑啥的用串口
时序啥的用示波器
寄存器啥的用仿真器 lyzhangxiang 发表于 2014-5-29 11:27
逻辑啥的用串口
时序啥的用示波器
寄存器啥的用仿真器
总结得非常好 ywl0409 发表于 2014-5-25 19:26
调试和测试,有什么区别呢?
什么意思,不懂? 68336016 发表于 2014-5-25 23:38
我有些朋友也是盲写的,不用电路板,不用实物设备,根据文档资料来写,基本上一次成型。
感觉很神奇的事 ...
真是厉害神一般的人 fsmcu 发表于 2014-5-26 11:00
在51上一般用printf,从串口输出调试信息,调试蛮方便,不过就是会占用点资源 ...
你好同是搞电子的同志能否加下你的QQ或者联系方式之类的我看过你08年搞过温控PID的帖子自己按照你讲解的方法试了一下总是在目标温度附近有很大的震荡我采用了你说的MAX6675来读取温度值的 能否贡献一下当年你的代码 我自己写了代码 但总是调不出来 在这里先说声谢谢了 急需要您稍微帮助一下{:smile:} 我经常是使用一个5V的LCD模块(笔段式液晶),需要什么数值,显示什么数值,看结果是不是自己想要的,如果不是再查看哪里有问题。 wjjcyy 发表于 2014-5-31 16:49
我经常是使用一个5V的LCD模块(笔段式液晶),需要什么数值,显示什么数值,看结果是不是自己想要的,如果 ...
受教了,你常用的笔段式液晶是什么型号的?我查下,可以的话我也玩玩 论坛上有的,你找下,好像有这个版块。 wjjcyy 发表于 2014-5-31 17:11
论坛上有的,你找下,好像有这个版块。
给个淘宝地址还是型号我啊,我找了下,好像没有,是这两块?
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_470784.gif 这个是贴子,你查看下。里面有你需要的一切,不用谢,呵呵。http://www.amobbs.com/thread-3524242-1-1.html 10xjzheng 发表于 2014-5-31 17:18
给个淘宝地址还是型号我啊,我找了下,好像没有,是这两块?
可以问下其它坛友有没有多的白沙笔段式液晶,这个开源时间很久了。 wjjcyy 发表于 2014-5-31 17:21
这个是贴子,你查看下。里面有你需要的一切,不用谢,呵呵。http://www.amobbs.com/thread-3524242-1-1.htm ...
你也买了吗?现在好像没有卖了耶,我只用过点阵的液晶12864 10xjzheng 发表于 2014-5-31 17:33
你也买了吗?现在好像没有卖了耶,我只用过点阵的液晶12864
可以联系白沙网友
页:
[1]