DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 131|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 14:02:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      飞思系列的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
  }
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-25 17:17 , 耗时 0.088018 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表