用户程序在PLC系统中的定位 (用户程序在目态下使用特指令所引起的中断)

用户程序在PLC系统中的定位:使用特定指令引起的中断分析 用户程序在PLC系统中的定位

一、引言

PLC(可编程逻辑控制器)作为一种工业控制系统,广泛应用于制造业、自动化设备等领域。
在PLC系统中,用户程序扮演着至关重要的角色。
在实际应用中,用户程序在PLC系统中的定位以及使用特定指令引起的中断问题常常困扰着开发者。
本文将针对这一问题进行深入探讨,帮助读者更好地理解用户程序在PLC系统中的定位以及如何处理因使用特定指令引起的中断。

二、PLC系统概述

PLC系统主要由硬件和软件两部分组成。
硬件部分包括中央处理器、存储器、输入输出接口等;软件部分包括系统程序和用户程序。
系统程序主要负责PLC的基本操作,如输入输出扫描、通信等。
用户程序则由用户根据实际需求进行编写,用于实现特定的控制功能。

三、用户程序在PLC系统中的定位

在PLC系统中,用户程序是实现对工艺控制的核心部分。
它根据生产工艺的需求,通过编写各种控制程序来实现对生产设备的控制。
用户程序在PLC系统中的定位主要体现在以下几个方面:

1. 功能实现:用户程序根据实际需求,实现特定的控制功能,如逻辑控制、数据处理、运动控制等。
2. 系统集成:用户程序需要与PLC系统的硬件和软件紧密结合,实现与现场设备的通信和数据交换。
3. 调试与维护:用户程序在调试和维护过程中,需要定位问题、排查故障,确保生产设备的正常运行。

四、用户程序使用特定指令引起的中断

在PLC系统中,用户程序使用特定指令时,可能会引起中断。
中断是计算机在执行过程中,由于某种原因(如输入输出操作完成、定时器到期等)而暂停当前任务,转而处理其他任务的过程。
在用户程序中,使用特定指令引起的中断主要包括以下几种情况:

1. 输入输出指令引起的中断:当PLC进行输入输出操作时,输入输出指令可能会引起中断,以便及时处理现场设备的状态变化。
2. 定时器指令引起的中断:定时器指令用于实现延时操作,当定时器到期时,会引起中断,以便执行相应的操作。
3. 特殊功能指令引起的中断:某些特殊功能指令在执行过程中,可能需要处理一些特殊事件或异常情况,从而引起中断。

五、处理因使用特定指令引起的中断

为了处理因使用特定指令引起的中断,开发者需要采取一些措施来确保PLC系统的稳定运行。以下是一些处理中断问题的建议:

1. 合理规划程序结构:在编写用户程序时,应合理规划程序结构,将关键任务和次要任务分开处理,以便在处理中断时能够优先处理重要任务。
2. 使用优先级管理:为不同类型的任务设置不同的优先级,以便在处理中断时能够根据优先级进行任务调度。
3. 中断处理程序设计:针对可能引起中断的特定指令,设计相应的中断处理程序,以便在中断发生时能够迅速处理并恢复程序的执行。
4. 调试与测试:在开发过程中,进行充分的调试与测试,以发现并解决潜在的中断问题。

六、结论

用户程序在PLC系统中扮演着至关重要的角色,是实现工艺控制的核心部分。
在使用特定指令时,可能会引起中断问题。
为了处理这些中断问题,开发者需要合理规划程序结构、使用优先级管理、设计中断处理程序以及进行充分的调试与测试。
只有这样,才能确保PLC系统的稳定运行,实现生产设备的自动化控制。


什么是中断系统

问题一:什么是中断系统中断系统是计算机的重要组成部分。 实时控制、故�自动处理、计算机与外围设备间的数据传送往往采用中断系统。 中断系统的应用大大提高了计算机效率。 不同的计算机其硬件结构和软件指令是不完全相同的,因此,中断系统也是不相同的。 计算机的中断系统能够加强CPU对多任务事件的处理能力。 中断机制是现代计算机系统中的基础设施之一,它在系统中起着通信网络作用,以协调系统对各种外部事件的响应和处理。 中断是实现多道程序设计的必要条件。 中断是CPU对系统发生的某个事件作出的一种反应。 引起中断的事件称为中断源。 中断源向CPU提出处理的请求称为中断请求。 发生中断时被打断程序的暂停点成为断点。 CPU暂停现行程序而转为响应中断请求的过程称为中断响应。 处理中断源的程序称为中断处理程序。 CPU执行有关的中断处理程序称为中断处理。 而返回断点的过程称为中断返回。 中断的实现实行软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。 问题二:什么是中断系统调用?中断、异常和系统调用 所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。 中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。 第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。 第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。 前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。 1.中断处理 中断处理一般分为中断响应和中断处理两个步骤。 中断响应由硬件实施,中断处理主要由软件实施。 (1)中断响应 对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。 发生中断时,CPU暂停执行当前的程序,而转去处理中断。 这个由硬件对中断请求作出反应的过程,称为中断响应。 一般说来,中断响应顺序执行下述三步动作: ◆中止当前程序的执行; ◆保存原程序的断点信息(主要是程序计数器PC和程序状态寄存器PS的内容); ◆从中断控制器取出中断向量,转到相应的处理程序。 通常CPU在执行完一条指令后,立即检查有无中断请求,如果有,则立即做出响应。 当发生中断时,系统作出响应,不管它们是来自硬件(如来自时钟或者外部设备)、程序性中断(执行指令导致“软件中断”―Software Interrupts),或者来自意外事件(如访问页面不在内存)。 如果当前CPU的执行优先级低于中断的优先级,那么它就中止对当前程序下条指令的执行,接受该中断,并提升处理机的执行级别(一般与中断优先级相同),以便在CPU处理当前中断时,能屏蔽其它同级的或低级的中断,然后保存断点现场信息,通过取得的中断向量转到相应的中断处理程序的入口。 (2)中断处理 CPU从中断控制器取得中断向量,然后根据具体的中断向量从中断向量表IDT中找到相应的表项,该表项应是一个中断门。 于是,CPU就根据中断门的设置而到达了该通道的总服务程序的入口。 核心对中断处理的顺序主要由以下动作完成: ◆保存正在运行进程的各寄存器的内容,把它们放入核心栈的新帧面中。 ◆确定“中断源”或核查中断发生,识别中断的类型(如时钟中断或盘中断)和中断的设备号(如哪个磁盘引起的中断)。 系统接到中断后,就从机器那里得到一个中断号,它是检索中断向量表的位移。 中断向量因机器而异,但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。 ◆核心调用中断处理程序,对中断进行处理。 ◆中断处理完成并返回。 中断处理程序执行完以后,核心便执行与机器相关的特定指令序列,恢复中断时寄存器内容和执行核心栈退栈,进程回到用户态。 如果设置了重调度标志,则在本进程返回到用户态时做进程调度。 2.系统调用 在Unix/Linux系统中,系统调用像普通C函数调用那样出现在C程序中。 但是一般的函数调用序列并不能把进程的状态从用户态变为核心态,而系统调用却可以做到。 C语言编译程序利用一个预先确定的函数库(一般称为C库),其中有各系统调用的名字。 C库中的函数都专门使用一条指令,把进程的运行状态改为核心态。 Linux的系统调用是通过中断指令“INT 0x80”实现的。 每个系统调用都有惟一的号码,称作系统调用号。 所有的系统调用都......>> 问题三:系统中断的定义系统中断,一般是硬件中断和软件中断的综合,“中断”是一个计算机术语,意思跟我们的请求差不多,鼠标、键盘、板卡或者是一些系统内核组件,要想为你服务,都要向系统提出申请,然后等待操作系统的分配。 如果没有这个过程,你什么也干不了。 CPU占用高的原因就是,系统要保持“随时”能为你提供服务,就必须保证它的优先权力。 所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。 中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。 第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。 第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。 前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。 问题四:中断系统的功能当CPU响应某一中断时,若有优先权高的中断源发出中断请求,则CPU能中断正在进行的中断服务程序,并保留这个程序的断点(类似于子程序嵌套),响应高级中断,高级中断处理结束以后,再继续进行被中断的中断服务程序,这个过程称为中断嵌套。 如果发出新的中断请求的中断源的优先权级别与正在处理的中断源同级或更低时,CPU不会响应这个中断请求,直至正在处理的中断服务程序执行完以后才能去处理新的中断请求。 问题五:什么是中断?1、中断定义 CPU在执行一个程序时,对系统发生的某个事件(程序自身或外界的原因)作出的一种反应:CPU暂停正在执行的程序,保留现场后自动转去处理相应的事件,处理完该事件后,到适当的时候返回断点,继续完成被打断的程序。 (如有必要,被中断的程序可以在后来某时间恢复,继续执行。 ) 事件:如读盘,盘有问题,无法读,产生中断,解决后,程序恢复,软件错误也会中断。 特点:1) 中断随机的 2) 中断是可恢复的 3) 中断是自动进行处理的 2、中断系统的有关概念 中断由软件(操作系统)、硬件协同完成,硬件机构称中断装置。 中断装置:指发现中断,响应中断的硬件。 中断处理程序是由软件来完成的。 以上合称中断系统 中断源:引起中断发生的事件 中断寄存器:硬件为每个中断源设置寄存器,中断发生时信息被记录在寄存器中,以便分析处理(记录中断) 中断字:中断寄存器中的内容 程序状态字:控制指令执行顺序,并保留和指示与程序相关的系统状态。 基本内容 程序基本状态(指令地址,条件码,目态/管态,等待计算) 中断码:保存程序执行时,当前发生的中断事件,以便操作系统分析处理(设置中断码) 中断屏蔽位 程序状态字寄存器(CPU按照其内容执行) 系统堆栈:在内存开辟的一块区域用来临时保存进程运行现场 问题六:计算机原理与应用 什么是中断系统实现的功能4.1 指令系统的发展与性能要求 从计算机组成的的层次结构来说,计算机的指令有微指令、机器指令和宏指令等。 机器指令则介于微指令与宏指令之间,通常简称为指令。 每一条指令可完成一个独立的算术运算或逻辑运算*作。 一台计算机中所有机器指令的 *** ,称为这台计算机的指令系统。 系统计算机: 是指基本指令系统相同、基本体系结构相同的一系列计算机。 CISC:复杂指令系统计算机 RISC: 简单指令系统计算机 一个完善的指令系统应满足四方面的要求:1、完备性 2、有效性 3、规整性 4、兼容性 高级语言与计算机的硬件结构及指令系统无关,汇编语言计算机的硬件结构和指令系统。 不同的机器有不同的指令,所以用汇编语言编写的程序不能在其他类型的机器上运行。 4.2 指令格式 机器指令是用机器字来表示的,表示一条指令的机器字,就称为指令,通常称为指令。 指令格式,则是指令字用二进制代码表示的结构形式,通常由*作码字和地址字段组成。 指令的*作码表示该指令应进行什么性质的*作,组成*作友字段的位数一般取决于计算机指令系统的规模,较大的指令系统就需要更多的位数来表示每条特定的指令。 一般说来,一个包含n位的*作码最多能够表示2^n条指令。 根据一条指令中有几个*作数地址,可将指令分为:零地址指令、二地址指令、三地址指令。 从*作数安放的位置来说:分为SS、RS、SR、RR型指令。 一个指令字中包含二进制的位数,称为指令字长度。 机器字长是指计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。 机器字长通常与主存单元的位数一致,指令字长度等于机器字长度的指令,称为单字长指令。 指令字长度等于半个机器字长度的指令,称为半字长指令。 指令字长等于两个机器字长度的指令,称为双字长指令。 指令*作码通常有两种编码格式: 固定格式 ,适用大中型计算机 可变格式 ,适用于微型和小型计算机。 4.3 指令和数据的寻址方式 在这里要区分指令和数据的寻址方式的区别。 指令寻址:指令寻址的方式有顺序寻址和跳跃寻址。 顺序寻址一般为顺序执行程序,而跳跃指令则是执行了转移指令所致。 所谓*作数的寻址方式:就是形成*作数的有效地址的方法。 其有:隐含寻址、立即寻址、寄存器寻址、直接寻址、间接寻址、相对寻址方式、变址和基址寻址方式、复合寻址方式、块寻址方式、段寻址方式。 下面就主要的几个寻址方式做个说明。 间接寻址:是给存放*作数地址的存储单元地址。 相对寻址:把程序计数器PC的内容加上指令格式中的形式地址D而形成*作数的有效地址。 变址寻址和基址寻址:两者在指令格式上很类似。 习惯上基址寻址中基值寄存器提供基准量而指令提供位移量。 而变址寻址中变址寄存器提供修改量而指令提供基准量。 块寻址方式经常用于输入输出指令中,以实现外存储器或外围设备同内存之间数据块传送,块寻址方式在内存中还可用于数据块搬家。 4.4 堆栈寻址 堆栈用在主存储器和寄存器中。 串联寻址:由寄存器中给出。 堆栈原则:先进后出、后进先出。 堆栈*作: 入栈*作: 先进入,后修改计数器。 出栈*作:先修改计数器,后跳出堆栈。 五章 中央处理器 5.1 中央处理器的功能和组成 CPU的四个功能: 指令控制 、 *作控制 、 时间控制 、 数据加工。 中央处理器由两个主要部分组成: 控制器和运算器。 控制器功能有:1、从内存中取出一条指令,并指出下一条指令在内存......>> 问题七:中断系统的功能? 5分 中断技术是十分重要而复杂的技术,由计算机的软硬件共同完成,称之为中断系统。 系统中的中断技术由CPU的中断管理机制、可编程中断控制器8259A和中断处理程序共同实现。 一个完整的中断系统应具备如下功能。 ① 设置中断源:中断源是系统中允许请求中断的事件。 设置中断源就是确定中断源的中断请求方式。 ② 中断源识别:当中断源有请求时,CPU能够正确地判别中断源,并能够转去执行相应的中断服务子程序。 ③ 中断源判优:当有多个中断源同时请求中断时,系统能够自动地进行中断优先权判断,优先权最高的中断请求将优先得到CPU的响应和处理。 ④ 中断处理与返回:能自动地在中断服务子程序与主程序之间进行跳转,并对断点进行保护。 问题八:什么是中断?简述中断处理过程中断就是执行中断服务程序,这是中断系统的核心。 不同计算机系统的中断处理过程各具特色,但对多数计算机而言,其中中断服务程序的流程如下。 中断处理过程基本上由3部分组成,第一部分为准备部分,其基本功能是保护现场,对于非向量中断方式则需要确定中断源,最后开放中断,允许更高级的中断请求打断低级的中断服务程序;第二部分为处理部分,即真正执行具体的为某个中断源服务的中断服务程序;第三部分为结尾部分,首先要关中断,以防止在恢复现场过程中被新的中断请求打断,接着恢复现场,然后开放中断,以便返回原来的程序后可响应其他的中断请求。 中断服务程序的最后一条指令一定是中断返回指令。 问题九:单片机的中断系统是什么?求详细的回答,谢谢中断装置和中断处理程序统称为中断系统。 中断系统是计算机的重要组成部分。 实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。 中断系统的应用大大提高了计算机效率。 不同的计算机其硬件结构和软件指令是不完全相同的,因此,中断系统也是不相同的。 计算机的中断系统能够加强CPU对多任务事件的处理能力。 中断机制是现代计算机系统中的基础设施之一,它在系统中起着通信网络作用,以协调系统对各种外部事件的响应和处理。 中断是实现多道程序设计的必要条件。 中断是CPU对系统发生的某个事件作出的一种反应。 引起中断的事件称为中断源。 中断源向CPU提出处理的请求称为中断请求。 发生中断时被打断程序的暂停点成为断点。 CPU暂停现行程序而转为响应中断请求的过程称为中断响应。 处理中断源的程序称为中断处理程序。 CPU执行有关的中断处理程序称为中断处理。 而返回断点的过程称为中断返回。 中断的实现实行软件和硬件综合完成,硬件部分叫做硬件装置,软件部分成为软件处理程序。

0x00438502"指令引用的"0x00452000"内存,该内存不能为"read",怎么办?

我整理了一些资料,希望对你有用!!!关于内存不能READ的解决方案 运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。 “0x????????”指令引用的“0x????????”内存。 该内存不能为“read”。 “0x????????”指令引用的“0x????????”内存,该内存不能为“written”。 一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 故障分析 硬件方面: 一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。 你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。 假如是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,就要检查是不是内存出问题了或者和其它硬件不兼容。 软件方面: 先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。 举个例子:一个桶子只能将一斤的水,当放入两斤的水进入时,就会溢出来。 而系统则是在屏幕上表现出来。 这个问题,经常出现在windows2000和XP系统上,Windows 2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法操作,系统为保持稳定,就会出现上述情况。 另外也可能是硬件设备之间的兼容性不好造成的。 几个例子 例一:打开IE浏览器或者没过几分钟就会出现0x70dcf39f指令引用的0x内存。 该内存不能为“read”。 要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。 解决方法:修复或升级IE浏览器,同时打上补丁。 看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。 比如你的IE升级到了6.0,自升级后,会被IE5.0代替/运用腾讯浏览器/ 例二:在windows xp下双击光盘里面的“”文件,显示“0x77f745cc”指令引用的“0x”内存。 该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。 解决方法:这可能是系统的兼容性问题,winXP的系统,右键“”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。 win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\winnt\apppatch\。 右键,属性,也会出现兼容性的选项。 例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。 该内存不能为“read” 的提示。 解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。 例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“Oxf6”(每次变化)指令引用的“Oxff”内存不能为“read”,终止程序请按确定。 解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。 还不行,只好换就用别的播放器试试了。 例五:双击一个游戏的快捷方式,“Ox77f5cdO”指令引用“Oxffffffff”内存,该内存不能为“read” ,并且提示程序错误。 解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。 例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0*772b548f”指令引用的“0*”内存,该内存不能为“written”,然后自动下线,而再打开,发现了他发过来的十几条的信息。 解决方法:这是对方利用的BUG,发送特殊的代码,做出错,只要打上补丁或升级到最新版本,就没事了。 例七:我的笔记本电脑用的XP系统,有时关闭网页时会弹出遇到问题需要关闭,然后有弹出0x03e7c738指令引用的0x03e7c738内存,该内存不能为read,请问是怎么回事? 解决方法:先查杀一下病毒,另外如果你安装了浏览增强之类的软件,请卸掉。 例八:从桌面或开始菜单中打开任何一个程序, 出现错误提示:0x........指令引用的0x内存,该内存不能为read。 省略号代表可变值。 而从运行中打开程序没问题。 解决方法:运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks下,应该只有一个正常的键值{AEB6717E-7E19-11d0-97EE-00C04FD}, 将其他的删除(默认键值当然不要删除)。 例九:我三个月前配了台机子。 系统比较不稳定,三个月内已经重装过多次系统,四五天前刚装过系统,可是经常随机地出现Explorer-应用程序错误,“0x4ad“指令引用的“0x内存。 该内存不能为“read。 要终止程序,请单击“确定“。 要调试程序,请单击“取消”。 如果点确定,windows桌面就不见了。 这种问题在之前的系统也出现过,不知道是不是硬件的问题? 解决方法:内存的兼容性问题!遇到这类问题,用户可以自行打开机器把内存的位置调动一下,看问题是否可以解决,如果问题依旧,可与你的朋友调换内存使用。 通过上面的几个例子,可以看到,出现故障的原因有好多种,下面列出已经提到和有可能发生的原因,方便查阅。 问题产生原因原因--解决方法 内存条坏了--更换内存条 双内存不兼容--使用同品牌的内存或只用一条内存 内存质量问题--更换内存条 散热问题--加强机箱内部的散热 内存和主板没插好或和其它硬件不兼容等--重插内存或换个插糟 硬盘有问题--更换硬盘 驱动问题--重装驱动。 如果是新系统,要先安装主板驱动 软件损坏--重装软件 软件有BUG--打补丁或用最新的版本。 软件和系统不兼容--给软件打上补丁或者试试系统的兼容模式 软件和软件之间有冲突--如果最近安装了什么新软件,卸载了试试 软件要使用到其它相关的软件有问题--重装相关软件。 比如播放某一格式的文件时出错,可能是这个文件的解码器有问题 病毒问题--杀毒 杀毒软件与系统或软件冲突--由于杀毒软件是进入底层监控系统的,可能与一些软件冲突,卸载了试试 系统本身有问题--有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序,像SP的补丁,最好要打上。 如果还不行重装系统或更换其它版本的系统了。 =============================================== Windows系统出现内存错误 使用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的0x内存,该内存不能written”,然后应用程序被关闭。 如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。 其实,这个错误并不一定是Windows不稳定造成的。 本文就来简单分析这种错误的常见原因。 一、应用程序没有检查内存分配失败 程序需要一块内存用以保存数据时,就需要调用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。 这就是“动态内存分配”,内存地址也就是编程中的“指针”。 内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。 当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。 作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。 若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。 真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。 在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。 这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x”。 内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。 因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。 二、应用程序由于自身BUG引用了不正常的内存指针 在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。 有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。 注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止运行,回收全部资源。 计算机世界的法律还是要比人类有效和严厉得多啊! 像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。 无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x”,而是其他随机数字。 如果系统经常有所提到的错误提示,下面的建议可能会有帮助: 1.查看系统中是否有木马或病毒。 这类程序为了控制系统往往不负责任地修改系统,从而导致操作系统异常。 平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。 2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。 有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。 3.试用新版本的应用程序 偶尔出现,是程序冲突,与偶尔蓝屏差不多,没什么关系的。 经常出现就危险了,后果很严重,往往是废了半天劲,还得重装系统! 该内存不能read written常见原因及解决方法 1 内存条坏了 更换内存条 2 双内存不兼容 使用同品牌的内存或只要一条内存 3 内存质量问题 更换内存条 4 散热问题 加强机箱内部的散热 5 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽 6 硬件有问题 更换硬盘 7 驱动问题 重装驱动,如果是新系统,应先安装主板驱动 8 软件损坏 重装软件 9 软件有BUG 打补丁或更新到最新版本 10 软件和系统不兼容 给软件打上补丁或是试试系统的兼容模式 11 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试 12 软件要使用其他相关的软件有问题 重装相关软件,比如播放某一格式的文件时出错,可能是这个文件的解码器有问题 13 病毒问题 杀毒 14 杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试 15 系统本身有问题 有时候操作系统本身也会有BUG,要注意安装官方发行的更新程序,象SP的补丁,最好打上.如果还不行,重装系统,或更换其他版本的系统。 〔又一说〕 在控制面板的添加/删除程序中看看你是否安装了微软,如果已经安装了,可以考虑卸载它,当然如果你以后在其它程序需要时候,可以再重新安装。 另外,如果你用的是ATI显卡并且你用的是SP2的补丁(一些ATI的显卡驱动需要在正常工作的环境下)。 这种情况你可以找一款不需要支持的ATI显卡驱动。 如果以上两种方法并不能完全解决问题,你试着用一下“IE修复”软件,并可以查查是否有病毒之类的。 〔微软升级到1.1版应该没问题了〕 〔还有一说〕 方法一: 微软新闻组的朋友指点:开始--运行:regsvr32 开始--运行:regsvr32 不过没解决---但提供了路子-----一次运行注册所有dll 搜索查找到方法如下: 运行 输入cmd 回车在命令提示符下输入 for %1 in (%windir%\system32\*) do /s %1 这个命令老兄你慢慢输 输入正确的话会看到飞快地滚屏 否则……否则失败就是没这效果。 回车后慢慢等(需要点时间1-2分钟) 都运行完再打开看 方法二: 这是个典型问题~~~~~引起这个问题的原因很多。 一般来讲就是给系统打上补丁和更换内存、给内存换个插槽这3种方法来解决。 [系统补丁只要到Microsoft Update网站在线更新就可以了] (偶见) 造成这种问题的原因很多,不能单纯的下结论,尽量做到以下几点可能对你有帮助: 1。 确保使用的是未修改过的软件(非汉化、破解版) 2。 使用改软件时尽量不要运行其他软件。 (这是个临时文件,可能某些软件也在使用临时文件夹,所以产生干扰) 3。 把那些什么桌面工具,内存整理工具通通关掉(你至少有2个类似的工具在运行) 处理方法: 运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks下,应该只有一个正常的键值{AEB6717E-7E19-11d0-97EE-00C04FD}, 将其他的删除。 〔我个人的最后解决和看法〕 我今天尝试了多种办法,最后我发现问题出在微软的上面。 我升级了这个软件,并打齐了补丁,短暂平安后,有出现“内存不能为read”的情况。 后来我受上面文章的启发,卸载了微软的1.0和1.1,世界太平了。 另外:如果是打开“我的电脑”、“我的文档”等的时候出现上述情况,还有一种可能,就是你的右键菜单太臃肿了,此时只要清理右键菜单问题就解决了。 参考: 较为全面的参考:

操作系统试题:现代计算机系统通常设置两种机器工作状态,分别是

硬件将处理机划分为两种状态,即管态和目态,便于设计安全可靠的操作系统。 管态和目态是计算机硬件为保护操作系统免受用户程序的干扰和破坏而引入的两种状态。 通常操作系统在管态下运行,可以执行所有机器指令;而用户程序在目态下运行,只能执行非特权指令。 如果用户程序企图在目态下执行特权指令,将会引起保护性中断,由操作系统终止该程序的执行,从而保护了操作系统。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论