单片机及其同步异步控制方法与流程

文档序号:19673778发布日期:2020-01-10 23:00阅读:642来源:国知局
单片机及其同步异步控制方法与流程

本申请涉及单片机控制领域,特别是涉及单片机及其同步异步控制方法。



背景技术:

传统单片机如果检测到硬件状态变化,会立刻对硬件进行操作,亦即,传统单片机会在程序中直接控制硬件,立刻对硬件直接操作。而且指令执行不需要等待时间,即时生效。特别是如果操作硬件需要几条指令,每条指令都需要相应的等待时间,而且这些指令需要按顺序执行不能被打断。那么在循环检测硬件和中断通知两种情况共存的情况下,传统单片机的对硬件进行执行操作的方法便不可行。比如循环检测到硬件后,便对硬件进行a指令集处理,此时如果来了中断,就会中止a指令集的处理,开始执行指令集的b的处理,直到指令集b处理完成后,重新回复到指令集a的处理,由于违反了上面指令集顺序执行不能打断的规则,导致被操作的硬件处于混乱状态,导致硬件死机,程序崩溃。另外传统的单片机做等待,基本都是用while循环不停询问ticks数值来控制时间,但是这样就会导致程序一直卡在该while循环等待函数中,导致响应变得缓慢,以至于无法快速响应外部事件。

亦即,单片机在自身循环中检测到某些状态变化后会对硬件进行操作,且由于有中断事件对同一硬件进行操作,因此产生了竞态,导致操作硬件处于混乱状态,极有可能导致硬件死机。



技术实现要素:

基于此,有必要提供一种单片机及其同步异步控制方法。

一种单片机的同步异步控制方法,其包括以下步骤:

将需要处理的事件归入事件队列,且将所述事件的索引映射到优先级队列;

从所述优先级队列中确定当前最高优先级的事件作为待办事件,根据所述待办事件的索引映射到所述事件队列;

从所述事件队列取出所述待办事件且处理所述待办事件。

上述单片机的同步异步控制方法,避免了单片机在自身循环中检测到某些状态变化后会对硬件进行操作而产生竞态且导致操作硬件处于混乱状态,将发生的事件全部压入优先级队列和事件队列中,由于处理事件的先后顺序,因此可以延迟一小段时间,然后在循环的特定位置从事件队列中取出事件,并对硬件进行操作,这样保证了程序对硬件操作的一致性,有利于保持系统的健壮性,也有利于单片机快速响应外部事件。

在其中一个实施例中,采用事件闭包处理方式处理所述待办事件;其中,所述事件闭包处理方式包括:根据所述待办事件,确定执行所述待办事件所需的所有步骤,在处理过程中保证所有步骤处理等待时间和顺序执行。

在其中一个实施例中,所述处理等待时间采用ticks自增方式,在每次循环到当前位置时判断ticks计数器是否大于等待事件或者操作时间。

在其中一个实施例中,将需要处理的事件归入事件队列,包括:在检测到某硬件状态发生变化时将需要处理的事件归入事件队列,及/或,在发生中断时将需要处理的事件归入事件队列。

在其中一个实施例中,从所述优先级队列中确定当前最高优先级的事件作为待办事件,包括:采用循环遍历所述优先级队列确定当前最高优先级的事件作为待办事件。

在其中一个实施例中,在所述优先级队列中没有事件或者所述待办事件正在处理中,则直接跳过该次遍历操作。

在其中一个实施例中,所述同步异步控制方法还包括步骤:

预设置事件队列,所述事件队列存储需要处理的事件;

预设置优先级队列,所述优先级队列存储需要处理的事件的优先级,且通过索引建立与所述事件队列中的各事件的映射关系。

在其中一个实施例中,从所述事件队列取出所述待办事件,包括:从所述事件队列取出所述待办事件,将所述待办事件拆分到一个指令集,所述指令集包含具有指定顺序的多个指令,而且每个指令具有一定操作时间和等待时间。

在其中一个实施例中,处理所述待办事件,包括:采用所述指令集顺序处理所述待办事件的各个步骤。

一种单片机,其采用任一项所述同步异步控制方法实现。

附图说明

图1为本申请一实施例的流程示意图。

图2为本申请另一实施例的流程示意图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请的具体实施方式做详细的说明。在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似改进,因此本申请不受下面公开的具体实施例的限制。

需要说明的是,当元件被称为“固定于”或“设置于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。本文所使用的术语“垂直的”、“水平的”、“左”、“右”以及类似的表述只是为了说明的目的,并不表示是唯一的实施方式。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施方式的目的,不是旨在于限制本申请。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。

在其中一个实施例中,一种单片机的同步异步控制方法,如图1所示,其包括以下步骤:将需要处理的事件归入事件队列,且将所述事件的索引映射到优先级队列;从所述优先级队列中确定当前最高优先级的事件作为待办事件,根据所述待办事件的索引映射到所述事件队列;从所述事件队列取出所述待办事件且处理所述待办事件。上述单片机的同步异步控制方法,避免了单片机在自身循环中检测到某些状态变化后会对硬件进行操作而产生竞态且导致操作硬件处于混乱状态,将发生的事件全部压入优先级队列和事件队列中,由于处理事件的先后顺序,因此可以延迟一小段时间,然后在循环的特定位置从事件队列中取出事件,并对硬件进行操作,这样保证了程序对硬件操作的一致性,有利于保持系统的健壮性,也有利于单片机快速响应外部事件。

在其中一个实施例中,一种单片机的同步异步控制方法,其包括以下实施例的部分步骤或全部步骤;即,所述同步异步控制方法包括以下的部分技术特征或全部技术特征。

在其中一个实施例中,所述同步异步控制方法包括优先级队列,保存要处理事件的优先级的队列,保证和事件队列的映射关系;在其中一个实施例中,所述同步异步控制方法包括事件队列,保存要处理事件的队列;在其中一个实施例中,所述同步异步控制方法还包括步骤:预设置事件队列,所述事件队列存储需要处理的事件;预设置优先级队列,所述优先级队列存储需要处理的事件的优先级,且通过索引建立与所述事件队列中的各事件的映射关系。即,所述同步异步控制方法包括步骤:预设置事件队列,所述事件队列存储需要处理的事件;预设置优先级队列,所述优先级队列存储需要处理的事件的优先级,且通过索引建立与所述事件队列中的各事件的映射关系;将需要处理的事件归入事件队列,且将所述事件的索引映射到优先级队列;从所述优先级队列中确定当前最高优先级的事件作为待办事件,根据所述待办事件的索引映射到所述事件队列;从所述事件队列取出所述待办事件且处理所述待办事件。其余实施例以此类推。进一步地,在其中一个实施例中,所述优先级队列按发生顺序存储需要处理的事件的优先级。在其中一个实施例中,所述事件队列按发生顺序存储需要处理的事件。进一步地,在其中一个实施例中,所述优先级队列与所述事件队列之间采用索引映射方式,为所述事件队列的事件与所述优先级队列的优先级建立关联。本申请所述同步异步控制方法适用于单片机对硬件进行同步异步控制,在各实施例中,所述同步异步控制方法设计了优先级队列及事件队列。在发生事件时,将其先放入事件队列再按优先级顺序进行处理,这样的设计,可以避免单片机内部发生竞态而导致硬件出错乃至死机。

在其中一个实施例中,将需要处理的事件归入事件队列,且将所述事件的索引映射到优先级队列;在其中一个实施例中,将需要处理的事件归入事件队列之前,所述同步异步控制方法还包括步骤:接收事件;在其中一个实施例中,接收需要处理的事件。

在其中一个实施例中,将需要处理的事件归入事件队列,包括:在检测到某硬件状态发生变化时将需要处理的事件归入事件队列及在发生中断时将需要处理的事件归入事件队列。在其中一个实施例中,将需要处理的事件归入事件队列,包括在检测到某硬件状态发生变化时将需要处理的事件归入事件队列;或者,将需要处理的事件归入事件队列,包括在发生中断时将需要处理的事件归入事件队列。在其中一个实施例中,有两种方式将事件归入队列:对于检测到某硬件状态变化将要处理的事件压入事件队列,并将其事件在队列中的索引映射到优先级队列中。对于中断过来的事件压入事件队列,并将其事件在队列中的索引映射到优先级队列中。可以理解的是,对于传统单片机,万一这两类事件同时触发,则很有可能触发同时处理,从而导致硬件混乱程序停滞最后严重会导致死机;而采用本申请的实施例就可以避免同时处理的问题。进一步地,在其中一个实施例中,在某一事件发生时,无论当前事件的优先级别或者紧急程度,不中断处理正在处理的所述待办事件。进一步地,在其中一个实施例中,在某一事件发生时,无论当前事件的优先级别或者紧急程度,先将当前事件作为需要处理的事件归入事件队列,且将所述事件的索引映射到优先级队列,待当前所述待办事件处理完成后,在所述优先级队列中遍历确定当前最高优先级的事件作为待办事件。这样的设计,打破了传统单片机的响应模式的竞态桎梏,也避免了传统单片机对同一硬件发生同时两种操作的可能性,还避免了传统单片机可能发生的等待卡死问题,不会卡在while循环这些等待函数中,使得单片机在处理完成当前的待办事件后就可以快速响应外部事件。

在其中一个实施例中,从所述优先级队列中确定当前最高优先级的事件作为待办事件,根据所述待办事件的索引映射到所述事件队列,即在所述优先级队列中根据优先级取得事件,亦即在所述优先级队列中根据优先级取得事件的索引,从事件队列取得事件;在其中一个实施例中,所述同步异步控制方法包括步骤:根据优先级取得相对应事件,即根据优先级取得当前最高优先级的相对应事件;在其中一个实施例中,根据优先级取得事件方法:在单片机循环中,通过for循环遍历优先级队列,取出当前最高优先级的事件,根据该事件的索引映射到事件队列,取出要操作的事件。如果优先级队列没有事件或者事件正在进行中,则该次遍历直接跳过。在其中一个实施例中,根据优先级取得相对应事件方法,包括:查询优先级队列取得当前最高优先级的事件索引,然后根据索引取得事件队列中的事件。进一步地,在其中一个实施例中,从所述优先级队列中确定当前最高优先级的事件作为待办事件,包括:从所述优先级队列中,查询各事件的索引,取得当前最高优先级的事件索引,确定当前最高优先级的事件作为待办事件。进一步地,在其中一个实施例中,根据所述待办事件的索引映射到所述事件队列,包括:根据所述待办事件的索引,以及所述优先级队列与所述事件队列的事件索引的映射关系,从所述事件队列确定当前最高优先级的所述待办事件。进一步地,在其中一个实施例中,从所述优先级队列中确定当前最高优先级的事件作为待办事件,包括:遍历所述优先级队列确定当前最高优先级的事件作为待办事件。在其中一个实施例中,从所述优先级队列中确定当前最高优先级的事件作为待办事件,包括:采用循环遍历所述优先级队列确定当前最高优先级的事件作为待办事件。在其中一个实施例中,在所述优先级队列中没有事件或者所述待办事件正在处理中,则直接跳过该次遍历操作。这样的设计,一方面有利于确保取出优先级队列中具有最高优先级的事件,另一方面有利于避免浪费计算资源。可以理解的是,在处理所述待办事件的过程中,是有可能发生新的事件的,这时候不能直接处理新事件,把该事件归入事件队列,索引映射到优先级队列,保证和事件队列的映射关系,然后等到当前的待办事件处理完成之后,再遍历优先级队列,找出优先级最高的要处理的事件,一方面避免了硬件操作产生竞态而导致混乱乃至于硬件死机,另一方面有利于快速响应外部的紧急事件。

在其中一个实施例中,从所述事件队列取出所述待办事件且处理所述待办事件。在其中一个实施例中,从所述事件队列取出所述待办事件,包括:从所述事件队列取出所述待办事件,将所述待办事件拆分到一个指令集,所述指令集包含具有指定顺序的多个指令,而且每个指令具有一定操作时间和等待时间。在其中一个实施例中,取到的事件会拆分到一个指令集。指令集包含具有指定顺序的多个指令,而且每个指令需要一定操作时间和等待时间。本实施例采用ticks自增而不做while等待,通过每次循环到当前位置判断ticks计数器大于操作时间和等待时间,来执行操作和控制各个指令间的控制。整个指令集完成后,重新执行步骤:从所述优先级队列中确定当前最高优先级的事件作为待办事件,即去寻找最高优先级的事件再去处理。在其中一个实施例中,处理所述待办事件,包括:采用所述指令集顺序处理所述待办事件的各个步骤。进一步地,在其中一个实施例中,采用事件闭包处理方式处理所述待办事件以在处理所述待办事件的过程中拒绝处理其它事件。在其中一个实施例中,采用事件闭包处理方式处理所述待办事件;其中,所述事件闭包处理方式包括:根据所述待办事件,确定执行所述待办事件所需的所有步骤,在处理过程中保证所有步骤处理等待时间和顺序执行。在其中一个实施例中,所述处理等待时间采用ticks自增方式,在每次循环到当前位置时判断ticks计数器是否大于等待事件或者操作时间。在其中一个实施例中,事件闭包处理方法包括:根据事件,取得要执行的该事件的所有步骤,在处理的过程保证所有步骤处理等待时间和顺序执行。等待函数不用传统的while循环计算ticks,而是利用ticks自增,在每次ifticks是否大于等待事件或者操作时间的地方进行判断,这样程序就不用卡在传统的等待函数部分,提高程序的效率,加快了程序的响应速度。这样的设计,避免了系统卡在while循环等待函数中而导致响应变得缓慢的问题,能够快速响应外部事件;而且事件闭包处理的方式,避免了同一时间对同一硬件进行不同操作,保证了程序对硬件操作的一致性,有利于保持系统的健壮性。

在其中一个实施例中,本申请提出一种单片机对硬件进行同步异步控制的一种方法。该方法主要包括:一个优先级队列和一个事件队列。一般单片机会在程序中直接控制硬件,对硬件直接操作。本方法中,单片机在自身循环中检测到某些状态变化后会对硬件进行操作,且由于有中断事件对同一硬件进行操作。因此产生了竞态,导致操作硬件处于混乱状态。针对该问题,本申请提出一种对硬件进行同步异步控制的方法:将中断过来的事件以及自身循环中检测到某些状态变化后对硬件操作事件全部压入优先级队列和事件队列中,延迟一小段时间,在循环的特定位置从事件队列中取出事件,并对硬件进行操作,这样保证了程序对硬件操作的一致性。

在其中一个实施例中,所述同步异步控制方法包括优先级队列,保存要处理事件的优先级的队列,保证和事件队列的映射关系;在其中一个实施例中,所述同步异步控制方法包括事件队列,保存要处理事件的队列;在其中一个实施例中,所述同步异步控制方法包括步骤:根据优先级取得相对应事件;在其中一个实施例中,根据优先级取得相对应事件方法,包括:查询优先级队列取得当前最高优先级的事件索引,然后根据索引取得事件队列中的事件。在其中一个实施例中,

在其中一个实施例中,一种单片机的同步异步控制方法,其包括以下步骤:

s1,预设置事件队列,所述事件队列存储需要处理的事件;

s2,预设置优先级队列,所述优先级队列存储需要处理的事件的优先级,且通过索引建立与所述事件队列中的各事件的映射关系;

s3,接收需要处理的事件;

s4,将需要处理的事件归入事件队列,且将所述事件的索引映射到优先级队列;其中,在检测到某硬件状态发生变化时将需要处理的事件归入事件队列,或者,在发生中断时将需要处理的事件归入事件队列;

s5,从所述优先级队列中确定当前最高优先级的事件作为待办事件,根据所述待办事件的索引映射到所述事件队列;其中,采用循环遍历所述优先级队列确定当前最高优先级的事件作为待办事件,且在所述优先级队列中没有事件或者所述待办事件正在处理中,则直接跳过该次遍历操作;

s6,从所述事件队列取出所述待办事件,将所述待办事件拆分到一个指令集,所述指令集包含具有指定顺序的多个指令,而且每个指令具有一定操作时间和等待时间,采用所述指令集且以事件闭包处理方式顺序处理所述待办事件的各个步骤;其中,所述事件闭包处理方式包括:根据所述待办事件,确定执行所述待办事件所需的所有步骤,在处理过程中保证所有步骤处理等待时间和顺序执行;并且,所述处理等待时间采用ticks自增方式,在每次循环到当前位置时判断ticks计数器是否大于等待事件或者操作时间。

其余实施例以此类推。

下面再给出一个具体实现的实施例,单片机的同步异步控制方法的实现如图2所示,单片机的接收器收到状态检测变化或者发生中断时,插入事件到事件队列,即将需要处理的事件归入事件队列,插入事件的索引优先级到优先级队列,即将所述事件的索引映射到优先级队列;对于所述优先级队列中的各项索引,检测优先级,确定当前最高优先级的事件作为待办事件,根据所述待办事件的索引映射到所述事件队列,从所述事件队列取出所述待办事件,即根据优先级取得事件算法,确定且取出当前优先级队列中的最高优先级的事件,然后分步骤处理所述待办事件,该实施例分成了3步,包括事件处理步骤1、事件处理步骤2及事件处理步骤3,实际操作中不受此限制,可以有两步,也可以有十步;事件处理完成后,重新开始取得事件,继续进行处理,如果优先级队列没有事件的话,则停止。

在其中一个实施例中,一种单片机,其采用任一实施例所述同步异步控制方法实现。在其中一个实施例中,所述单片机具有实施所述同步异步控制方法各步骤的功能模块。在其中一个实施例中,所述单片机包括事件映射模块、待办事件确定模块及待办事件处理模块;所述事件映射模块用于将需要处理的事件归入事件队列,且将所述事件的索引映射到优先级队列;所述待办事件确定模块用于从所述优先级队列中确定当前最高优先级的事件作为待办事件,根据所述待办事件的索引映射到所述事件队列;所述待办事件处理模块用于从所述事件队列取出所述待办事件且处理所述待办事件。进一步地,在其中一个实施例中,所述单片机还包括事件接收模块,所述事件接收模块用于接收需要处理的事件。其余实施例以此类推。上述单片机,通过采用同步异步控制方法,避免了单片机在自身循环中检测到某些状态变化后会对硬件进行操作而产生竞态且导致操作硬件处于混乱状态,将发生的事件全部压入优先级队列和事件队列中,由于处理事件的先后顺序,因此可以延迟一小段时间,然后在循环的特定位置从事件队列中取出事件,并对硬件进行操作,这样保证了程序对硬件操作的一致性,有利于保持系统的健壮性,也有利于单片机快速响应外部事件。

需要说明的是,本申请的其它实施例还包括,上述各实施例中的技术特征相互组合所形成的、能够实施的单片机及其同步异步控制方法。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的专利保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1