嵌入式linux模块复位,单片机嵌入式系统软件复位的几种方式
飞思系列的8位单片机没有特定的控制寄存器可以实现软件复位,当程序运行过程中代码需要强行产生一个复位时必须通过一些软件技巧实现:本文引用地址:http://www.eepw.com.cn/article/148513.htm
软复位,程序从头运行,硬件不复位。复位脚无复位脉冲输出
这可以通过直接获取复位向量的方式来实现:
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
}
嵌入式linux模块复位,单片机嵌入式系统软件复位的几种方式相关推荐
- 杭州嵌入式linux培训机构,杭州嵌入式培训|嵌入式软件培训|嵌入式编程|杭州linux培训-和盈...
技术名称 知识要点 学习目的 Linux操作系统 Linux介绍与安装 Linux基本命令操作 文件系统管理 用户管理 权限管理 网络配置 常用文本处理工具 搭建Samba服务器 搭建FTP服务器 搭 ...
- 嵌入式linux的发展历程,嵌入式Linux论文(历史发展分类及应用)
嵌入式Linux 一.嵌入式Linux简介 1.1 嵌入式Linux历史 随着社会的发展,信息化技术的成熟和数字化产品的普及,让以计算机技术.芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用 ...
- 嵌入式Linux初始化硬件RTC,嵌入式Linux系统中的快速启动技术研究
嵌入式Linux系统主要特点在于使用Bootloader替代了桌面系统的BIOS,同时对系统进行了规模上的裁剪,但硬件上的劣势往往导致系统启动速度较慢,而嵌入式产品使用者又对系统的开机速度比较敏感,样 ...
- 嵌入式linux sd卡读写,嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(二)...
嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 一.开发环境 主 机:VMWa ...
- 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...
<嵌入式linux应用程序开发完全手册>中断控制器操作(外部中断)学习笔记 一.ARM中断体系 当一个"异常"发生时,或者说当收到一个中断触发信号时,ARM9将会自动完 ...
- 嵌入式linux开发环境 cpu,嵌入式Linux开发环境的搭建之:U-Boot移植-嵌入式系统-与非网...
5.2 U-Boot移植 5.2.1 Bootloader介绍 1.概念 简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序.通过这段程序,可以 ...
- 嵌入式linux内核编译感想,嵌入式Linux内核的交叉编译编译-基于2.6.26
测试环境:Fedora 9 Linux 2.6.26 / gcc 4.3.0 / arm-Linux-gcc 3.4.1 本 文主要介绍如何构建在x86平台上交叉编译各平台上的嵌入式Linux内核.要 ...
- 嵌入式linux图形系统设计,轻量级嵌入式Linux图形系统设计与实现
摘要: 图形用户界面(GUI)是人机交互界面(MMI)的重要表现形式,它不仅提供了丰富的图像信息,而且提高了用户同嵌入式设备的交互效率.随着嵌入式技术的广泛应用和嵌入式硬件的快速发展,人们对嵌入式设备 ...
- 嵌入式linux启动根文件系统,嵌入式Linux根文件系统制作和挂载
嵌入式Linux系统由三部分组成: uboot.kernel.根文件系统, 还是这张老图 这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统 那么什么是根呢?哈哈 其实根表示的就是第一个 ...
最新文章
- 【深度学习入门到精通系列】医疗影像分割
- Three.js中使用材质覆盖属性
- Fedora20 优化体验
- 数据库访问 mysql连接库--查询
- JSP PO VO BO DTO POJO DAO解释
- 一个好的技术团队应该怎么选择开发语言
- 作者:褚金翔(1979-),男,中国农业科学院农业环境与可持续发展研究所助理研究员。...
- 我发现Facebook Messenger漏洞可使安卓用户互相监听,获奖6万美元
- Ubuntu Hudson 安装配置
- 每天CookBook之Python-005
- 【面试】排序算法整理
- Scala中I/O类使用详细解析
- SkeyeLive开源流媒体同屏直播软件源码功能框架解析
- 淘宝购买win10激活码流程
- 电脑如何恢复已删除文件 如何恢复被删除的数据
- ht城市介绍人口数量Html,城市人口热力图 城市热力图查询
- 操作系统 请求分页存储管理方式(含页面置换算法)
- 区块链(bitcoin)学习
- 正则表达式在IE7浏览器出现校验结果不正确
- 浙江工业大学 计算机考研难吗,浙江工业大学考研难吗
热门文章
- 十年蓄势,新基建风口,紫光云如何后发先至?
- 销售数据分析之客户究竟集中在哪里?
- A029_jdbc深入理解
- 软考-高项-论文-信息系统项目的风险管理
- c++11的函数返回值要不要std::move()
- 页式存储,段式存储,段页式存储,引入快表等访存次数
- SketchUp:SketchUp草图大师软件使用技巧总结(视图操作,绘图环境优化,缩放/镜像/对齐/桌边倒圆角案例)
- stack-protector enabled but compiler support broken
- 单机十万并发HLS直播服务器的防盗链技术
- 直播类app开发的开屏广告是怎样实现的