单片机嵌入式系统软件复位的几种方式

来源:本站
导读:目前正在解读《单片机嵌入式系统软件复位的几种方式》的相关信息,《单片机嵌入式系统软件复位的几种方式》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《单片机嵌入式系统软件复位的几种方式》的详细说明。
简介:飞思系列的8位单片机没有特定的控制寄存器(三相变压器)可以实现软件复位,当程序运行过程中代码需要强行产生一个复位时必须通过一些软件技巧实现

飞思系列的8位单片机没有特定的控制寄存器(三相变压器)可以实现软件复位,当程序运行过程中代码需要强行产生一个复位时必须通过一些软件技巧实现:

软复位,程序从头运行,硬件不复位。复位脚无复位脉冲输出

这可以通过直接获取复位向量的方式来实现:

void ForceReset(void)

{

union {

void (*vector)(void);

byte c[2];

} softReset;

softReset.c[0] = *(byte*)0xFFFE; //get the reset vector

softReset.c[1] = *(byte*)0xFFFF;

softReset.vector(); //re-STart the code flow

}

硬复位(自耦变压器),程序从头运行,内部所有硬件模块和寄存器同时复位,复位脚有复位脉冲输出

这必须结合FSL 8位单片机内部的架构特点来实现:

1)COP(看门狗)复位

这是最简单的一种方式。程序死循环然后等看门狗作用产生复位。你必须事先启动看门狗功能,复位过程将有少许延时。

void ForceReset(void)

{

DisableInterrupts; //disable all interrupt

for(;;); //wait for watch-dog reset

}

2)非法寻址复位

当指令对某一个不存在的内存空间进行寻址操作时单片机会产生硬件复位。

void ForceReset(void)

{

asm JMP 0xD000; //jump to illegal address will result a RESET

}

注意不同芯片其有效内存空间配置不同,具体地址需参考芯片数据手册做适当调整。

3)非法指令复位

当执行一条不存在的指令编码时单片机会产生硬件复位。这里又可以分两种手段:

a) 利用“合法”指令在特定配置模式下的“非法性”,例如STOP指令。

如果在芯片的配置寄存器SOPT中设定STOPE位为0禁止STOP指令,你若再执行STOP就会认为是非法指令从而立即产生复位。

void ForceReset(void)

{

asm STOP; //illegal STOP will result a RESET, note SOPT_STOPE must be 0

}

如果你的应用中正常情况下不会用到STOP,就可以用这种方式。如果你本来就要用STOP指令就不能用这种方式产生复位,因为SOPT寄存器在复位后只能被写一次。

b) 人为制造非法指令然后强行运行(变压器厂家)。

这是比较通用的一种方法,这个S08内核系列均可适用。在单片机的指令表中确认一条不可能出现的指令编码,例如0x9E10,将其填入RAM中然后强制运行,即可立即产生复位。

void ForceReset(void)

{

byte illegalCode[2];

illegalCode[0] = 0x9e;

illegalCode[1] = 0x10; //illegal instruction

((void (*)(void))illegalCode)(); //execute illegal instruction will result a RESET

}

提醒:《单片机嵌入式系统软件复位的几种方式》最后刷新时间 2024-03-14 01:04:56,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《单片机嵌入式系统软件复位的几种方式》该内容的真实性请自行鉴别。