突然想到一个问题,单片机程序跑飞之后定时器还能工作不
自己写的程序不多,也没遇到过程序被外界干扰跑飞的情况。所以请教一个各位大神单片机在受到外界干扰程序跑飞之后里面的定时器中断还能定时执行不?我理解的程序跑飞就是PC指针错乱了,那影响的应该只是主函数的执行吧。定时器中断是独立于主函数的硬件,会被程序跑飞干扰么? 老水手怎么会在阴沟里翻船呢? 不一定,程序都飞了,说不定就把计数器的设置改乱了 学习学习 stepby 发表于 2014-9-16 22:24
老水手怎么会在阴沟里翻船呢?
我是新手。{:lol:} shawn_bu 发表于 2014-9-16 22:31
我是新手。
你知不知道你重复发帖了? aammoo 发表于 2014-9-16 22:27
不一定,程序都飞了,说不定就把计数器的设置改乱了
哦,,这么说就理解了。所以程序跑飞了定时器的执行情况也变成不确定了。
stepby 发表于 2014-9-16 22:32
你知不知道你重复发帖了?
擦,,真的重复了?
立刻看看去。我在电脑上就发了一次啊。 stepby 发表于 2014-9-16 22:32
你知不知道你重复发帖了?
多谢提醒。不知道为何一下子发了两贴。不是故意的。现在已经把另一个帖子标记了,不知道斑竹能否帮删了。 当然不可以啊 不一定吧,跑飞的程序指不定干什么呢 这个,看情况的吧.......... 时钟还会有,但是定时器的计数器应该不能正常工作了 应该是不能正常工作的。 本帖最后由 wb503059722 于 2014-9-16 23:35 编辑
至少看门狗的定时器还在工作,不然单片机怎么复位。
中断和定时器都是硬件资源,程序只是设置他的。 多半不可以了 经测试,是可以正常运行的,计时器的输出为程序最后一次正确修改的值。
测试平台:MC9S12XS128 跑飞的本质是什么,只要你的定时器是打开的,程序循环里没有关闭定时器的指令,那么跑飞了不影响定时器的工作 czzhouyun 发表于 2014-9-17 00:47
跑飞的本质是什么,只要你的定时器是打开的,程序循环里没有关闭定时器的指令,那么跑飞了不影响定时器的工 ...
既然飞了,程序就不可控了,像发神经一样,到处乱写乱读,可能写配置,也可能关定时器。 所以为什么软件狗不可靠的原因就是这个。 还是有的片上eeprom,flash写操作要有软开关。就是要特定的时序,如55,AA,55 ,就是为防程序乱了被擦除。 程序已经是不确定状态了。 既然飞了,那他之后怎么运行就无法预估了 没注意定时器 应该是进不了定时中断了 既然你是发在51板块,那正常工作的可能性很高,早期的mcu我估计情况都差不多,原因是mcu内核对错误指令采取的态度,像stm32这样的现代mcu,对各种错误的情况至少有个反应,不会当没事一样放过的 艾,,大家都太天真了。
你觉得程序真的会乱飞吗。最大的可能就是修改了PC指针,跳到了一些本不该执行的地方 。然后继续执行后面的程序。。
跳到非程序区,就直接死机了。
看看你PIC的相关文档 就知道了。 硬件、中断一般都应该能运行,不过要考虑堆栈被打乱,系统就像疯了一样乱跑。 可以允许,只是指针乱飞 PC指针被修改了,执行到了不想被执行的地方,如果跑到非程序区,直接就死机了。
没有注意过定时器这块 这个很难说
这个目前还没遇到过,不过一直也挺担心跑飞的问题!洗耳恭听各位大牛指导! 跑飞了不影响中断什么的 我不懂 帮顶 一切皆有可能,本身就可能是随机的 如果定时器中断没法正常执行那软件看门狗岂不是一样?如果程序跑分的瞬间刚好乱写寄存器把软件狗关了咋办? lixin91985 发表于 2014-9-17 07:56
艾,,大家都太天真了。
你觉得程序真的会乱飞吗。最大的可能就是修改了PC指针,跳到了一些本不该执行的地 ...
跳到非程序区会直接死机吗? 请教一下原理
死机这里应该指的是死循环, 只要晶体时钟还在走硬件没坏,还是"活的". shawn_bu 发表于 2014-9-17 10:13
如果定时器中断没法正常执行那软件看门狗岂不是一样?如果程序跑分的瞬间刚好乱写寄存器把软件狗关了咋办? ...
所以啊,用定时器作软件狗是不可以靠的。 必须是独立的硬件狗,时钟也要是独立。最好连电源也独立,这个在一个芯片上一般就没有了。 babysnail 发表于 2014-9-17 10:17
所以啊,用定时器作软件狗是不可以靠的。 必须是独立的硬件狗,时钟也要是独立。最好连电源也独立,这个 ...
硬件看门狗是指独立于单片机的另一个芯片么?还是就是单片机内置的看门狗电路。如果是内置的还是通过寄存器控制的,那也可能会被跑飞的程序关闭不是。 jnak47 发表于 2014-9-17 08:14
PC指针被修改了,执行到了不想被执行的地方,如果跑到非程序区,直接就死机了。 ...
相当然了。假设程序有32Kb, 即使程序后面全清成0, NOP指令, pc寄存器还是会不断加,直到溢出ffff,64kB又从0开始计。 本帖最后由 babysnail 于 2014-9-17 10:26 编辑
shawn_bu 发表于 2014-9-17 10:21
硬件看门狗是指独立于单片机的另一个芯片么?还是就是单片机内置的看门狗电路。如果是内置的还是通过寄存 ...
内置的, 所以一般设置看门狗指令会有软件开关的, 如先写A5,5A这样的指令,才能接着配置,否则指令是不会生效的。 我们学东西不但要知道然更要知道所以然。
可靠性是外接的比内置的高。 不确定状态了 飞了就不一定怎么执行了,从汇编角度说,因为是非定长的操作码和操作对象,读取到的指令就不一定对应c里面的指针指错了,但是函数还是正确的,可能把操作对象解析为操作码了,所以即使读到了,也不可靠 不一定,我就遇到过程序跑飞,计时器还在计时. albert.hu 发表于 2014-9-17 10:51
飞了就不一定怎么执行了,从汇编角度说,因为是非定长的操作码和操作对象,读取到的指令就不一定对应c里面 ...
是的,你理解的还是很通彻的。还有跳到数据区,也可解释成程序一个道理。 遇到过定时器喂狗,程序跑飞狗没死的情况 xiaoyigechaos 发表于 2014-9-17 11:27
遇到过定时器喂狗,程序跑飞狗没死的情况
所以说狗要在主循环中来喂. babysnail 发表于 2014-9-17 10:14
跳到非程序区会直接死机吗? 请教一下原理
死机这里应该指的是死循环, 只要晶体时钟还在走硬件没坏,还 ...
非程序区一般是0XFF ,多个组合起来,基本上都是一条就地循环指令。
一个例外。就是程序可以重新升级的。新程序区 飞到了 老程序区,单还是按一定的规则在执行的。
这个可以避免,每次重新烧录程序前,先ease all 跑飞与定时器没有关系。在晶振正常情况下,定时器就正常工作。 定时器还是可能会乱的,因此看门狗这时候就体现了价值! 跑飞了,应该会执行非预期的动作。特定程序下会出现逻辑问题 TI的cc2540有个不可停止的计数器,调试的时候暂停再继续,里面的值都在递增,估计就不受跑飞影响了吧。 有看门狗会重新复位的,和刚上电一样。除非你是死循环,又没有看门狗。 定时器是硬件只要寄存器配置好了 时钟没断 就在运行
不过定时中断执行的是软件就难说了
页:
[1]