搜索
bottom↓
回复: 54

大神们都来说下你们调试单片机的办法吧!!

[复制链接]

出0入10汤圆

发表于 2014-5-25 16:20:44 | 显示全部楼层 |阅读模式
本帖最后由 10xjzheng 于 2014-5-25 18:04 编辑

调试单片机其实是很多人写程序过程的一个周期相对长的一个环节,会调试的人才能更好地解决问题,用了一年多的单片机,想想是时候来学习下一些调试的技巧,学一些办法更好地调试。但是很少人写着方面的资料,都是靠经验。
在我看来,低级一点调试办法只要是看现象,比如设置一些LED灯在某个程序环节就亮或者蜂鸣器响来说明一些问题之类,高级一点的调试办法主要是使用串口吧。希望在这里能像各位大神学习下调试的办法,我近期是想些一些可以复用的调试程序块,给单片机,方便单片机调节。完成程序之后,调试段可以全身而退,并且占用资源比较少。
我看过原子的一个文章,也许我可以学习下他
http://www.openedv.com/posts/list/877.htm引用下面他说的话,就是我想达到的效果。
“有了USMART,你可以轻易的修改函数参数、查看函数运行结果,从而快速解决问题。比如你调试一个摄像头模块,需要修改其中的几个参数来得到最佳的效果,普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直到满意为止。而利用USMART,则只需要在串口调试助手里面输入函数及参数,然后直接串口发送给单片机,就执行了一次参数调整,不满意的话,你在串口调试助手修改参数在发送就可以了,直到你满意为止。这样,修改参数十分方便,不需要编译、不需要下载、不会让单片机折寿。”
正所谓磨刀不误砍柴工,我想掌握调试的办法至关重要。
大神们发表下自己一下调试的心得给我们这些初学者学习下吧,大家都可以再这里交流下自己调试的程序,调试的方法,或者帮忙上一些资料,谢谢。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-5-25 16:50:10 | 显示全部楼层
折寿这点应该不用考虑, 以擦写10W次记, 以每分钟擦写1次, 24小时不停的工作, 能使用100000/24/60 = 69天, 如果工作时间减半12小时则为 138天, 频率减半即每2分钟1次, 则为 276天. 实际上频率远不可能这么高, 所以寿命无需考虑

出0入10汤圆

 楼主| 发表于 2014-5-25 16:57:41 | 显示全部楼层
ysu533 发表于 2014-5-25 16:50
折寿这点应该不用考虑, 以擦写10W次记, 以每分钟擦写1次, 24小时不停的工作, 能使用100000/24/60 = 69天,  ...

恩,也是,主要不是这点,主要是调试时间的问题,真的是会调试和不会调试解决问题的速度完全不一样。

出0入34汤圆

发表于 2014-5-25 16:59:08 | 显示全部楼层
ysu533 发表于 2014-5-25 16:50
折寿这点应该不用考虑, 以擦写10W次记, 以每分钟擦写1次, 24小时不停的工作, 能使用100000/24/60 = 69天,  ...

怎么看着看着我感觉您貌似变身成了一个半自动的下载器了!哈~

出130入20汤圆

发表于 2014-5-25 17:02:21 | 显示全部楼层
单片机也是有寿命的啊,老这样不停的刷,很折寿的。呵呵,现在除了OTP类的片子,基本寿命不会这么少的,都是几十万次以上。

想用串口与单片机交互进行调试?参考ARM9之类的片子的bootloader的思想就行了

出0入0汤圆

发表于 2014-5-25 17:04:51 | 显示全部楼层
xyz543 发表于 2014-5-25 16:59
怎么看着看着我感觉您貌似变身成了一个半自动的下载器了!哈~   ...

呵呵, 只是为了说明, 一般情况下, 寿命是不用考虑的这一论题

出130入129汤圆

发表于 2014-5-25 17:11:55 | 显示全部楼层
我用51,AVR就没调试过,直接不断下载。
现在用STM32,的确很难搞定的问题才跟踪一下,不过板上留几个LED当测试标志是很有必要的
头像被屏蔽

出0入0汤圆

发表于 2014-5-25 17:15:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入10汤圆

 楼主| 发表于 2014-5-25 17:39:14 | 显示全部楼层
topdog 发表于 2014-5-25 17:15
不是有在线仿真的吗?
可以n多断点的说。

没有用过,不知道还有没有更高级的功能,可能进行更厉害的调试吗?

出0入0汤圆

发表于 2014-5-25 17:40:56 | 显示全部楼层
用UART来改变程序函数参数的方法是一个很好的方法,不过前提是要有一定的软件基础,况且那一套并不是所有的单片机都扛得住的(前提要单片机有些资源的)
如果 用仿真器调试单片机老板还要求考虑单片机的闪存擦写寿命,建议你换个公司,毕竟跟项目进度比,烧坏几个单片机那简直不值得一提

出0入10汤圆

 楼主| 发表于 2014-5-25 18:07:27 | 显示全部楼层
rootxie 发表于 2014-5-25 17:40
用UART来改变程序函数参数的方法是一个很好的方法,不过前提是要有一定的软件基础,况且那一套并不是所有的 ...

删掉了那句话,其实烧坏单片机那句话不是重点。重要的是调试方便,不用不断地烧写,改程序。如果能写出复用性高的,占用资源少的当然是最好,用的人可能只要会移植就好。

出0入0汤圆

发表于 2014-5-25 18:34:09 | 显示全部楼层
当年调K60中断的时候,用的液晶加按键,当时还不知道K60 还能在线调试。。。。

出0入0汤圆

发表于 2014-5-25 19:24:33 | 显示全部楼层
我一般都是插入串口输出语句来看程序运行调用的函数和过程。
用STC12的时候,一般都是串口传数据给LCD的,所以LCD都是最后搞。

出0入0汤圆

发表于 2014-5-25 19:26:02 | 显示全部楼层
10xjzheng 发表于 2014-5-25 18:07
删掉了那句话,其实烧坏单片机那句话不是重点。重要的是调试方便,不用不断地烧写,改程序。如果能写出复 ...

可以参考 RT-THREAD的finsh,优点是非常方便,缺点就是基本要M3的级别,耗费一定的SRAM和Flash
1K RAM字节的单片机 就不要考虑了,只能用用printf了

出0入0汤圆

发表于 2014-5-25 19:26:37 | 显示全部楼层
调试和测试,有什么区别呢?

出0入4汤圆

发表于 2014-5-25 19:45:02 | 显示全部楼层
如果有LCD,就先把LCD搞定,然后LCD显示相关量。
如果没有LCD,就printf。
最重要的一点,如果有仿真器,首选仿真器。

出0入0汤圆

发表于 2014-5-25 19:48:37 | 显示全部楼层
最好的还是仿真器吧

出0入442汤圆

发表于 2014-5-25 21:06:08 | 显示全部楼层
10xjzheng 发表于 2014-5-25 16:57
恩,也是,主要不是这点,主要是调试时间的问题,真的是会调试和不会调试解决问题的速度完全不一样。 ...

做单片机都有流程图吧。主要调流程,流程没问题,一般程序也不会有大的问题。

出0入10汤圆

 楼主| 发表于 2014-5-25 21:21:56 | 显示全部楼层
wye11083 发表于 2014-5-25 21:06
做单片机都有流程图吧。主要调流程,流程没问题,一般程序也不会有大的问题。 ...

有时候有画,但是粗心加上功力不够所以一般都会出错

出0入13汤圆

发表于 2014-5-25 21:22:40 | 显示全部楼层
很早使用AVR-JTAG-MKII,效果非常的,后来就习惯了JTAG。一般的代码写好调试,很容易通过的。高级点的需要跟踪的。。。。。老是下载-调试-下载-调试的 就要吸取经验了,提高代码的设计质量减少BUG处理时间。

出0入0汤圆

发表于 2014-5-25 21:24:17 | 显示全部楼层
本帖最后由 lswhome 于 2014-5-25 21:25 编辑

俺调试都是自己做好16位的数码管和LCD模块,哪个方便用哪个调试。。。。那个PRINTF速度太慢,有的程序里PRINTF反倒会导致问题。所以,数码管的速度最快,但显示有限制,LCD的速度次之,但是可以显示很多内部信息。。。很不错(OLED的显示速度非常快,可以用来代替LCD哦,对于观察某些快速变化的东西,OLED的优势是绝对的。。)
以上是我的笨办法。。。

出0入0汤圆

发表于 2014-5-25 21:56:51 | 显示全部楼层
普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直到满意为止。

晕,现在的仿真器直接可以修改变量的值,这都不知道?

出0入10汤圆

 楼主| 发表于 2014-5-25 22:19:22 | 显示全部楼层
gliet_su 发表于 2014-5-25 21:56
普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直 ...

对于初学者来说,真的不知道啊,现在知道了

出0入10汤圆

 楼主| 发表于 2014-5-25 22:20:13 | 显示全部楼层
liao-ljj 发表于 2014-5-25 21:22
很早使用AVR-JTAG-MKII,效果非常的,后来就习惯了JTAG。一般的代码写好调试,很容易通过的。高级点的需要 ...

需要反思

出0入0汤圆

发表于 2014-5-25 22:26:32 来自手机 | 显示全部楼层
全凭脑袋想象,哈哈

出0入0汤圆

发表于 2014-5-25 22:56:29 | 显示全部楼层
直接在编译器仿真,再不行,就printf

出0入13汤圆

发表于 2014-5-25 22:57:50 | 显示全部楼层
以前有人写代码成品率非常高的,一次成型。老工程师的很有耐心,细心,厉害吧!

出0入442汤圆

发表于 2014-5-25 23:09:37 | 显示全部楼层
gliet_su 发表于 2014-5-25 21:56
普通的做法:写函数->修改参数->下载->看结果->不满意->修改参数->下载->看结果->不满意….不停的循环,直 ...

有的是流程错了,再改参数也没用啊。多的东西可以跳过不执行,但少的东西免不了重新编译下载。

出130入129汤圆

发表于 2014-5-25 23:38:25 | 显示全部楼层
liao-ljj 发表于 2014-5-25 22:57
以前有人写代码成品率非常高的,一次成型。老工程师的很有耐心,细心,厉害吧! ...

我有些朋友也是盲写的,不用电路板,不用实物设备,根据文档资料来写,基本上一次成型。

感觉很神奇的事情

出0入0汤圆

发表于 2014-5-26 09:40:23 | 显示全部楼层
来学习一下啊

出0入0汤圆

发表于 2014-5-26 11:00:14 | 显示全部楼层
在51上一般用printf,从串口输出调试信息,调试蛮方便,不过就是会占用点资源

出0入13汤圆

发表于 2014-5-26 21:10:03 | 显示全部楼层
以前搞linux驱动和BSP的时候,代码的要求非常的高,核心网交换机使用的要求很高!开发缓慢但是质量很高,最终的效果也是非常厉害的,2TB线速级交换。。。。。

出0入0汤圆

发表于 2014-5-27 00:17:26 | 显示全部楼层
涨知识了,谢谢

出0入8汤圆

发表于 2014-5-27 08:33:29 来自手机 | 显示全部楼层
这个调试会占用资源吧

出0入10汤圆

 楼主| 发表于 2014-5-27 11:07:49 | 显示全部楼层
canspider 发表于 2014-5-27 08:33
这个调试会占用资源吧

如果占用资源小的话也没有什么关系

出0入0汤圆

发表于 2014-5-27 11:28:06 | 显示全部楼层
好方法。

出0入4汤圆

发表于 2014-5-27 12:51:55 | 显示全部楼层
我用的都很低端,一般是串口或者LCD调试。

出90入0汤圆

发表于 2014-5-27 13:16:04 | 显示全部楼层
仿真器啊。与工资比,仿真器不值钱了。

出0入0汤圆

发表于 2014-5-27 13:25:46 | 显示全部楼层
68336016 发表于 2014-5-25 23:38
我有些朋友也是盲写的,不用电路板,不用实物设备,根据文档资料来写,基本上一次成型。

感觉很神奇的事 ...

以前我提过这种事,有人盲写几个小时,一次通过,但代码量不会太大,中间真的没有调试过;  但好些年轻工程师不信,嗨,现在的年轻人都忘了早些年的51是完全靠LED和峰鸣器来调试的,甚至这两个都没有;

出0入0汤圆

发表于 2014-5-27 13:26:33 | 显示全部楼层

他那个所谓的USART移值性不好,有机会还是自己弄一个吧;其实没多难;

出0入0汤圆

发表于 2014-5-29 11:05:44 | 显示全部楼层
仿真器仿真

出0入0汤圆

发表于 2014-5-29 11:27:04 | 显示全部楼层
逻辑啥的用串口
时序啥的用示波器
寄存器啥的用仿真器

出0入10汤圆

 楼主| 发表于 2014-5-29 22:06:43 | 显示全部楼层
lyzhangxiang 发表于 2014-5-29 11:27
逻辑啥的用串口
时序啥的用示波器
寄存器啥的用仿真器

总结得非常好

出0入10汤圆

 楼主| 发表于 2014-5-30 09:42:43 | 显示全部楼层
ywl0409 发表于 2014-5-25 19:26
调试和测试,有什么区别呢?

什么意思,不懂?

出0入0汤圆

发表于 2014-5-30 10:00:30 | 显示全部楼层
68336016 发表于 2014-5-25 23:38
我有些朋友也是盲写的,不用电路板,不用实物设备,根据文档资料来写,基本上一次成型。

感觉很神奇的事 ...

                真是厉害  神一般的人

出0入0汤圆

发表于 2014-5-31 16:23:24 | 显示全部楼层
fsmcu 发表于 2014-5-26 11:00
在51上一般用printf,从串口输出调试信息,调试蛮方便,不过就是会占用点资源 ...

你好  同是搞电子的同志  能否加下你的QQ或者联系方式之类的  我看过你08年搞过温控PID的帖子  自己按照你讲解的方法试了一下  总是在目标温度附近有很大的震荡  我采用了你说的MAX6675来读取温度值的 能否贡献一下当年你的代码 我自己写了代码 但总是调不出来 在这里先说声谢谢了 急需要您稍微帮助一下

出0入0汤圆

发表于 2014-5-31 16:49:17 | 显示全部楼层
我经常是使用一个5V的LCD模块(笔段式液晶),需要什么数值,显示什么数值,看结果是不是自己想要的,如果不是再查看哪里有问题。

出0入10汤圆

 楼主| 发表于 2014-5-31 17:08:01 | 显示全部楼层
wjjcyy 发表于 2014-5-31 16:49
我经常是使用一个5V的LCD模块(笔段式液晶),需要什么数值,显示什么数值,看结果是不是自己想要的,如果 ...

受教了,你常用的笔段式液晶是什么型号的?我查下,可以的话我也玩玩

出0入0汤圆

发表于 2014-5-31 17:11:00 | 显示全部楼层
论坛上有的,你找下,好像有这个版块。

出0入10汤圆

 楼主| 发表于 2014-5-31 17:18:53 | 显示全部楼层
wjjcyy 发表于 2014-5-31 17:11
论坛上有的,你找下,好像有这个版块。

给个淘宝地址还是型号我啊,我找了下,好像没有,是这两块?

出0入0汤圆

发表于 2014-5-31 17:21:07 | 显示全部楼层
这个是贴子,你查看下。里面有你需要的一切,不用谢,呵呵。http://www.amobbs.com/thread-3524242-1-1.html

出0入0汤圆

发表于 2014-5-31 17:30:59 | 显示全部楼层
10xjzheng 发表于 2014-5-31 17:18
给个淘宝地址还是型号我啊,我找了下,好像没有,是这两块?

可以问下其它坛友有没有多的白沙笔段式液晶,这个开源时间很久了。

出0入10汤圆

 楼主| 发表于 2014-5-31 17:33:35 | 显示全部楼层
wjjcyy 发表于 2014-5-31 17:21
这个是贴子,你查看下。里面有你需要的一切,不用谢,呵呵。http://www.amobbs.com/thread-3524242-1-1.htm ...

你也买了吗?现在好像没有卖了耶,我只用过点阵的液晶12864

出0入0汤圆

发表于 2014-6-2 18:14:46 | 显示全部楼层
10xjzheng 发表于 2014-5-31 17:33
你也买了吗?现在好像没有卖了耶,我只用过点阵的液晶12864

可以联系白沙网友
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 02:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表