Ⅰ avr单片机的死锁是怎么造成的这种死锁是一种什么状态
AVR系列单片机在仿真调试之前返拿核,首先必须对AVR的熔丝位和锁定位进行配置。如果配置不当,则可敏数能造成单片机不能正常工作,严重时可能导致单片机死锁。
锁死后不能使用isp
只能使用高压编程器编程并漏掘恢复熔丝位
Ⅱ dspic33ep运行中发生死锁
dspic33ep运行中发生死锁的原因:
1、对于没中哪漏有时钟安全机制的单片机缓薯,设置了错误的、无效的时钟源,导致单片机内核无法工作。该情况常见于Atmega单片机。
2、误关闭了对应的编程接口,或者将编程接口复用为其它功能,导致无法再通过这个接口更新程序。
3、误操作了保护功能,导致暂时无法编程。STM8锁死一般是卖烂这个原因,ROP出错导致编程功能被禁止。
Ⅲ 如何解决I2C器件死锁的问题
正常情况下,I2C总线协议能够保证总线正常的读写操作。但是在某些异常情况下会导致I2C总线锁死。例如主控制器突然复位、或者I2C总线上存在干扰、或者电源异常等都可能导致I2C总线锁死。
在I2C主设备进行读写操作的过程中,主设备在开始信号后控制SCL产生8个时钟脉冲。然后拉低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号拉为低电平 如果这个时候主设备异常复位,SCL就会被释放为高电平。此时,如果从设备没有复位,就会继续I2C的应答,将SDA拉为低电平,直到SCL变为低带袭毕电平,才会结束应答信号。而对于I2C主设备来说,复位后检测SCL和SDA信号,如果发现SDA信号为低电平,则会认为I2C总线被占用,会一直等待SCL和SDA信号变为高电平。这样,I2C主设备等待从设备释放SDA信号,而同时I2C从设备又在等待主设备将SCL信号拉低以释放应答信号,两禅仿者相互等待,I2C总线进入一种死锁状态。
同样,当I2C进行读操作,I2C从设备应答后输出数据,如果在这个时刻I2C主设备异常复位而此时I2C从设备输出的数据位正好为0,也会导致I2C总线进入死锁状态。
广州致远电子ARM核心板使用IIC设备时,遇到总线死锁是如何让总线死锁恢复呢,常用方法如下:
(1) 尽量选用带复位输人的I2C从器件,从I2C总线死锁产生的原因可以发现I2C总线死锁的一个必要条件是主设备复位了而从设备没有复位。如果从设备选用带复位输入的芯片,将主从设备的复位信号连接在一起,当外部产生复位事件时,主从设备同时复位,这样就不会发生I2C总线死锁现象了。 这种方法的缺点也是显而易见的,首先,大部分I2C从器件都没有复位输入,器件选型受到了很大的限制;其次,这种对于主设备集成看门狗引起的复位也没有效果。
(2) 将所有的从I2C设备的电源连接在一起,通过M0S管连接到主电源,而MOS管的导通关断由I2C主设备来实现一般来说,I2C主设备都是具有运算单元的处理器。控制功能可以通过处理器的GPIO来实现。每次主设备复位时,运行程序控制GPIO关断MOS,使从设备失去电源。 然后延时一段时间后再导通MOS管,给从设备上电,从而达到让从设备强制复位的效果。这种方法能弥补第一种方法的不足,但是会增加电源设计的复杂性,影响Layout设计时电源的完整性; 同时还需要更改处理器的底层boot代码,影响底层软件的通用性和可移植性。
(3) 在I2C从设备设计看门狗的功能。当I2C从设备检测到自身处于应答状态或者低电平输出超过指定时间时,看门狗动作,复位I2C从设备。这种情况下不用增加额外的硬件设计蠢芹,但是要求I2C从设备具有可编程功能,比较适合从设备是单片机或CPLD的情况。
(4) 在I2C主设备中增加I2C总线恢复程序。 每次I2C主设备复位后,如果检测到SDA数据线被拉低,则控制I2C 中的SCL时钟线产生9个时钟脉冲(针对8位数据的情况),这样I2C从设备就可以完成被挂起的读操作,从死锁状态中恢复过来。这种方法有很大的局限性,因为大部分主设备的I2C模块由内置的硬件电路来实现。软件并不能够直接控制SCL信号模拟产生需要时钟脉冲。使用此种方法可以使用IO模拟I2C,SCL时钟易控制。
(5) 在I2C总线上增加一个额外的总线恢复设备,这个设备监视I2C总线。当设备检测到SDA信号被拉低超过指定时间时,就在SCL总线上产生9个时钟脉冲,使I2C从设备完成读操作,从死锁状态上恢复出来。总线恢复设备需要有具有编程功能,一般可以用单片机或CPLD实现这一功能。
(6) 在I2C上串人一个具有死锁恢复的I2C缓冲器。
Ⅳ 死循环,死递归和死锁对CPU的消耗有什么异同点
死循环,死递归和死锁对CPU的消耗基本相同,但是产生的原因是不一样的。
一、死循环。
例如在VB语言程序中,下列语句:
Do While i=1
print "*"
Loop
就是一个死循环,运行它将无休止地打印*号。
不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。
在设计程序时,若遇到死循环,我们可以通过按下Ctrl+Pause/Break的方法,结束死循环。
然而,在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的Windows操作系统下的窗口程序中的窗口都是通过一个叫消息循环的死循环实现的。在单片机、嵌入式编程中也经常要用到死循环。在各类编程语言中,死循环都有多种实现的方法,以C语言为例,可分别使用while.for,goto实现。
二、死锁。
两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
计算机系统中,如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。
在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。例如:事务A 获取了行 1 的共享锁。事务 B 获取了行 2 的共享锁。
排他锁,等待事务 B 完成并释放其对行 2 持有的共享锁之前被阻塞。
排他锁,等待事务 A 完成并释放其对行 1 持有的共享锁之前被阻塞。
事务 B 完成之后事务 A 才能完成,但是事务 B 由事务 A 阻塞。该条件也称为循环依赖关系:事务 A 依赖于事务 B,事务 B 通过对事务 A 的依赖关系关闭循环。
三、死机及其对策。
无论是死循环还是死锁,都会造成电脑死机现象。
电脑系统在工作中,有时候会出现鼠标停滞、键盘不能输入命令等情况,这时的系统已经不能接收任何命令,这种情况被称为死机,死机可能是多种原因造成的,比如同时运行了过多的应用程序,程序的使用方法错误,电脑中某一硬件的损坏(比如硬盘或者内存)等都可能引起死机。解决的常用方法有:
同时按下键盘上的控制键加换档键加删除键,在显示的列表中单击【启动任务管理器】命令,弹出【任务管理器】对话框,单击出现问题的程序,再单击【结束任务】按钮,所选程序立即结束运行。在大多数情况下,都可以通过上述方法关闭已经失去响应的程序,并且可以继续在Windows10中操作。
如果键盘已经不能输入任何命令,可按下机箱上的复位键,几秒钟后电脑将重新启动。
如果机箱上没有复位键,可以直接按住机箱上的电源开关几秒钟,关闭电脑电源,稍后,再按机箱上的电源开关重新启动电脑即可。
Ⅳ 单片机有哪几种工作状态
单片机有哪几种?
好多好多种。
Ⅵ 请教如何让单片机“死锁”
让单片机“死锁”?是相当于死机的意思吗?不再执行任何指令了?
这需要有条件的,即是在达到这个条件时,才进入死机状态,否则,正常的工作都不能做了。例如:按了什么键了,密码锁输入密码错了,等等,才会进入死锁状态。
当达到这个条件后,执行一条无限循环指令就行了。
汇编程序:SJMP $ ;就在此处无限循环了
C语言程序:while(1); //就在此处无限循环了
Ⅶ 基于51单片机的电子密码锁系统设计制作材料要买些什么东西,详细点,我在网上只能找到图片。急用啊!!!
购买的东西是很早悄多,不知道你PCB板是不是有了?
1、必须购买的硬件:
单片机 1片 stc89系列
按键 13个
晶振 1个 11.0592
瓷片电容 2个 30P
复位电容 1个 10@
复位电阻 1个 10K
USB座陆银渣 1个
发光二极管 10个
蜂鸣器 1个
隔离电阻 10个 1K
2、硬件的焊接:
单片机最后安装在插座内,因为40脚的单片机直接焊接,如果单片机烧毁,不容易换。
其他电阻、电容、按钮类的,直接焊接便可。
千万注意的是,焊接过程中防止静电击穿器件搏冲。
电烙铁选择30W左右的为宜。
3、单片机软件的编写:
硬件焊接无误后,便可以着手软件的编写。
Ⅷ 单片机无论下载什么程序进去都下不了,而且还一直发出很高频率的声音,像震动一样
检查电源和MAX232
检查方法:
电源:就用万族悄用表检查了,这个就不说了。
MAX232:电源正常的话下载一个串口调试助手,先用镊子或螺丝刀之类的东西将P3.0和P3.1短路,用串口调试助手向单片机下载所用的端口随便发送一个数据,此时如核携果接收串口返回了你发送的数据则说明MAX232是好的。
如改穗伏果检查至此两样都是好的那么极有可能是单片机损坏,买一片新的试试。
Ⅸ 单片机信号采集有干扰怎么办
1)你的信号采集是个什么环境,传输距离很远吗;
2)单片机电源是独立的吗;
3)你的单片机需要和电脑一直连接着的吗;