搜索
bottom↓
回复: 54

突然想到一个问题,单片机程序跑飞之后定时器还能工作不

[复制链接]

出0入58汤圆

发表于 2014-9-16 22:19:01 | 显示全部楼层 |阅读模式
自己写的程序不多,也没遇到过程序被外界干扰跑飞的情况。所以请教一个各位大神单片机在受到外界干扰程序跑飞之后里面的定时器中断还能定时执行不?

我理解的程序跑飞就是PC指针错乱了,那影响的应该只是主函数的执行吧。定时器中断是独立于主函数的硬件,会被程序跑飞干扰么?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-9-16 22:24:02 | 显示全部楼层
老水手怎么会在阴沟里翻船呢?

出0入90汤圆

发表于 2014-9-16 22:27:06 | 显示全部楼层
不一定,程序都飞了,说不定就把计数器的设置改乱了

出0入0汤圆

发表于 2014-9-16 22:29:06 | 显示全部楼层
学习学习

出0入58汤圆

 楼主| 发表于 2014-9-16 22:31:28 | 显示全部楼层
stepby 发表于 2014-9-16 22:24
老水手怎么会在阴沟里翻船呢?

我是新手。

出0入0汤圆

发表于 2014-9-16 22:32:17 | 显示全部楼层

你知不知道你重复发帖了?

出0入58汤圆

 楼主| 发表于 2014-9-16 22:33:31 | 显示全部楼层
aammoo 发表于 2014-9-16 22:27
不一定,程序都飞了,说不定就把计数器的设置改乱了

哦,,这么说就理解了。所以程序跑飞了定时器的执行情况也变成不确定了。

出0入58汤圆

 楼主| 发表于 2014-9-16 22:34:50 | 显示全部楼层
stepby 发表于 2014-9-16 22:32
你知不知道你重复发帖了?

擦,,真的重复了?
立刻看看去。我在电脑上就发了一次啊。

出0入58汤圆

 楼主| 发表于 2014-9-16 22:38:41 | 显示全部楼层
stepby 发表于 2014-9-16 22:32
你知不知道你重复发帖了?

多谢提醒。不知道为何一下子发了两贴。不是故意的。现在已经把另一个帖子标记了,不知道斑竹能否帮删了。

出0入0汤圆

发表于 2014-9-16 22:44:51 来自手机 | 显示全部楼层
当然不可以啊

出0入0汤圆

发表于 2014-9-16 22:50:33 | 显示全部楼层
不一定吧,跑飞的程序指不定干什么呢

出0入0汤圆

发表于 2014-9-16 23:22:27 | 显示全部楼层
这个,看情况的吧..........

出0入0汤圆

发表于 2014-9-16 23:24:38 | 显示全部楼层
时钟还会有,但是定时器的计数器应该不能正常工作了

出0入0汤圆

发表于 2014-9-16 23:28:06 | 显示全部楼层
应该是不能正常工作的。

出0入0汤圆

发表于 2014-9-16 23:33:43 | 显示全部楼层
本帖最后由 wb503059722 于 2014-9-16 23:35 编辑

至少看门狗的定时器还在工作,不然单片机怎么复位。
中断和定时器都是硬件资源,程序只是设置他的。

出0入0汤圆

发表于 2014-9-17 00:09:12 | 显示全部楼层
多半不可以了

出0入0汤圆

发表于 2014-9-17 00:21:11 | 显示全部楼层
经测试,是可以正常运行的,计时器的输出为程序最后一次正确修改的值。
测试平台:MC9S12XS128

出0入84汤圆

发表于 2014-9-17 00:47:13 | 显示全部楼层
跑飞的本质是什么,只要你的定时器是打开的,程序循环里没有关闭定时器的指令,那么跑飞了不影响定时器的工作

出0入0汤圆

发表于 2014-9-17 00:56:54 | 显示全部楼层
czzhouyun 发表于 2014-9-17 00:47
跑飞的本质是什么,只要你的定时器是打开的,程序循环里没有关闭定时器的指令,那么跑飞了不影响定时器的工 ...

  既然飞了,程序就不可控了,像发神经一样,到处乱写乱读,可能写配置,也可能关定时器。 所以为什么软件狗不可靠的原因就是这个。 还是有的片上eeprom,flash写操作要有软开关。就是要特定的时序,如55,AA,55 ,就是为防程序乱了被擦除。

出0入0汤圆

发表于 2014-9-17 01:07:35 | 显示全部楼层
程序已经是不确定状态了。

出50入8汤圆

发表于 2014-9-17 07:29:34 来自手机 | 显示全部楼层
既然飞了,那他之后怎么运行就无法预估了

出0入0汤圆

发表于 2014-9-17 07:46:51 | 显示全部楼层
没注意定时器

出0入0汤圆

发表于 2014-9-17 07:50:39 | 显示全部楼层
应该是进不了定时中断了

出0入0汤圆

发表于 2014-9-17 07:56:08 | 显示全部楼层
既然你是发在51板块,那正常工作的可能性很高,早期的mcu我估计情况都差不多,原因是mcu内核对错误指令采取的态度,像stm32这样的现代mcu,对各种错误的情况至少有个反应,不会当没事一样放过的

出0入22汤圆

发表于 2014-9-17 07:56:29 | 显示全部楼层
艾,,大家都太天真了。

你觉得程序真的会乱飞吗。最大的可能就是修改了PC指针,跳到了一些本不该执行的地方 。然后继续执行后面的程序。。

跳到非程序区,就直接死机了。

看看你PIC的相关文档 就知道了。

出0入0汤圆

发表于 2014-9-17 07:57:36 | 显示全部楼层
硬件、中断一般都应该能运行,不过要考虑堆栈被打乱,系统就像疯了一样乱跑。

出0入0汤圆

发表于 2014-9-17 07:58:51 | 显示全部楼层
可以允许,只是指针乱飞

出0入0汤圆

发表于 2014-9-17 08:14:26 | 显示全部楼层
PC指针被修改了,执行到了不想被执行的地方,如果跑到非程序区,直接就死机了。

出0入0汤圆

发表于 2014-9-17 08:31:59 | 显示全部楼层

没有注意过定时器这块

出0入0汤圆

发表于 2014-9-17 08:40:57 | 显示全部楼层
这个很难说

出0入0汤圆

发表于 2014-9-17 08:56:34 来自手机 | 显示全部楼层
这个目前还没遇到过,不过一直也挺担心跑飞的问题!洗耳恭听各位大牛指导!

出0入0汤圆

发表于 2014-9-17 09:01:54 | 显示全部楼层
跑飞了不影响中断什么的

出0入0汤圆

发表于 2014-9-17 09:12:18 | 显示全部楼层
我不懂 帮顶

出0入0汤圆

发表于 2014-9-17 09:12:53 | 显示全部楼层
一切皆有可能,本身就可能是随机的

出0入58汤圆

 楼主| 发表于 2014-9-17 10:13:10 | 显示全部楼层
如果定时器中断没法正常执行那软件看门狗岂不是一样?如果程序跑分的瞬间刚好乱写寄存器把软件狗关了咋办?

出0入0汤圆

发表于 2014-9-17 10:14:53 | 显示全部楼层
lixin91985 发表于 2014-9-17 07:56
艾,,大家都太天真了。

你觉得程序真的会乱飞吗。最大的可能就是修改了PC指针,跳到了一些本不该执行的地 ...

跳到非程序区会直接死机吗? 请教一下原理

死机这里应该指的是死循环, 只要晶体时钟还在走硬件没坏,还是"活的".

出0入0汤圆

发表于 2014-9-17 10:17:43 | 显示全部楼层
shawn_bu 发表于 2014-9-17 10:13
如果定时器中断没法正常执行那软件看门狗岂不是一样?如果程序跑分的瞬间刚好乱写寄存器把软件狗关了咋办? ...

所以啊,用定时器作软件狗是不可以靠的。 必须是独立的硬件狗,时钟也要是独立。最好连电源也独立,这个在一个芯片上一般就没有了。

出0入58汤圆

 楼主| 发表于 2014-9-17 10:21:46 | 显示全部楼层
babysnail 发表于 2014-9-17 10:17
所以啊,用定时器作软件狗是不可以靠的。 必须是独立的硬件狗,时钟也要是独立。最好连电源也独立,这个 ...

硬件看门狗是指独立于单片机的另一个芯片么?还是就是单片机内置的看门狗电路。如果是内置的还是通过寄存器控制的,那也可能会被跑飞的程序关闭不是。

出0入0汤圆

发表于 2014-9-17 10:22:24 | 显示全部楼层
jnak47 发表于 2014-9-17 08:14
PC指针被修改了,执行到了不想被执行的地方,如果跑到非程序区,直接就死机了。 ...

相当然了。  假设程序有32Kb, 即使程序后面全清成0, NOP指令, pc寄存器还是会不断加,直到溢出ffff,64kB又从0开始计。

出0入0汤圆

发表于 2014-9-17 10:24:46 | 显示全部楼层
本帖最后由 babysnail 于 2014-9-17 10:26 编辑
shawn_bu 发表于 2014-9-17 10:21
硬件看门狗是指独立于单片机的另一个芯片么?还是就是单片机内置的看门狗电路。如果是内置的还是通过寄存 ...


内置的, 所以一般设置看门狗指令会有软件开关的, 如先写  A5,5A这样的指令,才能接着配置,否则指令是不会生效的。 我们学东西不但要知道然更要知道所以然。

可靠性是外接的比内置的高。

出0入0汤圆

发表于 2014-9-17 10:43:33 | 显示全部楼层
不确定状态了

出0入0汤圆

发表于 2014-9-17 10:51:16 | 显示全部楼层
飞了就不一定怎么执行了,从汇编角度说,因为是非定长的操作码和操作对象,读取到的指令就不一定对应c里面的指针指错了,但是函数还是正确的,可能把操作对象解析为操作码了,所以即使读到了,也不可靠

出0入0汤圆

发表于 2014-9-17 10:52:26 | 显示全部楼层
不一定,我就遇到过程序跑飞,计时器还在计时.

出0入0汤圆

发表于 2014-9-17 10:59:34 | 显示全部楼层
albert.hu 发表于 2014-9-17 10:51
飞了就不一定怎么执行了,从汇编角度说,因为是非定长的操作码和操作对象,读取到的指令就不一定对应c里面 ...


是的,你理解的还是很通彻的。还有跳到数据区,也可解释成程序一个道理。

出0入4汤圆

发表于 2014-9-17 11:27:17 来自手机 | 显示全部楼层
遇到过定时器喂狗,程序跑飞狗没死的情况

出0入0汤圆

发表于 2014-9-17 11:52:41 | 显示全部楼层
xiaoyigechaos 发表于 2014-9-17 11:27
遇到过定时器喂狗,程序跑飞狗没死的情况

所以说狗要在主循环中来喂.

出0入22汤圆

发表于 2014-9-17 22:55:48 | 显示全部楼层
babysnail 发表于 2014-9-17 10:14
跳到非程序区会直接死机吗? 请教一下原理

死机这里应该指的是死循环, 只要晶体时钟还在走硬件没坏,还 ...

非程序区一般是0XFF ,多个组合起来,基本上都是一条就地循环指令。

一个例外。就是程序可以重新升级的。新程序区 飞到了 老程序区,单还是按一定的规则在执行的。
这个可以避免,每次重新烧录程序前,先ease all

出0入0汤圆

发表于 2014-9-17 23:08:45 | 显示全部楼层
跑飞与定时器没有关系。在晶振正常情况下,定时器就正常工作。

出0入0汤圆

发表于 2014-9-17 23:18:36 | 显示全部楼层
定时器还是可能会乱的,因此看门狗这时候就体现了价值!

出0入0汤圆

发表于 2014-9-23 08:16:54 | 显示全部楼层
跑飞了,应该会执行非预期的动作。特定程序下会出现逻辑问题

出0入8汤圆

发表于 2014-9-23 08:47:37 | 显示全部楼层
TI的cc2540有个不可停止的计数器,调试的时候暂停再继续,里面的值都在递增,估计就不受跑飞影响了吧。

出0入0汤圆

发表于 2014-9-23 08:49:48 | 显示全部楼层
有看门狗会重新复位的,和刚上电一样。除非你是死循环,又没有看门狗。

出0入0汤圆

发表于 2014-9-23 10:25:35 | 显示全部楼层
定时器是硬件只要寄存器配置好了 时钟没断 就在运行
不过定时中断执行的是软件就难说了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 00:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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