当前位置:首页 > 公众号精选 > 玩转嵌入式
[导读]写在前面单片机中有看门狗,长时间不喂狗,程序就会复位。为什么长时间不喂狗呢?是因为程序跑飞了,抛开外部因素不谈,今天和大家分享一下单片机程序跑飞的几个原因。在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此...

写在前面

单片机中有看门狗,长时间不喂狗,程序就会复位。为什么长时间不喂狗呢?是因为程序跑飞了,抛开外部因素不谈,今天和大家分享一下单片机程序跑飞的几个原因。
在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。



01数组越界/溢出现象:


单片机程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。



原因:


数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff[10],这个数组只有10个元素,但是在函数中却有这样的语句ucDataBuff[10]=0x1a,这个语句是给数组的第11个元素赋值,:由于定义的数组只有10个元素,从而导致赋值语句中不知道把0x1a放到什么地方,从而导致程序跑飞。



解决方法:


如果在调试程序时,发现程序总是在函数执行完毕时跑飞,多数情况是发生了数组越界(数组溢出)的错误,仔细检查函数中调用的数组是否存在越界(溢出)的情况。


02


中断服务程序缺失现象:


程序运行过程中总是跑飞。



原因:


程序中打开了某个中断,但是却没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。



解决方法:


检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。


03


看门狗复位现象:


在执行一段较为耗费时间的程序时,程序跑飞,并且总是跳到复位位置处。



原因:


程序中使用了看门狗,但是没有及时“喂狗”,从而导致看门狗复位,使程序直接跳到复位位置。



解决方法:


根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是如果有死循环的情况,一定要在死循环中记得“喂狗”。




本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

▼点击下方名片,关注公众号▼在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。01、数组越界/溢出...

关键字: 单片机程序

写在前面单片机中有看门狗,长时间不喂狗,程序就会复位。为什么长时间不喂狗呢?是因为程序跑飞了,抛开外部因素不谈,今天和大家分享一下单片机程序跑飞的几个原因。在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序...

关键字: 单片机程序

对程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个予盾的统一。一般是优化了代码的尺寸,就会带来执行时间的增加;如果优化了程序的执行速度,通常会带来代码增加的副作用。很难鱼与熊掌兼得,只能在...

关键字: 单片机程序

之前一直很奇怪一个问题,每次写好单片机程序之后,用烧录软件进行烧录时,能看到烧录文件也就是hex的文件大小: 我用的单片机芯片是STM32F103C8T6,程序储存器(flash)只有64K。 从上图可以看出,hex有1...

关键字: 单片机程序 CODE 芯片 编写

环境描述:Keil+ Proteus电路仿真首先在Keil里创建一个工程,在工程里建立三个文件,文件名分别是:“头文件.c”,“delay.c”,“delay.h”分别在 头文件.c、delay.c、delay.h写入相...

关键字: 单片机程序 模块方式

1)对于烧录在单片机里面的程序,程序的代码段,data段,bss段,rodata段等都存放在单片机的Flash中。当单片机上电后,初始化汇编代码将data段,bss段,复制到单片机的RAM中,并建立好堆栈,开始调用程序的...

关键字: 单片机程序 存放

最近在调试单片机程序,总是遇到一些开始认为不可思议的事情,后来解决了问题后发现,都是因为自己书写程序不严谨,其主要原因是没有注意c语言的数据类型的数据范围。对有符号、无符号数据的使用存在误区,对类型转换

关键字: 单片机程序 数据类型

单片机我们都用过,我们知道单片机的FLASH有4K的,有8K的,单片机程序我们也写过,但是我们写好的程序有多大,你知道吗?程序写好并编译后生成hex文件,这个hex文件就是要下载到单片机里的文件,这个文件的大小不能超

关键字: hex文件 单片机程序 实际大小

测试,相信对每一个搞程序的都不会生疏,然后我们会联想到什么单元测试,集成测试,发布测试,黑盒测试,白盒测试等等一系列的名词。但在单片机领域,更多的功能测试。测试人员,在试用产品后,发现bug然后报告给研发

关键字: 单片机程序 自动化测试

单片机中一个程序的运行过程分为取指令,分析指令和执行指令几个步骤。取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。分析指令阶段的任务是:将指令寄存器中的指令操作码取出后

关键字: 单片机 单片机程序
关闭
关闭