一种面向带I/O型数字量异步端口SoC的数字量监测方法与流程

文档序号:11432160阅读:161来源:国知局
一种面向带I/O型数字量异步端口SoC的数字量监测方法与流程
本发明涉及一种面向带i/o型数字量异步数据端口soc的数字量监测方法,用于对嵌入式电路系统中的i/o型数字量进行实时监测,属于实时监测控制领域。
背景技术
:i/o型数字量是嵌入式系统中常常监测的一类信号。其通常作为嵌入式系统中的开关信号,在系统的运行过程中控制系统从一个状态到另一个状态的转换。因此,对i/o型数字量进行实时监测可以帮助更好地了解系统的运行状态和运行进程,便于及时纠正系统运行偏差,调整系统运行节奏,提高系统运行效率。常见的i/o型数字量监测方法可以分为两类:循环采样法和变化检测法。循环采样法的基本思路为通过高密度采样被检测的i/o型数字量,并记录每次采样的结果,通过对采样结果进行统计来获得i/o型数字量在高低电平的时域分布。这种方法的优点在于可以方便于实时获知每一时刻i/o型数字量的电平状态,这种方法能够监测的i/o型数字量的最小脉宽依赖于采样处理效率,对于实时统计i/o型数字量历史变化规律,电平持续时长以及电平变化时刻就显得有些力不从心了,获得较好的噪声监测结果通常需要较复杂的硬件和软件配合才能完成;另一类变化检测法通过中断来响应i/o型数字量变化的上下沿,通过检测i/o型数字量的上升沿和下降沿来判别i/o型数字量的状态变化时刻,这种方法只记录上下沿的变化状态,不统计每个采样时刻的信息,从而可以在误差范围内适当降低采样频率要求,允许多任务交叉运行,但这种方法能够监测的i/o型数字量的最小脉宽较大依赖于中断服务处理的时间。若在第一个i/o型数字量变化还未处理完毕时再发生新的i/o型数字量,在会造成新变化状态的丢失。技术实现要素:本发明的技术解决问题是:克服现有技术不足,提供了一种面向带i/o型数字量异步端口soc的数字量监测方法,克服异步变化检测法在异步解析数字量变化信息和记录数字量变化信息的读写冲突所导致的数字量信息丢失或变化时间信息记录不正确的所带来的技术困难,实现高实时可靠地对系统中i/o型数字量的变化信息进行监测。本发明的技术解决方案是:一种面向带i/o型数字量异步端口soc的数字量监测方法,所述带i/o型数字量异步端口包括i/o型数字量状态端口和i/o型数字量异步数据端口,所述i/o型数字量状态端口,用于实时记录m个并行的i/o型数字量状态,m≥1,所述i/o型数字量异步数据端口,用于实时存储最多n次最近的i/o型数字量状态端口值和变化次数,当i/o型数字量状态端口发生变化时,i/o型数字量异步数据端口立即更新,并产生中断请求,soc响应中断请求执行如下步骤:(1)、通过读取i/o型数字量异步数据端口,同时获取最多n次最近的i/o型数字量状态端口值和变化次数,将所述变化次数记为ncount,soc对i/o型数字量异步数据端口进行读操作对i/o型数字量异步数据端口中存储的变化次数具有“读清”功能,且所述清零操作优先级高于i/o型数字量异步数据端口更新时的写入操作;(2)、读取i/o型数字量状态端口,获取i/o型数字量状态端口值;(3)、根据最近获得的i/o型数字量异步数据端口所记载的最多n次最近的i/o型数字量状态端口值和当前的ncount值,分析i/o型数字量异步数据端口所记载的每个i/o型数字量最近ncount次翻转变化情况;(4)、比较最近获得的i/o型数字量异步数据端口所记载的最新的i/o型数字量状态端口值与最近从i/o型数字量状态端口获取的i/o型数字量状态端口值是否一致,如果一致,结束中断处理过程;否则,转入步骤(5);(5)、将最近获得的i/o型数字量异步数据端口所记载的最多n次最近的i/o型数字量状态端口值和ncount保存,按照步骤(1)的所述的方式再次读取i/o型数字量异步数据端口,获得i/o型数字量异步数据端口所记载的最多n次最近的i/o型数字量状态端口值和变化次数;(6)、再次读取i/o型数字量状态端口,获取i/o型数字量状态端口值;(7)、对比最近两次读取i/o型数字量异步数据端口所获取最多n次最近的i/o型数字量状态端口值,分析得到最近两次读取i/o型数字量异步数据端口操作之间i/o型数字量状态端口值的真实变化次数,将此变化次数记为ncount,重新执行步骤(3)~步骤(7)。所述步骤(2)中i/o型数字量状态端口值是对i/o型数字量异步端口进行滤波处理去除毛刺或者干扰之后的值。所述i/o型数字量状态端口值发生变化的判决方法为:将i/o型数字量状态端口值与i/o型数字量异步数据端口中存储的最新的i/o型数字量状态端口值进行异或操作,若异或结果不为0,则说明i/o型数字量状态端口发生变化;否则,认为i/o型数字量状态端口未发生变化。所述步骤(3)根据最近获得的i/o型数字量异步数据端口所记载的最多n次最近的i/o型数字量状态端口值和ncount,分析i/o型数字量异步数据端口所记载的每个i/o型数字量最近ncount次翻转变化情况的具体方法为:在最近获得的i/o型数字量异步数据端口所记载的最近ncount次翻转的i/o型数字量状态端口值中,按照从旧到新的顺序,将每一个i/o型数字量状态端口值与该i/o型数字量状态端口值变化前的i/o型数字量状态端口值进行位比较,得到每一次变化时每一个i/o型数字量翻转变化情况,直至所有ncount次最近的i/o型数字量状态端口值都比对完毕,得到所有ncount次i/o型数字量翻转变化情况,第一次执行时本步骤时,默认i/o型数字量状态端口值变化之前的值为i/o型数字量初始状态值。所述(7)对比最近两次读取i/o型数字量异步数据端口所获取最多n次最近的i/o型数字量状态端口值,分析得到最近两次读取i/o型数字量异步数据端口操作之间i/o型数字量状态端口值的实际变化次数的具体方法为:(7.1)、提取最近读取的i/o型数字量异步数据端口所记载的变化次数,将该变化次数作为最近两次读取i/o型数字量异步数据端口操作之间i/o型数字量状态端口值实际变化次数估值c;(7.2)、在最近读取的i/o型数字量异步数据端口记载的i/o型数字量状态端口数据中,找到i/o型数字量状态端口发生c次变化之前的最新的i/o型数字量状态端口值,并判断该值与次近读取的i/o型数字量异步数据端口所记载的最新的i/o型数字量状态端口值是否相同,如果相同,则认为当前实际变化次数估值c就是两次读取i/o型数字量异步数据端口之间i/o型数字量状态端口值实际发生的变化次数,结束;否则,执行步骤(7.3);(7.3)、采用当前实际变化次数估值c加1,更新实际变化次数估值c,当更新后的实际变化次数估值c等于n时,将n作为最近两次读取i/o型数字量异步数据端口操作之间i/o型数字量状态端口值的实际变化次数,结束;当所述更新后的实际变化次数估值c小于n时,重复执行步骤(7.2)~步骤(7.3)。本发明与现有技术相比的有益效果是:(1)、可以实现soc边读取已经发生的i/o变化状态,同时边记录正在发生的i/o状态变化,从逻辑上彻底解决了传统监测方法中同一时刻只能执行观测或记录任务,导致在频繁响应观测和记录任务间切换过程中的发生的i/o型数字量变化信息丢失问题,从而保证了记录的实时性,提高了i/o型数字量变化的敏感性;(2)、传统的i/o型数字量监测方法往往在极短的时间内仅能响应一次变化,本发明所述方法通过i/o型数字量异步数据端口可以同时记录多次变化,避免了短时到来的i/o型数字量上下沿的丢失;(3)、所述的异步i/o型数字量监测方法中,最小化了异步任务间的临界资源范围,同时提出了临界资源竞争的解决策略,避免了临界资源竞争引起的小概率i/o型数字量变化记录丢失问题。(4)、本发明针对i/o型数字量异步端口进行滤波处理去除毛刺或者干扰之后再进行状态变化判决,可以防止外部干扰对判决的影响,增加判决的复杂度,延长判决时间。附图说明图1为本发明实施例的面向带i/o型数字量异步端口soc的数字量监测方法流程图;图2为本发明实施例中分析i/o型数字量翻转变化情况的处理流程图。具体实施方式下面结合附图和具体实施例对本发明进行详细描述。i/o型数字量是电子设备中常见的一种信息表示方式,嵌入式就电子系统中针对i/o型数字量进行异步实时监测可以方便地了解嵌入式系统在运行过程中的状态变化。本发明提供了一种面向带i/o型数字量异步端口soc的数字量监测方法,实时统计i/o型数字量历史变化规律,下面采用具体实施例对本发明进行详细说明。实施例本实施例利用本发明所述方法对64路i/o型数字量进行监测,将该64路i/o型数字量分为8组,每组包括8个并行的i/o型数字量,这样,每一组对应一个i/o型数字量异步端口。soc对每个i/o型数字量异步端口独立监控。一个i/o型数字量异步端口对应一个i/o型数字量状态端口和一个i/o型数字量异步数据端口。i/o型数字量状态端口用于实时记录8个并行的i/o型数字量状态;为了表示方便,i/o型数字量异步数据端口由两个32位寄存器(记为io_data_buf2i和io_data_buf2i+1)来实时存储最多7次最近的i/o型数字量状态端口值和变化次数。8个i/o型数字量异步数据端口采用16个32位寄存器io_data_buf0~io_data_buf15实现。8个i/o型数字量状态端口可以采用两个32位寄存器(记为io_status和io_status1)实现。每一个i/o型数字量异步数据端口对应的寄存器格式定义如下:bit31~bit24bit23~bit16bit15~bit8bit7~bit0io_data_buf2idata2data1data0n_countio_data_buf2i+1data6data5data4data3其中io_data_buf2i端口由低到高的四个八位依次分别为:八位i/o型数字量变化的次数、八位i/o型数字量最新一次变化后的状态、八位i/o型数字量次新一次变化后的状态、八位i/o型数字量再次新一次变化后的状态;io_data_buf2i+1端口由低到高的四个八位依次分别为在io_data_buf2i所记录的三次i/o型数字量变化之前:八位i/o型数字量最新一次变化后的状态、八位i/o型数字量次新一次变化后的状态、八位i/o型数字量再次新一次变化后的状态、所记录的八位i/o型数字量最旧的一次变化后的状态;io_data_buf0的低八位n_count,为用于记录八位i/o型数字量变化的次数的位。i=1~8,表示第i个i/o型数字量异步端口。i/o型数字量状态端口寄存器及其位分组与i/o型数字量异步数据端口寄存器的对应情况如下:下面以低8位io状态的变化情况为实施例进行进一步详细的说明,其他组别的io状态量变化情况同低八位状态变化情况处理。为了防止外部干扰或者毛刺造成i/o型数字量出现不稳态,soc都对外部输入的i/o型数字量进行滤波处理以去除毛刺或者干扰,因此,i/o型数字量状态端口值是对i/o型数字量异步端口进行滤波处理去除毛刺或者干扰之后的值,反映的是当前i/o型数字量当前的输入状态。本实施例将i/o型数字量状态端口值data与i/o型数字量异步数据端口io_data_buf0中存储的最新的i/o型数字量状态端口值data0取异或操作,依次来判断i/o型数字量状态端口值是否发生变化。若异或结果不为0,则说明i/o型数字量状态端口发生变化;否则,认为i/o型数字量状态端口未发生变化。若异或结果不为0,即滤波后的输入数据与当前的数据状态不一致,说明i/o型数字量状态端口发生变化;若抑或结果为0,即滤波后的输入数据与当前的数据状态一致,则认为i/o型数字量状态端口未发生变化,不做处理。当i/o型数字量状态端口某一位或多位发生变化时,i/o型数字量异步数据端口立即更新,具体过程为:第n个数据赋值为第n-1个数据,第n-2个数据为第n-1个数据,依次类推,第1数据赋值为第0个数据,第0个数据为i/o型数字量异步数据端口最新一次变化后的i/o状态,用于记录w位i/o型数字量变化的次数的变化次数n_count加1。即将io_data_buf0的高24位向左移8位,并将最新的data赋于data0字段,同时对n_count完成加1操作,并向soc提起中断服务请求信号。设原状态的io_data_buf0和io_data_buf1的状态如下所示,bit31~bit24bit23~bit16bit15~bit8bit7~bit0io_data_buf011111110b11011010b01011010b0io_data_buf100001000b00001100b10001100b10001110b若此时读到的data是01011010b,由于该值与当前io_data_buf0中data0的值是一样的,io_data_buf0和io_data_buf1的状态不发生改变。若测试读到的data是01011011b,由于该值与当前io_data_buf0中data0的异或结果为00000001b,不为0,因此将data值记入data0处,并修改n_count值为1,修改后的io_data_buf0和io_data_buf1值如下:bit31~bit24bit23~bit16bit15~bit8bit7~bit0io_data_buf011011010b01011010b01011011b1io_data_buf100001100b10001100b10001110b11111110b此时,由于n_count中的值为1,所以向soc提起中断,等待soc响应。soc响应中断请求,运行在soc中的中断服务程序在收到中断请求后启动执行,如图1所示,中断服务程序执行步骤如下:(1)、依次读取i/o型数字量异步数据端口io_data_buf0和io_data_buf1的值到变量buf_new0和buf_new1中;bit31~bit24bit23~bit16bit15~bit8bit7~bit0buf_new011011010b01011010b01011011b1buf_new100001100b10001100b10001110b11111110bsoc对i/o型数字量异步数据端口进行读操作对i/o型数字量异步数据端口中存储的变化次数具有“读清”功能,即在读数据寄存器时,数据寄存器中的n_count字段被同时清零,且所述清零操作优先级高于i/o型数字量异步数据端口更新时的写入操作,此时,寄存器io_data_buf0和io_data_buf1的值变为:bit31~bit24bit23~bit16bit15~bit8bit7~bit0io_data_buf011011010b01011010b01011011b0io_data_buf100001100b10001100b10001110b11111110b(2)、读取i/o型数字量状态端口io_status,获取i/o型数字量状态端口值,将赋值给变量iostatus中;若此时io_status状态未发生变化,则iostatus的值变为01011011b,为了说明该算法的作用,假设在此时,io_status滤波后的值再次发生变化,假设变为01011001b,此时将该变化值写入寄存器io_data_buf0和io_data_buf1的过程和soc的中断处理程序同时进行,在进行更新n_count时,soc中断服务程序正在读取寄存器io_data_buf0和io_data_buf1的值,此时soc触发n_count的清零写操作,而外部硬件触发n_count的加一操作,此时发生的n_count资源竞争写冲突,为了保证soc在读取数据时的清零过程运行正常以使程序运行正确,soc中断服务程序的写优先级高于外部硬件的写优先级,因此在资源写冲突的情况下n_count值为0。此时iostatus读到的值为01011001b,而寄存器io_data_buf0和io_data_buf1的值变为如下状态:(3)、根据最近获得的i/o型数字量异步数据端口所记载的最多n次最近的i/o型数字量状态端口值和ncount,此时ncount为1,分析i/o型数字量异步数据端口所记载的每个i/o型数字量最近ncount次翻转变化情况,具体为:按照从旧到新或者从新到旧的顺序,将每一个i/o型数字量状态端口值与该i/o型数字量状态端口值变化之前的i/o型数字量状态端口值进行位比较,得到每一次变化时每一个i/o型数字量翻转变化情况,直至所有ncount次最近的i/o型数字量状态端口值都比对完毕,得到所有ncount次i/o型数字量翻转变化情况,第一次执行时本步骤时,默认i/o型数字量状态端口值变化之前的值为i/o型数字量初始状态值。本实施例中,采用保持型变量io_old记录每次比较时,i/o型数字量状态端口值变化之前的i/o型数字量状态端口值,具体步骤如图2所示。(3.1)、第一次执行时本步骤时,初始化保持型变量io_old为i/o型数字量初始状态值,在当前状态下,io_old的值为01011010b;(3.2)、读取buf_new0中记录八位i/o型数字量变化的次数的字段到变量ncursor中,此时ncursor为1。(3.3)、读取buf_new0或者buf_new1中最旧的一次i/o型数字量变化后的状态赋予io_new;由于只有一次变化,因此将data0的字段部分赋给io_new变量。则复制后的io_new变量为01011011b。(3.4)、比较io_new相对于io_old的位变化,并根据对应的位变化,即上沿或者下沿分别记录i/o型数字量变化的开始时间与结束时间;此时比对io_old的值01011010b和io_new的值01011011b后可以得到,最低位对应的io状态由0变成了1,因此对应的io记一次上沿信息。(3.5)、将ncursor值减1后得到新的ncursor;(3.6)、若ncursor不为0,则重复执行步骤(3.3)~步骤(3.6);若ncursor为0则结束处理。由于此时ncount为0,所以无需再跳转到步骤3执行了。(4)、比较最近获得的i/o型数字量异步数据端口所记载的最新的i/o型数字量状态端口值(buf_new0中的bit15~bit8)与最近从i/o型数字量状态端口获取的i/o型数字量状态端口值(变量iostatus)是否一致:若一致,则结束中断请求的处理过程;若不一致,则进行步骤5。此时iostatus中的变量是01011001b,而buf_new0中的最新状态是01011011b,二者不同,因此需要执行步骤5。i/o型数字量异步数据端口io_data_buf0中的n_count这个字段是外部硬件部件和soc中断处理程序的一个临界资源,在并行工作的情况下,会发生竞争写的情况,即同一端口软硬件异步读写的问题。当某个i/o型数字量发生变化时,中断服务处理逻辑开始执行,其执行的过程中会对i/o型数字量异步数据端口进行读取,而若此时新的i/o型数字量变化引起i/o型数字量异步数据端口中新状态的更新,此时八位i/o型数字量变化的次数会无法记录新变化的变化次数,造成可能的i/o型数字量变化丢失的情况发生。本步骤是为了检验在读取i/o型数字量异步数据端口时是否出现冲突现象,如果出现冲突会出现数字量信息丢失或变化时间信息记录不正确的问题,采用后续步骤进一步检测。(5)、保存buf_new0到buf_old0中,保存buf_new1到buf_old1中,按照步骤(1)的所述的方式再次读取i/o型数字量异步数据端口,获得i/o型数字量异步数据端口所记载的最多n次最近的i/o型数字量状态端口值和变化次数。buf_old0和buf_old1将buf_new0和buf_new1中的值备份了一遍。即:再次依次读取i/o型数字量异步数据端口io_data_buf0和io_data_buf1的值到变量buf_new0和buf_new1中;若在本步骤处理前,i/o型数字量状态端口io_status滤波后的值又发生了两次变化,i/o型数字量状态端口io_status的值经历了由01011001b变为01111001b,然后再次变为00111001b的过程。则此时i/o型数字量异步数据端口io_data_buf0和io_data_buf1中的值变为如下所示:bit31~bit24bit23~bit16bit15~bit8bit7~bit0io_data_buf001011001b01111001b00111001b2io_data_buf111111110b11011010b01011010b01011011b上述步骤由于没有读写i/o型数字量异步数据端口io_data_buf0和io_data_buf1的过程,因此不会引起读写冲突,n_count字段由外部硬件处理设备正确写入。经过本步骤后,buf_old0、buf_old1、buf_new0和buf_new1中的值如下所示:bit31~bit24bit23~bit16bit15~bit8bit7~bit0buf_new001011001b01111001b00111001b2buf_old011011010b01011010b01011011b1buf_new100001100b10001100b10001110b11111110bbuf_old111111110b11011010b01011010b01011011bbuf_new0和buf_new1反映了当前最新的io_data_buf0和io_data_buf1的状态。(6)、再次读取i/o型数字量状态端口,获取i/o型数字量状态端口值;由于此时的io_status没有发生变化,因此,iostatus读到的还是00111001b。(7)、对比最近两次读取i/o型数字量异步数据端口所获取最多n次最近的i/o型数字量状态端口值,分析得到最近两次读取i/o型数字量异步数据端口操作之间i/o型数字量状态端口值的真实变化次数,将此变化次数记为ncount,重新执行步骤(3)~步骤(7)。具体为:(7.1)、提取最近读取的i/o型数字量异步数据端口所记载的变化次数,将该变化次数作为最近两次读取i/o型数字量异步数据端口操作之间i/o型数字量状态端口值实际变化次数估值c;(7.2)、在最近读取的i/o型数字量异步数据端口记载的i/o型数字量状态端口数据中,找到i/o型数字量状态端口发生c次变化之前的最新的i/o型数字量状态端口值,并判断该值与次近读取的i/o型数字量异步数据端口所记载的最新的i/o型数字量状态端口值是否相同,如果相同,则认为当前实际变化次数估值c就是两次读取i/o型数字量异步数据端口之间i/o型数字量状态端口值实际发生的变化次数,结束;否则,执行步骤(7.3);(7.3)、采用当前实际变化次数估值c加1,更新实际变化次数估值c,当更新后的实际变化次数估值c等于n时,将n作为最近两次读取i/o型数字量异步数据端口操作之间i/o型数字量状态端口值的实际变化次数,结束;当所述更新后的实际变化次数估值c小于n时,重复执行步骤(7.2)~步骤(7.3)。本实施例中,在上述处理过程中,i/o型数字量状态端口io_status的状态变化了3次,但由于读写冲突,丢失了一次变化的记录,所以n_count目前的值是2,将2作为假定的真实变化次数。根据buf_new0中的n_count的值,从buf_new0或者buf_new1中的datan_count开始,向老数据区方向寻找第一个与buf_old0中八位i/o型数字量最新一次变化后的状态一致的数据,直到找到目标或超出数据区;由于当前n_count的值为2,所以从buf_new0的data2开始,依次查找buf_new0的data2、buf_new1的data3,data4,data5,data6,寻找和buf_old0的data0值相等的位置。若以找到目标结束,则将buf_new0当前数据的下标作为新的ncount;若以未找到目标结束step2,则将7作为新的ncount。此时buf_new1的data3和buf_old0的data0相等,buf_new1的data3对应的数据下标为3。因此将ncount赋值为3。综上所述,本发明可以实现soc边读取已经发生的i/o变化状态,同时边记录正在发生的i/o状态变化,从逻辑上彻底解决了传统监测方法中同一时刻只能执行观测或记录任务,导致在频繁响应观测和记录任务间切换过程中的发生的i/o型数字量变化丢失问题,从而保证了记录的实时性。而在所述的异步i/o型数字量监测方法中,最小化了异步任务间的临界资源范围,同时提出了临界资源竞争的解决策略,避免了临界资源竞争引起的小概率i/o型数字量变化记录丢失问题,实现了高实时可靠地对系统中i/o型数字量的变化信息进行监测。本发明可以被用于解决多种应用领域的嵌入式系统中i/o型数字量的实时监测问题。本发明未详细描述内容为本领域技术人员公知技术。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1