(教训)编程之难--难在大片程序中的小细节-注意变量类型和范围
2013-10-23 16:41
274 查看
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,范围、类型等。编程还忌讳,没有定向,一会想这样,一会想那样,最后很容易乱套。所以,要么一开始就制定好整套流程,要么等全部结束再部分改动。不然真的烦人,极易出错!!!最后:保持一个冷静的头脑。心里平静。心静才出错几率小。尤其是总是找不错错误的时候,最容易心烦。排错逻辑一定不要被心烦搞乱!!
{
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,范围、类型等。编程还忌讳,没有定向,一会想这样,一会想那样,最后很容易乱套。所以,要么一开始就制定好整套流程,要么等全部结束再部分改动。不然真的烦人,极易出错!!!最后:保持一个冷静的头脑。心里平静。心静才出错几率小。尤其是总是找不错错误的时候,最容易心烦。排错逻辑一定不要被心烦搞乱!!
相关文章推荐
- (教训少占鱼)编程之难--难在大片程序中的小细节-注意变量类型和范围
- 编写一个程序,分别以signed和unsigned限定的char、short、int与long类型的变量取值范围
- 练习 2-1 编写一个程序以确定分别由 signed 及 unsigned 限定的 char、short、 int 与 long 类型变量的取值范围。
- 提醒自己:编程时一定要注意在延时函数中延时变量i的类型!
- Python中数据类型变量,编码以及格式化注意细节O(∩_∩)O
- 编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现
- 注意程序前后相同变量类型一致
- 练习2-1 编写一个程序以确定分别由signed及unsigend限定的char short int 与long类型变量的取值范围
- javaScript数据类型和变量需要注意的几个细节
- 练习2-1 编写一个程序一确定分别由signed及unsigned限定的char,short,int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务。
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(switch语句)
- GPU编程自学6 —— 函数与变量类型限定符
- iOS中四种实例变量的范围类型@private@protected@public@package
- 关于“类型,参数,变量”的声明中,其编程风格
- 【C语言程序设计】编程确定不同数据类型的取值范围
- 8点需要注意的Web编程小细节
- 【JavsScript】当 JavaScript 从入门到提高前需要注意的细节:变量部分
- 【Python自动化】编程控制类型变量顺序化
- [编程] C语言变量和数据类型总结练习题
- C++学习第5篇-变量范围及其他数据类型