中断服务函数和中断向量表对应起来了么,stm32的设计是tim1的不同中断单独不同的中断源,一定要看清楚了。同时自己编写的中断服务函数一定要和启动文件中定义的中断向量表对应起来。两者不一致则程序就会执行汇编文件中定义的默认服务函数,一个无限循环。做到这两点程序至少不会跑飞了。剩下的事情需要注意的是在中断服务函数中清楚中断源。
程序本来是按设定运行的,如你编的程序在存储器中的地址是0-1000,由于某种原因 (干 扰或程序漏洞),程序运行在了1000之后的区域,就 是程序“跑飞”
这里面可不是你要的代码,根你设定的运行过程毫无关系,也许只有运行完了(程序计数器加到 最大值后自动清0),才能回到程序的开头,也许死在某个地方,永远回不来了
这时如果有看门狗,就可以复位或回到你程序设定的某个地方
原因很多啊
1)程序没有结尾或不是循环的程序。
2)nmi管脚没有上拉。
3)在看门狗动作的时候程序会经常跑飞。
4)程序编制不当也会引起程序跑飞。
5)硬件系统有问题。
scanf的返回值是你输入的项数,是一个int类型,所以你把bool改成int就可以啦。。。不过你这程序很怪异。。。既然n是个int型,又要求输入一个数,那么yesorno怎么可能等于0。。。好吧,输入字母不算。。。
你说的是类似于尖峰电压干扰,此时电压会发生变化,但又不足以让单片机复位,但会引起单片机的部分寄存器值的变化,单片机寄存器就如电脑的内存一样,其值发生变化,程序状态就会发生变化,从而引起程序跑飞。
以上就是关于为什么我Systick中断打开之后主程序就跑飞了全部的内容,包括:为什么我Systick中断打开之后主程序就跑飞了、什么叫单片机的程序“跑飞”、程序跑飞一般是什么原因造成的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)