玩转单片机有几年的时刻了,从触摸51开端就走上了看不到止境的程序员之路。或许大多会以为,敲了几天几夜代码将著作或许项目完美完结的那一刻是最高兴最满意的时分。我却以为,真实高兴的是与Bug奋斗的进程,最终完结著作或项目仅仅这种高兴的结尾。那么咱们该怎样去对待Bug才干做到,游走在Bug国际里享用无尽的高兴。
一些高手在程序的编写方面都有了自己的风格,能够将程序做很好的规划。以细致的思想构造程序架构,以编程标准来打造程序的外观。Bug已经在高手面前无所遁形。所以Bug仅仅高手们用来愉悦的玩物。用来享用那一刻的降服感。为了让菜鸟也能享用其间的高兴,我共享一下自己的经历,让咱们能在程序员这条路上走的高兴,而不是整天熬夜带来的孤单感,菜鸟入门通常以89c52单片机入门,那么我就针对这个讲讲怎样破Bug。
1.装上摄像头定点监控
找出Bug就像找小偷相同,咱们需要在程序中装上多个摄像头,当程序呈现问题时咱们能够知道是在哪一个当地。这点是适当的有用,关于无法仿真的51单片机,要了解程序内部运转的状况和变量现在的值,就显得很无语,几乎束手无策。那么就请参加串口程序的代码,运用串口将一些重要变量的值或许信息发送到上位机上进行观测。这样就像是在各点装上了摄像头,而监控画面便是咱们的上位机软件。串口的收发程序都有老练的模块所以初学者也不必忧虑用不了的问题。现阶段假如写不出来就直接COPY来用用横竖也不必钱,所以在调试的时分要充分发挥串口的效果,让问题变得明晰明晰。用的最多便是发送字符串,发送16进制数据和十进制数据。罗列一个小小的比如:
例一:感觉程序中是没运转到子函数A中。
那么就不要只感觉了,就在A中放上一个摄像头用来监控此处。在子函数A的最初加一句发送字符串的程序:
UartSendString(“现在进入函数A了哦!\n”); //发送到上位机看是否运转了函数A。
这样咱们领会到摄像头的效果了吧,时刻把握程序运转的状况。让Bug逃不出手掌心。
2. 明晰的路标
所谓明晰的路标的第一个意思便是在程序中参加具体的注释,在追捕Bug中咱们要看路标,剖析他会逃串到哪里。单片机编程便是一个逻辑思想。我一向将89C52单片机看作是一个呆头呆脑只需几十个脚的小笨蛋。这个小笨蛋能完结各种小制造是靠什么呢?当然是靠咱们巨大的程序员来给他灌注思想,告知他怎样去运用自己的几十个脚。当测验傍边这个小笨蛋没有依照咱们的主意去干事,那么就肯定是哪里的逻辑呈现了问题。这个时分程序的注释就表现出了优势。咱们依照自己写下的路标来将整个旅程走一遍,看是否有什么缝隙导致走失。那么整个运转进程就无法逃离自己的把握之中。这点就不举例了,咱们在实践中领会吧。只需要将程序看作一条路,自己在头脑中走一边就行。
明晰的路标除了指程序中的注释还指每个变量和每个函数的命名明晰明晰。这便是所说的程序标准。假如程序标准了,就好像是给了程序一个铁的纪律。程序可读性进步,看起来也漂亮。能够说每个人写程序都有自己的风格,假如是刚触摸单片机的童鞋就不必定了。变量总是i和j或许来几个k , y , z。函数名都有可能是void abc(); 假如真这样,那就悲惨剧了。这样调试的时分很苍茫,程序的直观性欠好。在调试中还要不断的跳转到对应的函数来看看这个究竟完结的是个什么功用。我给咱们两个小主张吧,假如现在还没有标准自己程序的童鞋能够学习一下:
(1)函数名和变量名尽量用英文单词组成或许其缩写组成。我罗列几个ucGUI里的一些函数名:GUI_DispStringAt(); GUI_DrawHLine(); GUI_Clear(); GUI_SetColor(); 有了很标准的命名,咱们只学要看到函数名就知道这个函数是什么功用。变量名我也罗列ucGUI里边的几个GUI_RED ,GUI_TM_NORMAL。咱们看变量名也能够知道是什么意思。这个便是标准了函数名和变量名的优点
(2)假如是指针变量前面加个p,假如是全局变量前面加个g。变量名由几个单词组成的中心加上“_”来离隔。
提到这儿,咱们仅仅做了对立Bug的一个前期预备。只需做好上面几步,那么亲爱的菜鸟就能够不必对51单片机的Bug发生惊骇,接下来便是你戏弄Bug的进程了。有人说些程序的人自身就有一种霸气,一种巴望降服的愉悦感。由于程序员能够操控相同东西彻底依照自己的思想去运转。我个人也是这么以为的。所以做好上面几步,你就能够将程序看作是你手中的玩物。我总结了几条针对51单片机对立Bug的技巧:
(1)在重要的点放上摄像头UartSendString(“提示的内容”);
(2)关于变量的调查就将数据发送到上位机调查。
(3)碰到卡死现象能够依照(1)的方法,将发送提示信息的函数多放几个当地来了解程序运转的状况
(4)假如是逻辑上的过错就好好回忆一下程序,经过注释再来理清思路,找Bug游戏不能心急。
(5)要定点查看一个当地能够参加强制卡死while(1);
3. 后续作业
经过上面的两点基本上能够找出程序中的Bug,已然找出来了,只需对症下药,除去他必定不是难事。假如自己除不掉也能够找度娘和各种论坛,由于你现在知道了清晰的问题,能够有针对性的去找处理的方法。那么程序都调试完结了,可是程序中还余留下一些咱们调试时分的残渣,这个怎样办的。那么就要运用一些小技巧怎样一次性清楚一切的摄像头呢?
在程序中能够这样写:
在程序的最初或许头文件里界说:#define HAPPY_DEBUG
在程序调试时参加摄像头就依照如下的格局:
#ifdef HAPPY_DEBUG
UartSendString(“现在进入函数A了哦!\n”);
#endif
写程序是很短的时刻,调试程序是一个绵长的进程。只需做好前期的预备后边依托自己的调试技巧,就能戏弄Bug于拍手之中,而不是被Bug搞的头昏眼花。找出Bug的那一瞬间便是高兴,处理Bug的那一刻更是振奋。这便是与Bug奋斗的高兴地点。在孤单的程序员道路上咱们也要寻求自己的高兴,这便是其间之一。