
是。
程序查询方式是一种程序直接控制方式,这是主机与外设间进行信息交换的最简单的方式,输入和输出完全是通过CPU执行程序来完成的。
查询方式的优先级是固定的,如果优先级高的设备出现频繁的请求时,优先级较低的设备可能长期不能使用总线。
查询方式是通过执行输入/输出查询程序来完成数据传送的。 工作原理是:当CPU启动外设工作后,不断地读取外设的状态信息进行测试,查询外设是否准备就绪,如外设准备好,则可以进行数据传送;否则,CPU继续读取外设的状态信息进行查询等待,直到外设准备好。
采用程序查询方式进行数据传送时,实际上在外设准备就绪之前,CPU一直处于等待状态,致使CPU的利用率较低。
倘若CPU按这种方式与多个外设传送数据时,就需要周期性的依次查询每个外设的状态,浪费的时间就更多,CPU的利用率就更低。因此,这种方式适合于工作不太繁忙的系统。
你这是要什么语言的?我这里有C版本的,当然C++版本也是可以改出来的。包含了农历与节气,基本上能满足你的要求,如果需要,可以追问,源码奉上,另外,我还有个C/C++的农历库,专门为万年历设计,集成了很实用的功能,用起来非常方便。以下是类的声明:
class CLunar{
public:
virtual long Int(double dDays) const=0;
virtual bool GetDayOrdinal(LONGTIME LongTime,int iYear,double &dDays)=0;
virtual bool GetDateFromOrdinal(int iYear,double dDays,LONGTIME &LongTime)=0;
virtual bool GetEasterSunday(int iYear,unsigned short &wMonth,unsigned short &wDay)=0;
virtual bool GetConstellation(int iYear,unsigned short wMonth,unsigned short wDay,unsigned short &wConstellationIndex)=0;
virtual bool GetGanZhi(LONGTIME LongTime,GANZHI &GanZhi,bool bYStartLiChun=false)=0;
virtual bool GetGregorian(LUNARDATE LunarDate,LONGTIME &LongTime)=0;
virtual bool GetLunar(LONGTIME LongTime,LUNARDATE &LunarDate)=0;
virtual bool GetLunarMonthInfo(int iYear,LUNARMONTH &MonthInfo)=0;
virtual bool GetLunarPhase(int iYear,unsigned short wMonth,LUNARPHASE &LunarPhase)=0;
virtual bool GetSolarTerms(int iYear,SOLARTERMS &SolarTerms)=0;
virtual bool IsLeapYear(int iYear,bool &bLeapYear)=0;
virtual bool GetExtremeSeason(int iYear,EXTREMESEASON &ExtremeSeason)=0;
virtual bool GetSheRi(int iYear,SHERI &SheRi)=0;
virtual bool GetFengLong(int iYear,unsigned short &wFengLong)=0;
virtual bool GetDays(LONGTIME LongTime1,LONGTIME LongTime2,double &dDays)=0;
virtual bool GetDate(LONGTIME LongTime,double dDays,LONGTIME &DstLongTime)=0;
virtual bool InitTimeStructure(LONGTIME &LongTime,bool bCurrentTime,int iYear=2000,unsigned short wMonth=1,unsigned short wDay=1,unsigned short wHour=0,unsigned short wMinute=0,unsigned short wSecond=0,unsigned short wMilliSecond=0)=0;
virtual bool GetDayOfWeek(int iYear,unsigned short wMonth,unsigned short wDay,unsigned short &wDayOfWeek)=0;
virtual bool GetEmperorReign(LONGTIME longtime,char pBuffer,unsigned int BufSize)=0;
virtual unsigned short GetDaysOfMonth(int iYear,unsigned short wMonth)=0;
virtual unsigned short GetDaysOfYear(int iYear)=0;
virtual unsigned short GetLeapMonth(int iYear)=0;
virtual unsigned short GetDaysOfLunarMonth(int iLunarYear,unsigned short wLunarMonth,bool bLeapMonth)=0;
virtual unsigned short GetDaysOfLunarYear(int iLunarYear)=0;
virtual LONGTIME SysTimeToLong(SYSTEMTIME SystemTime) const=0;
virtual SYSTEMTIME LongTimeToSys(LONGTIME LongTime) const=0;
virtual int Release()=0;
protected:
CLunar(void);
virtual ~CLunar(void);
};
<p>不是,D触发器 三态缓冲器一般由74SL373芯片来完成。CPU具体的位置已经在下图中给你标记出来了,由于你给的地方比较小,所以CPU上的引脚没有给你标识出来,实际上就是相应连线上的标识就为对于连接引脚的功能。</p>
<p></p>
出端口。每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息。CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器接口。存储器通常在CPU的同步控制下工作,接口电路比较简单;而I/O设备品种繁多,其相应的接口电路也各不相同,因此,习惯上说到接口只是指I/O接口。
目录
1I/O (input/output):输入输出端口
2I/O(PS2/PC Game)展开
编辑本段
1I/O (input/output):输入输出端口
一、I/0接口的概念
1、接口的分类
I/O接口的功能是负责实现CPU通过系统总线把I/O电路和 外围设备联系在一起,按照电路和设备的复杂程度,I/O接口的硬件主要分为两大类:
(1)I/O接口芯片
这些芯片大都是集成电路,通过CPU输入不同的命令和参数,并控制相关的I/O电路和简单的外设作相应的 *** 作,常见的接口芯片如定时/计数器、中断控制器、DMA控制器、并行接口等。
(2)I/O接口控制卡
有若干个集成电路按一定的逻辑组成为一个部件,或者直接与CPU同在主板上,或是一个插件插在系统总线插槽上。
按照接口的连接对象来分,又可以将他们分为串行接口、并行接口、键盘接口和磁盘接口等。
2、接口的功能
由于计算机的外围设备品种繁多,几乎都采用了机电传动设备,因此,CPU在与I/O设备进行数据交换时存在以下问题:
速度不匹配:I/O设备的工作速度要比CPU慢许多,而且由于种类的不 同,他们之间的速度差异也很大,例如硬盘的传输速度就要比打印机快出很多。
时序不匹配:各个I/O设备都有自己的定时控制电路,以自己的速度传 输数据,无法与CPU的时序取得统一。
信息格式不匹配:不同的I/O设备存储和处理信息的格式不同,例如可以分为串行和并行两种;也可以分为二进制格式、ACSII编码和BCD编码等。
信息类型不匹配:不同I/O设备采用的信号类型不同,有些是数字信号,而 有些是模拟信号,因此所采用的处理方式也不同。
基于以上原因,CPU与外设之间的数据交换必须通过接口来完成,通常接口有以下一些功能:
(1)设置数据的寄存、缓冲逻辑,以适应CPU与外设之间的速度差异,接口通常由一些寄存器或RAM芯片组成,如果芯片足够大还可以实现批量数据的传输;
(2)能够进行信息格式的转换,例如串行和并行的转换;
(3)能够协调CPU和外设两者在信息的类型和电平的差异,如电平转换驱动器、数/模或模/数转换器等;
(4)协调时序差异;
(5)地址译码和设备选择功能;
(6)设置中断和DMA控制逻辑,以保证在中断和DMA允许的情况下产生中断和DMA请求信号,并在接受到中断和DMA应答之后完成中断处理和DMA传输。
3、接口的控制方式
CPU通过接口对外设进行控制的方式有以下几种:
(1)程序查询方式
这种方式下,CPU通过I/O指令询问指定外设当前的状态,如果外设准备就绪,则进行数据的输入或输出,否则CPU等待,循环查询。
这种方式的优点是结构简单,只需要少量的硬件电路即可,缺点是由于CPU的速度远远高于外设,因此通常处于等待状态,工作效率很低
(2)中断处理方式
在这种方式下,CPU不再被动等待,而是可以执行其他程序,一旦外设为数据交换准备就绪,可以向CPU提出服务请求,CPU如果响应该请求,便暂时停止当前程序的执行,转去执行与该请求对应的服务程序,完成后,再继续执行原来被中断的程序。
中断处理方式的优点是显而易见的,它不但为CPU省去了查询外设状态和等待外设就绪所花费的时间,提高了CPU的工作效率,还满足了外设的实时要求。但需要为每个I/O设备分配一个中断请求号和相应的中断服务程序,此外还需要一个中断控制器(I/O接口芯片)管理I/O设备提出的中断请求,例如设置中断屏蔽、中断请求优先级等。
此外,中断处理方式的缺点是每传送一个字符都要进行中断,启动中断控制器,还要保留和恢复现场以便能继续原程序的执行,花费的工作量很大,这样如果需要大量数据交换,系统的性能会很低。
(3)DMA(直接存储器存取)传送方式
DMA最明显的一个特点是它不是用软件而是采用一个专门的控制器来控制内存与外设之间的数据交流,无须CPU介入,大大提高CPU的工作效率。
在进行DMA数据传送之前,DMA控制器会向CPU申请总线控制 权,CPU如果允许,则将控制权交出,因此,在数据交换时,总线控制权由DMA控制器掌握,在传输结束后,DMA控制器将总线控制权交还给CPU
以上就是关于程序查询方式的优先级是否固定全部的内容,包括:程序查询方式的优先级是否固定、查询方式能及时响应外设要求吗、万年历程序查询 要求:提供菜单方式选择 输入年份,月份,日期,计算得到的是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)