单片机种,程序“飞掉”是什么意思呢

单片机种,程序“飞掉”是什么意思呢,第1张

单片机在工作过程中也常常会由于电源的投入和切除,瞬间短路以及由电网串进来的干扰脉冲而引起CPU的工作紊乱,程序“跑飞”,即程序进入非预定的区域而无秩序地运行。程序出错还是进入死循环都是跑飞可能的结果

单片机程序运行的原理是通过寄存器状态的设置来控制单片机内部以及端口的各个管脚的逻辑状态,来实现预期逻辑功能的目的。
而这所有的功能是通过逻辑单元的0-1电平来实现的,这些逻辑可能被外界的电磁干扰或者内部本身逻辑结构的问题,使得出现了一个不可控的逻辑状态,这是单片机会出现很多预料之外的状态,这是我们就说单片机”跑飞了“。
而防止这种状态的出现就是加入“看门狗”机制,也就是说,单片机在运行中,我使用一个定时器,定时器不断的递增,如果程序运行正常,我会在一段时间内(定时器溢出之前)将其清空,也就是说,只要程序运行正常,这个定时器永远也不会溢出。但,如果程序跑飞了,进入了不可控的状态,则程序不会运行到清空定时器这个命令上来,这是,我强行将单片机重启,使单片机恢复初始状态

所谓程序跑飞就是PC指针没有按照预定的程序变更,可能PC指针指向一个不确定的或者根本就没有存放用户代码的程序存贮空间,造成PC指针根本无法恢复到用户代码空间之内,程序跑飞,当发生中断时,中断服务程序代码仍然可以被执行。

你说的是类似于尖峰电压干扰,此时电压会发生变化,但又不足以让单片机复位,但会引起单片机的部分寄存器值的变化,单片机寄存器就如电脑的内存一样,其值发生变化,程序状态就会发生变化,从而引起程序跑飞。

跑飞指的是程序指针混乱,堆栈被破坏,跑飞算是程序运行问题中较严重的一类,对指针未初始化或未指向值就解引用常会引起跑飞 如: struct AA { int i; char j; } p; 如未p = (AA )malloc(sizeof(struct AA))等之类进行初始化就 使用p->i,j等

1、你好我想问你知道跑飞的意思吗,程序跑飞一般是指PC指针不按照你的程序思路去指向了,比如你退出中断的时候应该回到之前的那个压栈PC处却没有,这样的现象我们认为程序跑飞。
2、对于程序跑飞一般我们采用看门狗的方式来让程序复位,防止程序跑飞造成严重后果。
3、看不到现象不一定是跑飞,不过STC这类片子没有仿真器支持的吧一般,如果是AVR或者PIC或者430用仿真器看看PC就知道了。
4、可以将某个口的输出特征电平,用于检测程序是否跑飞,运行后检测该口的电平是否有差异即可。
5、程序跑飞了是可以在写入的,除非是芯片损坏了,是不是电源或者复位电平等导致芯片挂了,所以你认为是程序跑了一遍就挂掉了。
6、打好基础,搞清楚细节问题,对你很有帮助,比如看门狗如何使用等这类问题,编程谁都会的,外面一大把都是。什么高中毕业,大专生,就连现在本科生都去抢单片机的饭碗,搞不懂。
7、系统的学习,不要只看到片面的东西,学会自己的一套分析问题的方式。
8、打字很累,有时间hi我


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13216917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-21
下一篇 2023-06-21

发表评论

登录后才能评论

评论列表(0条)

保存