找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1894|回复: 0
打印 上一主题 下一主题
收起左侧

编程之难--难在大片程序中的小细节-注意变量类型和范围

[复制链接]
跳转到指定楼层
楼主
ID:71477 发表于 2015-1-1 19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    for(i=0;i<512;i++)//写扇区最大512,用i,所以i要是2字节,不然就卡住了
     {
         Byte_Program(0x800+i,0);
         Byte_Program(0x1000+i,0);
         Byte_Program(0x1600+i,0);
    }/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   先画好流程图看来比较重要。 函数重要,逻辑重要,变量,尤其多次复用的变量更重要。变量最容易被忽略类型、初始化、清0,范围等。尤其是用的多,定义的地方不在本函数甚至本文件中时,别忘本。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这个简单的for循环语句,我想在普通不过 啦。你可以不屑一顾的说:儿科。不过,就是这个问题,折腾我半天,我找来找去,不知道错误出在哪。程序执行到这里,就卡住了。我习惯叫卡机。
  我以为是程序方的位置不对,之前我使用了goto 命令。听说这个东西不稳定。后来我去掉了,还是不行。我又怀疑是函数在多层的循环for  判断if里面,是不是太深了。我怕了。我就弄的尽量靠外。还是不行。我又怀疑是不是写的速度太快,单片机响应不了。我就加延时。还是不行。我又怀疑是不是这个单片机必须写一个扇区,再写一个,我去掉下面两句,还是不行。我多次检查跳出循环的语句,都是正确的。没办法了。我把循环范围减小到100.一试,可以了!!!!才恍然想起检查i的类型范围。原来之前定义的i都是unsigned char 类型。最大255。所以这里永远跳不出循环。在焦急,烦躁,上火的状态下。从乱糟糟的程序中找出这点问题。真不容易。细节,细节问题!!!
  如果是一个小程序中,我肯定一眼就能看出这个问题。但是把他放到一堆程序中。循环,判断,跳转,多个函数,多个C文件,来回翻。加上编辑器又这么难用。心情烦躁的很。就会忽略这些细节了。包括上次,多次使用i值,用完没有清0,结果下面i++的时候出错。头疼!!
先画好流程图看来比较重要。尤其是变量,这种多次复用的变量。最容易被忽略初始化、清0,范围、类型等。编程还忌讳,没有定向,一会想这样,一会想那样,最后很容易乱套。所以,要么一开始就制定好整套流程,要么等全部结束再部分改动。不然真的烦人,极易出错!!!
最后:保持一个冷静的头脑。心里平静。心静才出错几率小。尤其是总是找不错错误的时候,最容易心烦。排错逻辑一定不要被心烦搞乱!!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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