首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机程序不断复位会有什么有关问题

2012-04-01 
单片机程序不断复位会有什么问题?main(){UART_inti()while (1)}这个程序里,如果我把while(1)去掉后发现

单片机程序不断复位会有什么问题?
main()
{
UART_inti();
while (1);
}
这个程序里,如果我把while(1)去掉后发现再开发板上得实验效果是一样的,但有高手说这会造成程序不断的复位,会有问题,各位大侠请帮解释下,会出什么问题?谢啦哈。。。。

[解决办法]
(1)单片机不断复位会有什么问题?
单片机不断复位的话,你正常的程序逻辑就不能正确执行了。就像你打开你的电脑用PS处理图片,处理了一半,我就按了重启按键;等你再进系统再打开PS,我又再按重启按键。你还能干活吗?

(2)对于没有嵌入式系统的单片机软件,main函数中必须有一个无限循环的结构保证main函数永远不会退出。一般的结构是
void main(void)
{
for(;;)
{
//Do something
}
}
如果程序退出了main,程序指针会顺着main的最后一行代码往下面地址继续执行。下面的代码可能是其它函数,或者是没有程序的区域(默认情况下是oxff,也可以填充成其它值)。这样程序就会执行到你不能预期的地方。对于51单片机,0xFF好像是Mov指令,对于其它单片机,可能是非法指令然后导致单片机复位。
总之,这样会出问题的。
[解决办法]
main()
{
UART_inti();
while (1);
}
// main 返回 exit()?
单片机上不可预料的结果
[解决办法]
看门狗通常默认是关闭的;
如果不想打开看门狗,可以在程序开始的初始化时,通过设置寄存器,人为关闭开门狗
[解决办法]

探讨
引用:

main()
{
UART_inti();
while (1);
}
// main 返回 exit()?
单片机上不可预料的结果

可是当我把while(1),去掉以后他还是能正常工作啊。。。

热点排行