CN102117223A - 利用异步通知实现lxi载板应用程序对m模块中断响应的方法 - Google Patents
利用异步通知实现lxi载板应用程序对m模块中断响应的方法 Download PDFInfo
- Publication number
- CN102117223A CN102117223A CN 201110043617 CN201110043617A CN102117223A CN 102117223 A CN102117223 A CN 102117223A CN 201110043617 CN201110043617 CN 201110043617 CN 201110043617 A CN201110043617 A CN 201110043617A CN 102117223 A CN102117223 A CN 102117223A
- Authority
- CN
- China
- Prior art keywords
- interrupt
- lxi
- application program
- module
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
利用异步通知实现LXI载板应用程序对M模块中断响应的方法,涉及实现LXI载板应用程序对M模块中断响应的方法,解决LXI载板设计过程中,中断处理过程不能够直接把外部中断事件传递至应用层的问题。其方法:在LXI载板的ARM处理器的驱动层中的中断服务程序中建立中断处理函数,并在所述中断处理函数中设置一个信号产生函数,当M模块的中断信号到达ARM处理器的驱动层后,驱动程序将所述硬件中断信号输出至驱动层中的中断服务程序中;同时,驱动程序控制中断处理函数中信号产生函数向应用程序发送一个异步信号,应用程序接收所述异步信号后,将所述异步信号发送到应用层的中断处理函数中执行。本发明适用于基于M模块的LXI载板的设计。
Description
技术领域
本发明涉及实现LXI载板应用程序对M模块中断响应的方法。
背景技术
LXI(LAN eXtensions for Instrumentation)技术是计算机技术、网络技术与仪器技术的有机结合。LXI是继GPIB、VXI、PXI仪器总线之后的、新一代基于LAN的、适用于自动测试系统开发的仪器标准。
在ARM处理器和Linux操作系统下的基于M模块的LXI载板软件设计过程中,需要对M模块中断处理过程慎重考虑,因为一般来说,Linux在驱动层处理外部中断,即中断处理过程在内核层就完成了,而不能够直接把外部中断事件传递至应用层。但在基于M模块的LXI载板软件运行时,应用层是必须要知道外部中断事件的,这样,才能在应用层对其做出处理。
发明内容
本发明是为了解决LXI载板设计过程中,中断处理过程不能够直接把外部中断事件传递至应用层的问题,从而提供利用异步通知实现LXI载板应用程序对M模块中断响应的方法。
利用异步通知实现LXI载板应用程序对M模块中断响应的方法,在LXI载板的ARM处理器的驱动层中的中断服务程序中建立中断处理函数,并在所述中断处理函数中设置一个信号产生函数,当M模块的中断信号到达ARM处理器的驱动层后,驱动程序将所述硬件中断信号输出至驱动层中的中断服务程序中;同时,驱动程序控制中断处理函数中信号产生函数向应用程序发送一个异步信号,应用程序接收所述异步信号后,将所述异步信号发送到应用层的中断处理函数中执行,实现LXI载板应用程序对M模块中断响应。
ARM处理器是型号为S3C4510B的芯片。
有益效果:本发明在LXI载板设计过程中,中断处理过程能够直接把外部中断事件传递至应用层,实现了LXI载板对M模块中断响应。并且本发明实现方法简单,效率较高。
具体实施方式
具体实施方式一、利用异步通知实现LXI载板应用程序对M模块中断响应的方法,在LXI载板的ARM处理器的驱动层中的中断服务程序中建立中断处理函数,并在所述中断处理函数中设置一个信号产生函数,当M模块的中断信号到达ARM处理器的驱动层后,驱动程序将所述硬件中断信号输出至驱动层中的中断服务程序中;同时,驱动程序控制中断处理函数中信号产生函数向应用程序发送一个异步信号,应用程序接收所述异步信号后,将所述异步信号发送到应用层的中断处理函数中执行,实现LXI载板应用程序对M模块中断响应。
本发明的ARM处理器使用的是三星公司的型号为S3C4510B的芯片,其M模块的中断线直接与S3C4510B的外部中断0相连。
S3C4510B对中断的支持:
S3C4510B支持多达21个中断源,中断请求可由内部功能模块和外部引脚信号产生,本发明使用的是外部中断0。ARM7TDMI核可以识别两种类型的中断:正常中断请求(Normal Interrupt Request,IRQ)和快速中断请求(Fast Interrupt Request,FIQ),因此,S3C4510B的所有中断都可以归类为IRQ或FIQ,本发明中M模块的中断使用的是IRQ。S3C4510B的中断控制器对每一个中断源都有一个中断悬挂位(Interrupt Pending Bit)。
S3C4510B用如下四个寄存器控制中断的产生和对中断进行处理:
中断优先级寄存器(Interrupt Priority Register):每一个中断源的索引号写入一个预定义的中断优先级寄存器,以获得特定的优先级。中断优先级预定义为从0~20;
中断模式寄存器(Interrupt Mode Register):为每一个中断源定义中断模式,是IRQ还是FIQ。
中断悬挂寄存器(InterruptPending Register):指示中断请求处于悬挂状态(未处理)。如果中断悬挂位被置位,则中断悬挂状态会一直保存,直到CPU通过写‘1’到中断悬挂寄存器的相应位清除(注意是写‘1’清除,而不是写‘0’)。当中断悬挂位被置位时,只要中断屏蔽寄存器为‘0’,中断服务程序都开始执行。在中断服务程序中,必须通过向中断悬挂寄存器的相应位写‘1’来清除中断悬挂标志,以避免由于同一个中断悬挂位导致中断服务程序的反复执行。
中断屏蔽寄存器(Interrupt Mask Register):如果中断屏蔽位为‘1’则对应的中断会被禁止,如果中断屏蔽位为‘0’,则对应的中断请求能正常响应。但如果全局中断屏蔽位(位21)为‘1’,则所有的中断都会被禁止。当有中断请求产生时,对应的中断悬挂位会被置为‘1’,在全局中断屏蔽位和对应的中断屏蔽位为‘0’时,中断请求就会被响应。
uClinux字符型驱动程序中的中断处理:
与Linux设备驱动中中断处理相关的首先是申请与释放IRQ(中断请求)的APIrequest_irq()和free_irq();
request_irq()是Linux内核中提供的中断注册函数接口,作用是申请使用IRQ并注册中断处理程序;request_irq()是Linux内核中提供的中断释放函数接口,用于Linux操作系统下对中断资源的释放;
所述uClinux字符型驱动程序是linux操作系统中三种基本驱动类型中的一种。
request_irq()的原型为:
int request_irq(unsigned int irq,void(*handler)(int irq,void*dev_id,struct pt_regs*regs),unsigned long irqflags,const char*devname,void*dev_id);
irq是要申请的硬件中断号;handler是向系统登记的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数,dev_id参数将被传递;irqflags是中断处理的属性,若设置SA_INTERRUPT,标明中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,慢速处理程序不屏蔽;若设置SA_SHIRQ,则多个设备共享中断,dev_id(当前注册的中断设备的标识符)在中断共享时会用到,一般设置为这个设备的device结构体本身或者NULL;device结构体为描述本设备而定义的结构体。
free_irq()的原型为:
void free_irq(unsigned int irq,void*dev_id);
uClinux环境下中断向应用程序的传递:
一旦实现了驱动层中的上述中断处理函数,在硬件中断信号到来后,驱动程序就可以中转到驱动层中的中断服务程序中了ISA(中断服务程序),但本发明还需要将此中断事件通知到用户程序,并且让用户程序跳转至在apis_install()函数中注册的应用层中断处理函数中;apis_install()为自定义实现函数,作用传递用户中断服务程序的函数指针,从而在中断到达时跳转到用户中断服务程序。
uClinux操作系统为了防止对资源的未经授权的访问,将整个系统严格地分为两个空间:用户空间和内核空间。应用程序运行在用户空间中,内核程序运行在内核空间中,两者是不能直接通信的,一般情况下,通过系统调用可以实现二者的通信,但这是一种同步的通信方法,运用到中断处理上也就是应用程序需要不断地通过某些系统调用函数,查询驱动中某位标志位的状态,从而判断中断事件的到达,显然,这种方式已经失去了中断的意义,是不可取的。
本发明中使用了信号驱动(SIGIO)的异步I/O的方法实现了中断事件由驱动层到应用层的异步传递。
信号驱动(SIGIO)的异步I/O:
信号驱动(SIGIO)的异步I/O实际是巧妙利用了操作系统中的信号机制,实现了信号向指定进程传递。其基本原理是:在驱动层的中断处理函数中设置一个信号产生函数,一旦中断到达,驱动程序跳转到驱动程序中的中断处理函数的同时,就会执行此函数,并向指定进程发送一个异步信号,应用程序接收到此异步信号后,就跳转到应用层的中断处理函数中执行,这样,就实现了一种“软中断”的操作。
实现这种异步通知的过程只需要调用相应的库函数或者系统调用函数即可。本发明中信号驱动的异步I/O实现基本uClinux操作系统,实现过程如下:
驱动层:在设备抽象的数据结构中增加一个struct fasync_struct的指针:
static struct fasync_struct*mmodule_async_queue;
实现设备操作中的fasync函数,该函数将本进程登记到async_queue(异步事件通知队列)上去,这个函数很简单,其主体就是调用内核的fasync_helper函数:
static int mmodule_fasync(int fd,struct file*filp,int on){
return fasync_helper(fd,filp,on,&mmodule_async_queue);
}
在驱动程序的中断服务程序中调用内核的kill_fasync函数,kill_fasync函数的作用是向指定的进程发送指定的信号:
void mmodule_handle(int irq,void*dev_id,struct pt_regs*regs)
{
CLEAR_PEND_INT(EXTINT_IRQ);
if(mmodule_async_queue)
kill_fasync(&mmodule_async_queue,SIGIO,POLL_IN);
}
在驱动的写成release()函数中调用前面定义的fasync函数,以释放掉所占资源。
其中fasync_helper和kill_fasync都是内核函数,只需要调用就可以了。第一步中定义的指针是一个重要参数,fasync_helper和kill_fasync会使用这个参数。
应用层:
利用signal设置SIGIO信号的处理函数(本发明此函数为user_isa,实际上此处传递的是一个函数指针),signal,用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件:
signal(SIGIO,user_isa);
fcntl(fcntl()用来操作文件描述词的一些特性)的F_SETOWN指令(设置当前进程为设备文件owner)设置当前进程为设备文件owner,同时将应用程序的进程索引号(PID)传递下去:
fcntl(fd,F_SETOWN,getpid());
oflags=fcntl(fd,F_GETFL);
fcntl的F_SETFL指令设置FASYNC标志:
fcntl(fd,F_SETFL,oflags|FASYNC);
完成了以上步骤,当内核执行到kill_fasync()函数,用户空间SIGIO信号的处理函数就会被调用了,调用了此函数以后,应用程序就可以直接跳转到signal()函数中注册的中断服务程序中执行了。这样即而实现了中断由内核层向用户层的传递。从应用层来看,其效果是一旦硬件中断到来,应用程序立即中转到应用程序中的中断服务子函数执行。
本发明利用信号驱动的异步IO实现了M模块的硬件中断事件到运行于Linux操作系统中应用层的传递,本发明实现方法简单,效率较高,在进行基于M模块的LXI载板的软件设计中,是一种切实可行的方法。
Claims (2)
1.利用异步通知实现LXI载板应用程序对M模块中断响应的方法,其特征是:
在LXI载板的ARM处理器的驱动层中的中断服务程序中建立中断处理函数,并在所述中断处理函数中设置一个信号产生函数,当M模块的中断信号到达ARM处理器的驱动层后,驱动程序将所述硬件中断信号输出至驱动层中的中断服务程序中;同时,驱动程序控制中断处理函数中信号产生函数向应用程序发送一个异步信号,应用程序接收所述异步信号后,将所述异步信号发送到应用层的中断处理函数中执行,实现LXI载板应用程序对M模块中断响应。
2.根据权利要求1所述的利用异步通知实现LXI载板应用程序对M模块中断响应的方法,其特征在于ARM处理器是型号为S3C4510B的芯片。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110043617 CN102117223B (zh) | 2011-02-22 | 2011-02-22 | 利用异步通知实现lxi载板应用程序对m模块中断响应的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110043617 CN102117223B (zh) | 2011-02-22 | 2011-02-22 | 利用异步通知实现lxi载板应用程序对m模块中断响应的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102117223A true CN102117223A (zh) | 2011-07-06 |
CN102117223B CN102117223B (zh) | 2012-12-26 |
Family
ID=44216005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110043617 Expired - Fee Related CN102117223B (zh) | 2011-02-22 | 2011-02-22 | 利用异步通知实现lxi载板应用程序对m模块中断响应的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102117223B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955410A (zh) * | 2014-05-23 | 2014-07-30 | 苏州国芯科技有限公司 | 基于多中断源优先级排序的中断控制方法 |
CN108345471A (zh) * | 2017-05-08 | 2018-07-31 | 清华大学 | 检测装置处理异步事件的方法及检测装置 |
CN110968432A (zh) * | 2018-09-29 | 2020-04-07 | 武汉斗鱼网络科技有限公司 | 一种控件事件处理方法、装置及可读存储介质 |
CN112286858A (zh) * | 2020-10-30 | 2021-01-29 | 山东众海智能科技有限公司 | 一种基于信号的Linux系统I2C驱动程序方法 |
CN112433835A (zh) * | 2020-11-23 | 2021-03-02 | 国家电网有限公司 | 一种基于Linux系统的中断处理方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101087313A (zh) * | 2006-12-31 | 2007-12-12 | 武汉大学 | 一种lxi总线接口 |
CN201134819Y (zh) * | 2007-10-31 | 2008-10-15 | 武汉大学 | 基于arm的lxi接口电路 |
CN201152972Y (zh) * | 2007-12-18 | 2008-11-19 | 成都纵横测控技术有限公司 | 一种高性能智能化基于m模块的vxi 总线测试模块 |
CN101944026A (zh) * | 2010-09-21 | 2011-01-12 | 中国人民解放军63961部队 | 一种通用虚拟仪器接口实现方法 |
-
2011
- 2011-02-22 CN CN 201110043617 patent/CN102117223B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101087313A (zh) * | 2006-12-31 | 2007-12-12 | 武汉大学 | 一种lxi总线接口 |
CN201134819Y (zh) * | 2007-10-31 | 2008-10-15 | 武汉大学 | 基于arm的lxi接口电路 |
CN201152972Y (zh) * | 2007-12-18 | 2008-11-19 | 成都纵横测控技术有限公司 | 一种高性能智能化基于m模块的vxi 总线测试模块 |
CN101944026A (zh) * | 2010-09-21 | 2011-01-12 | 中国人民解放军63961部队 | 一种通用虚拟仪器接口实现方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955410A (zh) * | 2014-05-23 | 2014-07-30 | 苏州国芯科技有限公司 | 基于多中断源优先级排序的中断控制方法 |
CN103955410B (zh) * | 2014-05-23 | 2017-10-27 | 苏州国芯科技有限公司 | 基于多中断源优先级排序的中断控制方法 |
CN108345471A (zh) * | 2017-05-08 | 2018-07-31 | 清华大学 | 检测装置处理异步事件的方法及检测装置 |
CN110968432A (zh) * | 2018-09-29 | 2020-04-07 | 武汉斗鱼网络科技有限公司 | 一种控件事件处理方法、装置及可读存储介质 |
CN110968432B (zh) * | 2018-09-29 | 2022-11-11 | 武汉斗鱼网络科技有限公司 | 一种控件事件处理方法、装置及可读存储介质 |
CN112286858A (zh) * | 2020-10-30 | 2021-01-29 | 山东众海智能科技有限公司 | 一种基于信号的Linux系统I2C驱动程序方法 |
CN112433835A (zh) * | 2020-11-23 | 2021-03-02 | 国家电网有限公司 | 一种基于Linux系统的中断处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102117223B (zh) | 2012-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10880195B2 (en) | RPS support for NFV by system call bypass | |
JP6961686B2 (ja) | トリガ動作を用いたgpuリモート通信 | |
US10133597B2 (en) | Intelligent GPU scheduling in a virtualization environment | |
JP5122597B2 (ja) | 仮想プロセッサへの直接的なインタラプトの送信 | |
EP2271992B1 (en) | Method and system for generating and delivering inter-processor interrupts in a multi-core processor and in certain shared-memory multi-processor systems | |
US9298484B2 (en) | Encapsulation of an application for virtualization | |
US10970129B2 (en) | Intelligent GPU scheduling in a virtualization environment | |
CN102117223B (zh) | 利用异步通知实现lxi载板应用程序对m模块中断响应的方法 | |
US10387343B2 (en) | Processing of events for accelerators utilized for parallel processing | |
JP7310924B2 (ja) | サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラム | |
US20210334228A1 (en) | Managing network interface controller-generated interrupts | |
EP4109285A1 (en) | Methods and apparatus for deterministic low latency packet forwarding for daisy chaining of network devices | |
Chang et al. | Virtualization technology for TCP/IP offload engine | |
US9612860B2 (en) | Sharing memory between guests by adapting a base address register to translate pointers to share a memory region upon requesting for functions of another guest | |
CN101349975A (zh) | 实现中断底半部机制的方法及嵌入式系统 | |
US20180011804A1 (en) | Inter-Process Signaling Mechanism | |
Zhang et al. | NVMe-over-RPMsg: A virtual storage device model applied to heterogeneous multi-core SoCs | |
Chen et al. | Developing embedded kernel for system-on-a-chip platform of heterogeneous multiprocessor architecture | |
Reichenbach et al. | LibHSA: one step towards mastering the era of heterogeneous hardware accelerators using FPGAs | |
WO2023002547A1 (ja) | サーバ内データ転送装置、サーバ内データ転送方法およびプログラム | |
US20240129255A1 (en) | Server delay control device, server delay control method, and program | |
WO2024013830A1 (ja) | サーバ内データ転送装置、データ転送システム、サーバ内データ転送方法およびプログラム | |
US20240160468A1 (en) | Server delay control device, server delay control method, and program | |
Luken et al. | The use of UNIX in a real-time environment | |
CN116868171A (zh) | 经由基于处理器的设备中的应用门户启用外围设备消息传递 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121226 Termination date: 20130222 |