hotpower 发表于 2006-3-30 22:56 ZLG-ARM ←返回版面 | 哈哈,为什么不说我是将复杂的问题简单化了呢??? |
关于程序飞和在何处喂狗网上不知争论了N个回合也未见分晓.
但是主程序飞中断可能还在工作这个有些共识!!!
为何???
这只是在MCU的中断向量固定在ROM相对地址的基础上的,因为在主程序飞时,
若发生中断,则中断服务程序将会自动跳入事先约定好的向量入口地址!!!
像51会按中断号*8+3(复位为0x0000)的规律执行.
所以,他们是按中断号进行散转的.
在LPCARM中(也包括其他ARM),中断地址是存入中断向量地址数组中的.
而数组是在RAM中的.
当数组的内容发生变化后,中断地址随即发生变化,也就不可能完成"主程序飞中断可能还在工作"!!!
因为中断可能只能执行一次(天知道干了些什么坏事),就阻止了以后的其他中断的再次进入!!!!!!!!!!!!!!!
这自然就会死机而导致看门狗复位!!!
如果飞入喂狗区的循环圈那将是个灾难...听天由命吧...
不过养狗并不是想让狗咬人,这并不是当初养狗的目的!!!
当性命难保时被疯狗咬才是真意...
这就是中断地址和中断向量号管理的细小差异!!!
但是中断地址的变化在0x00000000~0xfffffff,
而中断向量号的变化在0b00000~0b11111.(LPCARM共32个中断向量)
在采用中断向量号管理后,任何中断向量号的变化都会跳入一个中断服务程序,
即使是跳入了1个错误的中断服务程序,但程序是不会飞的!!!!!!!!!!!!!!
这样就可在每个中断服务程序判别是否是自己的中断服务程序!!!!!!!!!!
难道这不是"将复杂的问题简单化了"吗???
什么事物得到必须付出!!!但要看付出的多少和得到的多少!!!
在MCU都能容忍低速,难道在高速ARM上牺牲几条指令周期换回长久的太平不值得吗???
|
|
|
文章评论(0条评论)
登录后参与讨论