这不是复位,只是把程序转到地址0去执行,不如用一个JMP更直接。目前可能极少数单片机或者用户已经自行添加Boot load时用户程序的程序开始地址并不为0x0000,所以需要查找这些特定单片机的启动地址。
在keil C51下面可以这样实现:
void soft_reset(void)
{
((void (code *) (void)) 0x0000) ()
}
在需要软件复位的地方使用语句:
soft_reset();
一般可实现软件复位。
可以用死循环实现, 这是很常用的方法!代码框架如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch[20] = {0}
int choice = 0
while (1)
{
//...
//Add you coding here
//...
printf("1, continue 2, exit\n")
gets(ch)
choice = atoi(ch)
if (choice <= 0 || choice >=3)
{
printf("Your select error, input again!\n")
}
else if (choice == 1)
{
continue
}
else
{
exit(1)
//or
//break
}
}
return 0
}
当然情况多的话可以用case 语句实现~~~!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)