一个犯过的编程错误

为了得到周期一定的时序,我们总是用定时器产生,C51中最常见的用法就是:

void tim0_IRQHandler(void)  interrupt 1

{

  static unsigned int cnt = 0;

  TH0 = XX;

  TL0 = XX;

  cnt++;

  if((cnt %10) == 0){

      //一个时序

  }

  if((cnt%13) == 0)

  {

    //又一个时序

  ]

  if(cnt == 6500){

    cnt = 0;

  }

}:

这样的写法一点问题都没有,如果你将cnt定义为全局变量,if判断条件不放在定时器0中断函数里面时,这种做法就出错了。如下:

unsigned int cnt = 0;

void tim0_IRQHandler(void)  interrupt 1

{

  TH0 = XX;

  TL0 = XX;

  cnt++;

}

void fun(void)

{

  if((cnt %10) == 0){

      //一个时序

  }

  if((cnt%13) == 0)

  {

    //又一个时序

  ]

  if(cnt == 6500){

    cnt = 0;

  }

}

void main(void)

{

  fun();

}

错误就出在,当cnt=10是一段时间,存在时间为一次中断时间间隔,在这个时间间隔了,if((cnt % 10 ) == 0){},括弧里面的内容被执行了好多遍。为什么中断函数行呢?因为

中断函数只有发生中断才能进入,所以只会执行if((cnt % 10 ) == 0){}括弧里面的内容一遍。

如果你想放外边,又只想{}里的内容执行一遍,解决办发就是设置一个标志。

void fun(void)

{

  static  unsigned char old = 0xff;

  if(((cnt %10) == 0) && (cnt != old)){

    old = cnt;

    //添加你需要的代码

  }

}

很低级的错误,就是一些小错误也让你找半天。哎,分享给那些需要的同学。水平比较低,见笑。

时间: 2024-12-15 00:53:10

一个犯过的编程错误的相关文章

C语言编程时常犯十八个错误

C语言的最大特点是:功能强.使用方便灵活.C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下"灵活的余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考.1.书写标识符时,忽略了大小写字母的区别.main(){ int a=5; printf("%d",A);}编译程序把a和A认

程序员编程生涯中会犯的7个错误

英文原文:7 Mistakes You're Making In Your Programming Career 作为软件开发人员生活和职业指导,我需要和很多程序员交流,帮助他们提升职业生涯,加速成长.时间久了,我发现很多程序员总是犯着相同的错误,前仆后继,却毫不自知.下面就是程序员在他们的软件开发生涯中最常犯的 7 个错误. 1. 没有明确的目标 心中没有终点目标,那就只会随波逐流. 如果你想在软件开发的职业生涯上获得成功,那么你需要有一个明确的目标.仅仅只是对遥远的未来有一个模糊的想法是不够

Python 程序员经常犯的 10 个错误

关于PythonPython是一种解释性.面向对象并具有动态语义的高级程序语言.它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得... 关于Python Python是一种解释性.面向对象并具有动态语义的高级程序语言.它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得它在快速应用开发中非常有吸引力,并且可作为脚本或胶水语言来连接现有的组件或服务.Python支持模块和包,从而鼓励了程序的模块化和代码重用. 关于这篇文章 Python简单易学的语法可能会使Python开发

C# 程序员最常犯的 10 个错误

关于C# C#是达成微软公共语言运行库(CLR)的少数语言中的一种.达成CLR的语言可以受益于其带来的特性,如跨语言集成.异常处理.安全性增强.部件组合的简易模型以及调试和分析服务.作为现代的CLR语言,C#是应用最为广泛的,其应用场景针对Windows桌面.移动手机以及服务器环境等复杂.专业的开发项目. C#是种面向对象的强类型语言.C#在编译和运行时都有的强类型检查,使在大多数典型的编程错误能够被尽早地发现,而且位置定位相当精准.相比于那些不拘泥类型,在违规操作很久后才报出可追踪到莫名其妙错

(转)C# 程序员易犯的 10 个错误

关于C# C#是针对微软公共语言运行库(CLR)的开发语言之一.针对CLR的开发语言得益于如跨语言集成的性能,异常处理,安全性增强,组件交互的简化模型,调试和分析服务.对于今日的CLR来说,C#是定位到Windows桌面,移动设备或服务器环境中,在处理复杂,专业的开发项目方面使用最广泛的开发语言. C#是面相对象,强类型的语言.C#中严格的类型检查,在编译和运行时,使得典型的编程错误能尽早报告,并且能精准给出错误位置.这能帮助程序员节省很多时间,相比于跟踪那些可以发生在违规操作很长时间之后的令人

看似简单!解读C#程序员最易犯的7大错误

编程时犯错是必然的,即使是一个很小的错误也可能会导致昂贵的代价,聪明的人善于从错误中汲取教训,尽量不再重复犯错,在这篇文章中,我将重点介绍C#开发人员最容易犯的7个错误. 格式化字符串 在C#编程中,字符串类型是最容易处理出错的地方,其代价往往也很昂贵,在.NET Framework中,字符串是一个不可变的类型,当一个字符串被修改后,总是创建一个新的副本,不会改变源字符串,大多数开发人员总是喜欢使用下面这样的方法格式化字符串: string updateQueryText = "UPDATE E

机器学习入门阶段程序猿易犯的5个错误

如何进入机器学习领域没有定式.我们的学习方式都有些许不同,学习的目标也因人而异. 但一个共同的目标就是要能尽快上手.假设这也是你的目标.那么这篇文章为你列举了程序猿们在通往机器学习高手道路上常见的五种错误. 1.将机器学习看得高不可攀 机器学习只是是还有一堆技术的集合,你能够用它来解决复杂问题.这是一个飞速发展的领域,因此,机器学习的学术交流一般出如今学术期刊及研究生的课本里,让它看起来高不可攀又难于理解. 要想高效掌握机器学习,我们须要转变观念,从技术转到方法,由精确变为"足够好",

深入理解闭包系列第四篇——常见的一个循环和闭包的错误详解

前面的话 关于常见的一个循环和闭包的错误,很多资料对此都有文字解释,但还是难以理解.本文将以执行环境图示的方式来对此进行更直观的解释,以及对此类需求进行推衍,得到更合适的解决办法 犯错 function foo(){ var arr = []; for(var i = 0; i < 2; i++){ arr[i] = function(){ return i; } } return arr; } var bar = foo(); console.log(bar[0]());//2 以上代码的运行

Spring常犯的十大错误,你踩过吗?

1.错误一:太过关注底层 我们正在解决这个常见错误,是因为 "非我所创" 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状. 虽然理解特定库的内部结构及其实现,在很大程度上是好的并且很有必要的(也可以是一个很好的学习过程),但作为软件工程师,不断地处理相同的底层实现细节对个人的开发生涯是有害的. 像 Spring 这种抽象框架的存在是有原因的,它将你从重复地手工劳作中解放出来,并允许你专注于更高层次的细节 -- 领域对象和业务逻辑. 因此,接受抽象