掌桥专利:专业的专利平台
掌桥专利
首页

DMA传输控制方法、装置、电子设备及可读存储介质

文献发布时间:2023-06-19 19:07:35


DMA传输控制方法、装置、电子设备及可读存储介质

技术领域

本公开涉及DMA传输控制技术领域,尤其涉及一种DMA传输控制方法、装置、电子设备及可读存储介质。

背景技术

在一些SOC(System on Chip,片上系统)内部中,为了减少芯片体积,将用于指示DMA(Direct Memory Access,直接存储器访问)传输的数据所占大小的长度寄存器的位宽设计得较小,例如16bit(16位,该长度寄存器所能指示的数据所占大小最大为2

在进行DMA传输时,上层应用程序通过在unit的指定位上写入预设数值,以指定unit在本次传输过程中所表示的数据单位。如此,在长度寄存器为16bit的情况下,使用1MB的unit最大可以访问到64GB(64K*1MB)的范围,很大的程度上可以满足传输长度的要求。然而,在DMA传输过程中,传输数据的数据长度需要与unit当前被选中的数据单位对齐,即传输数据的数据长度能够被当前被选中的数据单位整除,不然会导致数据传输出错。此外,传输数据的数据长度不能大于被选中的unit当前的数据单位所对应的最大传输长度(MaxLength),否则也会导致数据传输出错。

因此,在现有技术中,为了保证正常传输数据,应用程序需要对用于生成传输任务的传输数据的数据长度设置诸多限制,即导致了传输数据的数据长度受限的问题。然而,在实际传输过程中,由于数据的传输长度具有多样性,待传输数据的数据长度如果不能满足上述传输长度的限制,将会导致传输失败。

发明内容

本公开的目的是提供一种DMA传输控制方法、装置、SOC、电子设备及可读存储介质,以解决使用DMA传输时,待传输的数据传输长度受限所导致的传输失败的问题。

根据本公开的一个方面,提供一种DMA传输控制方法,该方法包括:针对与待传输数据对应的链表包括的边缘节点,对其表示的数据长度大于第一unit所支持的第一最大传输长度的目标边缘节点进行拆分;所述边缘节点是位于所述链表的首位置或者末尾位置的节点,经拆分后所述链表包括的新边缘节点表示的数据长度不大于所述第一最大传输长度,且可被所述第一unit表示的数据单位整除;针对所述链表包括的除所述新边缘节点外的中间节点,对其表示的数据长度大于第二unit所支持的第二最大传输长度的目标中间节点进行拆分;经拆分后所述链表包括的新中间节点表示的数据长度不大于所述第二最大传输长度,且可被所述第二unit表示的数据单位整除;控制DMA通过所述第一unit传输所述新边缘节点,及通过所述第二unit传输所述新中间节点;所述第二unit表示的数据单位为1KByte,所述第一unit表示的数据单位为1Byte。

本公开一种可行的实现方式中,所述目标边缘节点经拆分后得到所述新边缘节点及非边缘节点;所述非边缘节点表示的数据长度可被所述第二unit表示的数据单位整除。

本公开一种可行的实现方式中,所述对其表示的数据长度大于第一unit所支持的第一最大传输长度的目标边缘节点进行拆分,包括:在所述目标边缘节点是所述链表的首节点时,将所述首节点的首地址作为拆分起点进行拆分,拆分后得到的所述新边缘节点的首地址为所述首节点的首地址;在所述目标边缘节点是所述链表的尾节点时,将所述尾节点的尾地址作为拆分起点进行拆分,拆分后得到的所述新边缘节点的尾地址为所述尾节点的尾地址。

本公开一种可行的实现方式中,所述目标边缘节点经拆分后得到所述新边缘节点及非边缘节点;所述对其表示的数据长度大于第一unit所支持的第一最大传输长度的目标边缘节点进行拆分,包括:在所述目标边缘节点是所述首节点时,将所述首节点的首地址到该首地址所在页面的尾地址之间所表示的数据长度作为所述新边缘节点表示的数据长度,将所述首节点中的剩余内容作为所述非边缘节点表示的数据长度;在所述目标边缘节点是所述尾节点时,将所述尾节点的尾地址到该尾地址所在页面的起始地址之间所表示的数据长度作为所述新边缘节点表示的数据长度,将所述尾节点中的剩余内容作为所述非边缘节点表示的数据长度。

本公开一种可行的实现方式中,所述对其表示的数据长度大于第二unit所支持的第二最大传输长度的目标中间节点进行拆分,包括:针对每个所述目标中间节点,以该目标中间节点的首地址为起点,以所述第二最大传输长度为拆分步长对该目标中间节点,得到所述新中间节点。

本公开一种可行的实现方式中,所述控制DMA通过所述第一unit传输所述新边缘节点,及通过所述第二unit传输所述新中间节点,包括:控制所述DMA采用Direct方式传输所述新边缘节点;将所述新中间节点组合成新的链表发送给所述DMA,以控制所述DMA采用链表方式传输所述新中间节点。

根据本公开的另一方面,还提供一种DMA传输控制装置,包括:第一拆分模块、第二拆分模块以及控制模块。

第一拆分模块,用于针对与待传输数据对应的链表包括的边缘节点,对其表示的数据长度大于第一unit所支持的第一最大传输长度的目标边缘节点进行拆分;所述边缘节点是位于所述链表的首位置或者末尾位置的节点,经拆分后所述链表包括的新边缘节点表示的数据长度不大于所述第一最大传输长度,且可被所述第一unit表示的数据单位整除;

第二拆分模块,用于针对所述链表包括的除所述新边缘节点外的中间节点,对其表示的数据长度大于第二unit所支持的第二最大传输长度的目标中间节点进行拆分;经拆分后所述链表包括的新中间节点表示的数据长度不大于所述第二最大传输长度,且可被所述第二unit表示的数据单位整除;

控制模块,用于控制DMA通过所述第一unit传输所述新边缘节点,及通过所述第二unit传输所述新中间节点;

所述第二unit表示的数据单位为1K Byte,所述第一unit表示的数据单位为1Byte。

本公开一种可行的实现方式中,所述目标边缘节点经拆分后得到所述新边缘节点及非边缘节点;所述非边缘节点表示的数据长度可被所述第二unit表示的数据单位整除。

本公开一种可行的实现方式中,所述目标边缘节点经拆分后得到所述新边缘节点及非边缘节点;所述非边缘节点表示的数据长度可被所述第二unit表示的数据单位整除。

本公开一种可行的实现方式中,所述第一拆分模块,用于在所述目标边缘节点是所述链表的首节点时,将所述首节点的首地址作为拆分起点进行拆分,拆分后得到的所述新边缘节点的首地址为所述首节点的首地址;在所述目标边缘节点是所述链表的尾节点时,将所述尾节点的尾地址作为拆分起点进行拆分,拆分后得到的所述新边缘节点的尾地址为所述尾节点的尾地址。

本公开一种可行的实现方式中,所述目标边缘节点经拆分后得到所述新边缘节点及非边缘节点;所述第一拆分模块,用于在所述目标边缘节点是所述首节点时,将所述首节点的首地址到该首地址所在页面的尾地址之间所表示的数据长度作为所述新边缘节点表示的数据长度,将所述首节点中的剩余内容作为所述非边缘节点表示的数据长度;

在所述目标边缘节点是所述尾节点时,将所述尾节点的尾地址到该尾地址所在页面的起始地址之间所表示的数据长度作为所述新边缘节点表示的数据长度,将所述尾节点中的剩余内容作为所述非边缘节点表示的数据长度。

本公开一种可行的实现方式中,所述第二拆分模块,用于针对每个所述目标中间节点,以该目标中间节点的首地址为起点,以所述第二最大传输长度为拆分步长对该目标拆分节点进行拆分,得到所述新中间节点。

本公开一种可行的实现方式中,所述控制模块,用于控制所述DMA采用Direct方式传输所述新边缘节点;将所述新中间节点组合成新的链表发送给所述DMA,以控制所述DMA采用链表方式传输所述新中间节点。

根据本公开的另一方面,还提供一种电子设备,包括存储器、处理器和SOC,所述SOC包括DMA,在所述存储器上存储有计算机程序,当所述计算机程序被所述处理器执行时,实施任一项所述的DMA传输控制方法。

对于移动端,该电子设备可以是智能手机、平板电脑、VR眼镜、车载电脑等等电子产品;对于桌面端,该电子设备可以是台式机、笔记本电脑等电子产品。

根据本公开的另一方面,还提供一种计算机可读存储介质,该计算机可读存储介质上存储有DMA传输控制程序,当DMA传输控制程序被执行时,实现上述任一可行的实现方式所提供的DMA传输控制方法。

附图说明

图1为本公开一个实施例的应用场景示意图;

图2为本公开一个实施例的系统内存页分配示意图;

图3为本公开一个实施例的链表示意图之一;

图4为本公开一个实施例的DMA传输控制方法的流程示意图

图5为本公开一个实施例的链表示意图之二;

图6为本公开一个实施例的DMA传输控制装置的结构示意图。

附图标记:400-DMA传输控制装置;410-第一拆分模块;420-第二拆分模块;430-控制模块。

具体实施方式

在介绍本公开实施例之前,应当说明的是:

本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。

本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。

本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。

应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。

为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。

在进行传统的DMA传输时,上层应用程序通过在unit的指定位上写入预设数值,以指定DMA在本次传输过程中所使用的unit所表示的数据单位。其中,在指定unit规格时,需要遵循长度对齐原则,即需要选择与待传输数据的数据长度可以对齐的unit数据单位,且还需要保证待传输数据的数据长度不能大于unit当前被选中的数据单位所对应的最大传输长度,否则会导致数据传输出错。

以长度寄存器为16bit为例,不同规格的unit和与其支持的最大传输长度的对应关系如表1所示。

表1:不同规格unit与其最大传输长度的对应关系表

基于表1以及上述长度对齐原则,假设待传输数据的数据长度仅可以与一种unit规格对齐,例如仅可以与1K对齐,那么按照现有原则,只能选择1K的unit。按照待传输数据的数据长度不能大于unit当前被选中的数据单位所对应的最大传输长度的要求,此时,如果待传输数据的数据长度小于等于64M,则DMA可以成功传输待传输数据,如果待传输数据的数据长度大于64M,则会导致传输失败。

基于表1以及上述长度对齐原则,假设待传输数据的数据长度可以与多种unit规格对齐,例如分别可以与1B的unit对齐以及与1K的unit对齐,那么按照现有原则,可以选择1B的unit或者1K的unit。若出于传输效率的考虑,优先选择更大的unit,即优先选择1K的unit。当选择1K的unit时,如果待传输数据的数据长度不大于64M,则DMA可以成功传输待传输数据,如果待传输数据的数据长度大于64M,则会导致传输失败。

在正常情况下,上述选择unit的原则可以满足数据的传输需求。然而,在实际传输过程中,由于待传输数据的数据长度具有多样性,应用程序并不能保证在基于长度对齐原则选择相应规格的unit来传输待传输数据时,该待传输数据的数据长度一定能够满足不大于该选择的unit的最大传输长度。即在选择对应规格的unit后,并不能保证在该unit的最大传输长度内传输完该待传输数据,此时将会导致传输失败。

如图1所示,位于主机(Host)端的应用程序生成数据搬移任务(例如将区域A所对应的像素数据搬移至区域B)后,应用程序将待搬移数据的相关位置信息(空间地址信息等)放入buffer中传递至主机端的驱动层(driver)。驱动层根据待搬移数据的相关位置信息划分实际的物理页面,利用操作系统接口将划分后的每个页面生成对应的sgl节点(也可简称为节点),并将各个节点进行连接,得到与本次数据搬移任务所涉及到的待传输数据对应的链表linklist。

其中,系统生成的每个节点所表示的数据长度是根据用户层为数据搬移任务所分配的系统内存对应的物理内存的实际情况来确定的。一般系统内存页大小为4K/8K,如图2所示,系统将连续的物理内存页放到一个sgl节点中。但是由于内存分配是随机的,故造成了sgl节点之间大小不统一,进而生成图3所示的包括A、B、C、D四个sgl节点的链表(linklist),且A、B、C、D四个节点所表示的数据长度大小各不相同。

值得指出的是,上述生成linklist的过程是较为成熟的现有技术,且在现有技术中,在生成linklist后,应用程序将linklist发送给DMA,以便DMA基于该linklist进行数据传输。

其中,DMA在传输节点A、B、C、D时,结合表1,由于节点B和节点C的数据长度可被1B以及1K整除,考虑到传输效率问题,节点B和节点C可选用与1K的unit对齐,相应的,DMA通过1K的unit传输节点B和节点C。由于节点A的数据长度只能被1B整除,所以节点A选用与1B的unit对齐,相应的,DMA通过1B的unit传输节点A。由于节点D的数据长度可被1B以及8B整除,且考虑到传输效率问题,节点D选择8B的unit,相应的,DMA通过8B的unit传输节点D。

但是根据表1,由于与1B的unit对应的最大传输长度为64K,与8B的unit对应的最大传输长度为512K,显然节点A表示的数据长度(2M+3B)已经超过了1B的unit的最大传输长度64K,以及节点D表示的数据长度(600K+8B)已经超过了8B的unit的最大传输长度512K,那么选择1B的unit传输节点A将会导致传输失败,以及选择8B的unit传输节点D也会导致传输失败。

为解决上述问题,本公开用于提供一种DMA传输控制方案,在基于待传输数据生成linklist后,应用程序并不会直接将linklist发送给DMA进行数据传输,而是会根据实际情况对linklist所包括的各个节点进行处理,进而解决由于传输数据的传输长度受限所导致的传输失败的问题。

下面将针对本公开所提供的DMA传输控制方案进行详细介绍。

首先,对本公开中的链表所包括的节点进行介绍。

此处的链表即上文中所提及到的,包括多个sgl节点的linklist,且每个sgl节点所表示的数据长度由系统分配的内存的实际情况来确定,意味着每个sgl节点所表示的数据长度不一定统一。

在本公开实施例中,为了便于区分,将链表所包括的各个节点中,位于链表的首位置的节点(首节点)以及位于链表的末尾位置的节点(尾节点)称作边缘节点,且将链表所包括的其余节点称作中间节点。对应到图3,节点A与节点D属于边缘节点,节点A为首节点,节点D为尾节点;节点B和节点C属于中间节点。

基于上述内容,请参照图4,本公开的一个实施例提供一种DMA传输控制方法,该方法可以包括:

S110:针对与待传输数据对应的链表包括的边缘节点,对其表示的数据长度大于第一unit所支持的第一最大传输长度的目标边缘节点进行拆分。

其中,对目标边缘节点进行拆分后,得到两部分节点,且两部分节点中位于链表的首位置或者末尾位置的节点属于链表的新边缘节点,另一部分节点为非边缘节点,属于链表的中间节点的范畴。

假设图4中的边缘节点A以及边缘节点D均是目标边缘节点,那么针对目标边缘节点A进行拆分后,得到两部分节点,分别为A1以及A2,针对目标边缘节点D进行拆分后,得到两部分节点,分别为D1以及D2。经过拆分后,节点A1位于链表的首位置,则节点A1属于链表的新边缘节点,节点D1位于链表的尾位置,则节点D1属于链表的新边缘节点。

按照前述描述,边缘节点包括首节点以及尾节点。相应的,经过拆分后,在链表包括的新边缘节点中,其中一个新边缘节点是链表的新首节点(即节点A1),另一个新边缘节点是链表的新尾节点(即节点D1),且每个新边缘节点表示的数据长度不大于第一最大传输长度。

此外,在本公开实施例中,由于后续在传输新首节点与新尾节点对应的数据时,采取的是相同的传输方式,因此,需要保证新首节点与新尾节点均可被同一规格的unit,即第一unit表示的数据单位整除。

值得指出的是,链表所包括的每个节点携带与之对应的数据长度信息,基于该数据长度信息可以获取到对应节点所表示的数据长度。

在本公开实施例中,在根据首节点携带的数据长度信息确定首节点表示的数据长度信息后,可以先判断首节点所表示的数据长度是否大于第一unit所支持的第一最大传输长度(例如第一unit为1B,则第一最大传输长度为64K),在大于时,该首节点为目标边缘节点,才会对该首节点进行拆分,否则不会对首节点进行拆分。

相应的,对于尾节点,在根据尾节点携带的数据长度信息确定尾节点表示的数据长度信息后,可以先判断尾节点所表示的数据长度是否大于第一unit所支持的第一最大传输长度(例如64K),在大于时,该尾节点为目标边缘节点,才会对尾节点进行拆分,否则不会对尾节点进行拆分。

由此可知,在对边缘节点进行拆分时,是对满足第一条件(该边缘节点表示的数据长度大于第一最大传输长度)的目标边缘节点进行拆分。

基于此,在对目标边缘节点进行拆分时,若首节点与尾节点均满足第一条件,那么链表包括的新边缘节点包括对首节点进行拆分后得到的新首节点以及对尾节点进行拆分后得到的新尾节点。

在对目标边缘节点进行拆分时,若只有首节点或尾节点之一满足第一条件,那么链表包括的新边缘节点之一是首节点或尾节点中满足第一条件的节点进行拆分后所得到的新首节点或新尾节点,链表包括的另一个新边缘节点是首节点及尾节点中未满足第一条件的节点。例如当首节点满足第一条件而尾节点不满足第一条件时,对首节点进行拆分后,链表包括的新边缘节点包括对首节点进行拆分后得到的新首节点以及未满足第一条件的原尾节点。

S120:针对所述链表包括的除所述新边缘节点外的中间节点,对其表示的数据长度大于第二unit所支持的第二最大传输长度的目标中间节点进行拆分。

其中,链表中除新边缘节点外的中间节点,包括对目标边缘节点进行拆分后所得到的中间节点(非边缘节点)以及链表中原本包括的中间节点(原中间节点)。对应到图5,链表中除新边缘节点外的中间节点包括对目标边缘节点进行拆分后得到的中间节点为节点A2以及节点D2;链表中原本包括的原中间节点为节点B以及节点C。

与前文类似的,在对中间节点进行拆分时,是对满足第二条件(该中间节点表示的数据长度大于第二最大传输长度)的目标中间节点进行拆分。

那么对于中间节点,在根据中间节点携带的数据长度信息确定中间节点表示的数据长度信息后,可以先判断中间节点所表示的数据长度是否大于第二unit所支持的第二最大传输长度(例如第二unit为1K,则第二最大传输长度为64M),在大于时,才会对该目标中间节点进行拆分,否则不会对中间节点进行拆分。

本公开实施例中对目标中间节点进行拆分后,得到的节点均属于链表所包括的新中间节点的范畴。

此外,值得指出的是,若链表中存在不满足第二条件的中间节点,那么对目标中间节点进行拆分后,目标中间节点的拆分结果与该不满足第二条件的原中间节点(不需要对其进行拆分)均属于链表所包括的新中间节点的范畴。

经过拆分后,链表包括的每个新中间节点表示的数据长度不大于第二unit所支持的第二最大传输长度。此外,在本公开实施例中,由于后续在传输新中间节点对应的数据时,采取的是相同的传输方式,因此,需要保证各新中间节点可被同一规格的unit,即第二unit表示的数据单位整除。

值得指出的是,由于系统在分配系统内存时都是以页为单位,虽然分配的系统内存的首地址往往不是以页地址为起始地址,系统内存的尾地址往往不是以页地址末尾地址,但是中间内存都是按照整页分配,且系统内存一般都是4K/8K(1K的整数倍)为一页。此外,针对每个中间节点,其所表示的数据长度为单个页面所表示的数据长度的整数倍,基于此,对于新中间节点所包括的未经拆分的原中间节点,其所表示的数据长度也能满足被第二unit所表示的数据单位1K整除的要求。

S130:控制DMA通过所述第一unit传输所述新边缘节点,及通过所述第二unit传输所述新中间节点。

也就是说,在本公开实施例中,可预先为DMA的同一unit指定两种不同规格,分别为第一规格(例如1B)以及第二规格(例如1K)。为了便于区分,该unit采用第一规格时,称之为第一unit;该unit采用第二规格时,称之为第二unit。

在生成链表后,应用程序并不会直接将linklist发送给DMA进行数据传输,而是会采用步骤S110的方式,对链表中的目标边缘节点进行拆分,以保证经过拆分后链表所包括的新边缘节点的数据长度可以满足与第一unit长度对齐且不大于与第一unit对应的第一最大传输长度,在后续能够被DMA使用第一unit传输成功。此外,还会采用步骤S120的方式,对链表中的目标中间节点进行拆分,以保证经过拆分后链表所包括的每个新中间节点可以满足与第二unit长度对齐且不大于与第二unit对应的第二最大传输长度,在后续能够被DMA使用第二unit传输成功。

那么后续在针对该linklist执行DMA传输时,即可控制DMA使用采用第一unit传输新边缘节点,使用第二unit传输新中间节点,进而规避由于传输数据的传输长度受限所导致的传输失败的问题。

下面将针对上述步骤的详细实施过程进行介绍。

S110:针对与待传输数据对应的链表包括的边缘节点,对其表示的数据长度大于第一unit所支持的第一最大传输长度的目标边缘节点进行拆分。

对于任一目标边缘节点,经过拆分后得到新边缘节点及非边缘节点。

新边缘节点表示的数据长度不大于第一unit(采用第一规格的unit)所支持的第一最大传输长度,且可被第一unit表示的数据单位整除。

非边缘节点表示的数据长度可被第二unit表示的数据单位整除。

其中,针对新边缘节点拆分后所得到的非边缘节点(该非边缘节点在后续属于链表的中间节点的范畴),需要满足可被第二unit表示的数据单位整除的条件,如此,可保证该非边缘节点在后续可被使用第二unit的DMA传输成功。

此外,第二unit表示的数据单位大于第一unit表示的数据单位,基于此,通过选择合适的第一unit(例如1B)以及合适的第二unit(例如1K),以及合适的拆分方式,可以实现非边缘节点表示的数据长度被第二unit表示的数据单位整除。

在一些实施方式中,在对首节点以及尾节点进行拆分时,首节点的拆分起点与尾节点的拆分起点有所不同。

可选的,在对首节点进行拆分时,将首节点的首地址作为拆分起点进行拆分。拆分后得到的新边缘节点是链表的新首节点,新首节点的首地址为首节点的首地址。

可选的,更具体的拆分过程可以为:在首节点所对应的页面中,将该页面的首地址(即首节点的首地址)到首地址所在页面的尾地址所表示的数据长度大小作为新边缘节点所表示的数据长度;将首节点所对应的页面中除拆分所得的新边缘节点之外的剩余页面所表示的数据长度大小,作为该首节点所拆分出的非边缘节点所表示的数据长度。值得指出的是,由于系统分配系统内存时,其中间内存都是按照整页分配的,因此,首节点经过拆分后所得到非边缘节点表示的数据长度为单个页面所表示的数据长度的整数倍,能够满足被第二unit所表示的数据单位1K整除的要求。

可选的,在对尾节点进行拆分时,将尾节点的尾地址作为拆分起点进行拆分。拆分后得到的新边缘节点是链表的新尾节点,新尾节点的尾地址为尾节点的尾地址。

可选的,更具体的拆分过程可以为:在尾节点所对应的页面中,将该页面的尾地址(即尾结点的尾地址)到尾地址所在页面的起始地址所表示的数据长度大小作为新边缘节点所表示的数据长度;将尾节点所对应的页面中除拆分所得的新边缘节点之外的剩余页面所表示的数据长度大小,作为该尾节点所拆分出的非边缘节点所表示的数据长度。由于系统分配系统内存时,其中间内存都是按照整页分配的,因此,尾节点经过拆分后所得到非边缘节点表示的数据长度为单个页面所表示的数据长度的整数倍,能够满足被第二unit所表示的数据单位1K整除的要求。

下面将以第一unit是采用1B的unit,第二unit是采用1K的unit为例,结合图3所示的链表中的首节点A(数据长度为2M+3B)以及尾节点D(数据长度为600K+8B)对上述拆分目标边缘节点的过程进行说明。

与1B的第一unit对应的第一最大传输长度为64K,与1K的第二unit对应的第二最大传输长度为64M。

针对首节点A,为了保证新边缘节点A1表示的数据长度不大于第一unit所支持的第一最大传输长度64K,且可被第一unit表示的数据单位1B整除,以及保证非边缘节点A2可被第二unit表示的数据单位1K整除,那么经过拆分后,如图5所示,得到的新边缘节点A1节点A1可以为3B,非边缘节点A2可以为2M。

针对尾节点D,为了保证新边缘节点D1表示的数据长度不大于第一unit所支持的第一最大传输长度64K,且可被第一unit表示的数据单位1B整除,以及保证非边缘节点D2可被第二unit表示的数据单位1K整除,那么经过拆分后,如图5所示,得到的第一尾子节点D1可以为8B,第二尾子节点D2可以为600K。

由于新边缘节点表示的数据长度不大于第一最大传输长度64K,且可被第一unit表示的数据单位1B整除,那么DMA在通过第一unit来传输新边缘节点时,便不会出现长度不对齐的问题,也不会出现长度受限的问题,相应的也不会出现传输失败的问题。

S120:针对所述链表包括的除所述新边缘节点外的中间节点,对其表示的数据长度大于第二unit所支持的第二最大传输长度的目标中间节点进行拆分。

前文提及,通过对目标边缘节点进行拆分后,可以得到其所表示的数据长度可被第二unit表示的数据单位整除的非边缘节点。

对于任一目标中间节点(包括满足第二条件的原中间节点以及满足第二条件的非边缘节点),经过拆分后得到新中间节点。

其中,经过拆分后所得到的每个新中间节点,需要满足其表示的数据长度不大于第二unit所支持的第二最大传输长度,且每个新中间节点表示的数据长度可被第二unit表示的数据单位整除。

在一些实施方式中,在对目标中间节点进行拆分时,针对每个所述目标中间节点,可以将该目标中间节点的首地址作为拆分起点,以第二unit所支持的第二最大传输长度为拆分步长对该目标中间节点,以此来对目标中间节点进行拆分,拆分后得到的每个子节点即为该目标中间节点拆分出的新中间节点。

下面将以第一unit是采用1B的unit,第二unit是采用1K的unit为例,结合图3所示的链表中的首节点A(数据长度为2M+3B)、尾节点D(数据长度为600K+8B)以及中间节点B(680K)和中间节点C(1.2M)对上述拆分过程进行说明。

如上所述,对首节点A以及尾节点D进行拆分后,得到边缘节点A2(2M)以及边缘节点D2(600K)。

那么针对该举例来说,链表当前所包括的中间节点包括:节点A2、节点B、节点C以及节点D2。

在第二unit是1K的unit,其支持的第二最大传输长度为64M的情况下,由于链表当前所包括的中间节点均小于第二最大传输长度64M,因此,针对该链表,当前不存在目标中间节点。

针对这种情况,根据前述描述(系统在分配系统内存时的机制),对于链表来说,即使当前不存在目标中间节点,当前的各个中间节点依旧可以满足其表示的数据长度不大于第二最大传输长度64M,且能够被第二unit表示的数据单位1K整除的条件。

现假设链表存在1个目标中间节点,其表示的数据长度为65M,那么在按照上述针对目标中间节点的拆分方式对其进行拆分时,可以得到两个新中间节点,分别为64M以及1M。得到的新中间节点均满足其表示的数据长度不大于第二最大传输长度64M,且可被第二unit表示的数据单位1K整除的条件。

由于每个新中间节点表示的数据长度不大于第二最大传输长度,且可被第二unit表示的数据单位整除,那么DMA在通过第二unit来传输每个其他子节点时,便不会出现长度不对齐的问题,也不会出现传输失败的问题。

S130:控制DMA通过所述第一unit传输所述新边缘节点,以及通过所述第二unit传输所述新中间节点。

值得指出的是,在进行DMA传输时,还可以对待传输的数据进行地址对齐,以提高DMA自身的传输性能。一般而言,DMA硬件在使用Direct传输方式(Direct toDirect)时使用1Byte地址对齐,DMA硬件在使用linklist传输方式时则使用32Byte地址对齐。

在实际传输过程中,尤其是在图像传输领域,例如涉及到2D搬移的情况,由于用户空间分配的内存多数情况下是不连续的,而linklist可以将连续的物理内存映射到同一个节点,且通过节点相连接的方式将彼此之间不连续的物理内存进行连接,以便于DMA基于各个节点进行数据传输,因此一般采用linklist传输方式来传输物理地址不连续图像数据。基于此,在进行图像搬移时,就需要约束系统所分配的内存与32Byte地址对齐。然而在内存频繁被使用的情况下,系统所分配内存大多数无法满足与32Byte地址对齐。

在本公开实施例中,由于系统的内存整页分配机制,对于处理后的链表中的每个新中间节点,其首地址均是该新中间节点所在页的页起始地址,而由于内存分配机制,页面的页起始地址默认能够被32整除,即可以保证每个新中间节点与32Byte地址对齐。那么针对处理后的链表中已与32Byte地址对齐的新中间节点,依旧可以采用linklist传输方式来进行DMA传输。

对于处理后的链表中的新边缘节点,由于其首地址不一定能够保证被32整除,即不一定与32Byte地址对齐,但一定能够被1整除,即一定与1Byte地址对齐。基于此,可以采用Direct传输方式来对新边缘节点进行DMA传输。如此,对于应用程序来说,可规避首地址对齐问题。相应的,在面对图1的使用场景时,区域A可位于整个图像区域的任何位置,而不必受限于地址对齐的限制。

对应到本方案,在一些实施方式中,在执行步骤S130(控制DMA通过所述第一unit传输所述新边缘节点,以及通过所述第二unit传输所述新中间节点)时,可以包括:控制所述DMA采用Direct传输方式传输所述新边缘节点;将所述新中间节点组合成新的链表发送给所述DMA,以控制所述DMA采用linklist传输方式传输所述新中间节点。

可选的,可以将处理后的链表中的第一个新边缘节点(新首节点)和最后新边缘节点(新尾节点)分别取下来通过填写DMA寄存器的方式,以控制DMA采用Direct的方式启动DMA传输;将处理后的链表中的新中间节点依次连接组合成新的链表写入DMA寄存器启动DMA传输。连接的过程即是在当前新中间节点中添加下一个新中间节点的虚拟地址,新中间节点的虚拟地址用于表示该新中间节点所存放的位置的虚拟地址。

其中,新首节点、新尾节点以及链表中的新中间节点三者的传输顺序可以随机设置,也可以固定三者的传输顺序。当然,为了保证完成DMA传输后,后续可以还原待传输数据,在控制DMA使用采用第一unit传输新首节点、新尾节点以及使用第二unit传输新中间节点时,可以相应的记录新首节点、新尾节点以及新中间节点的传输ID,以便后续基于传输ID还原待传输数据。

如此,通过三个命令(新首节点、新尾节点分别占用两个Direct传输命令,新中间节点所形成的新的链表占用一个linklist传输命令)即可覆盖所有数据场景的DMA传输,解决了应用程序使用DMA传输图像数据时不友好的问题,还简化了传输流程。

当然,在一些实施方式中,若新首节点与新尾节点能够与32Byte地址对齐,那么在执行步骤S130(控制DMA通过所述第一unit传输所述新边缘节点,以及通过所述第二unit传输所述新中间节点)时,也可以将新首节点与新尾节点之间进行连接组合成新的第一链表,并采用linklist的方式来传输该新的第一链表;以及将新中间节点依次连接组合成新的第二链表,并采用linklist的方式来传输该新的第二链表。

综上,在本公开实施例中,当生成与本次搬移任务对应的链表后,应用程序并不会直接将linklist发送给DMA进行数据传输,而是会采用步骤S110的方式,基于第一unit对目标边缘节点进行拆分,得到新边缘,以保证新边缘节点所表示的数据长度可以满足与第一unit长度对齐且不大于与第一unit对应的第一最大传输长度,在后续能够被DMA使用第一unit传输成功。此外,还会采用步骤S120的方式,基于第二unit对中间节点进行拆分,以保证得到的每个新中间节点可以满足与第二unit长度对齐且不大于与第二unit对应的第二最大传输长度,在后续能够被DMA使用第二unit传输成功。那么后续执行图像传输时,即可控制DMA使用采用第一unit传输新边缘节点,使用第二unit传输新中间节点,进而规避由于传输数据的传输长度受限所导致的传输失败的问题。

此外,采用本方案,还可以解决DMA传输时所面临的地址对齐问题。

此外,请参照图6,本公开实施例还提供一种DMA传输控制装置400,可以包括第一拆分模块410、第二拆分模块420以及控制模块430。

第一拆分模块410,用于针对与待传输数据对应的链表包括的边缘节点,对其表示的数据长度大于第一unit所支持的第一最大传输长度的目标边缘节点进行拆分;所述边缘节点是位于所述链表的首位置或者末尾位置的节点,经拆分后所述链表包括的新边缘节点表示的数据长度不大于所述第一最大传输长度,且可被所述第一unit表示的数据单位整除;

第二拆分模块420,用于针对所述链表包括的除所述新边缘节点外的中间节点,对其表示的数据长度大于第二unit所支持的第二最大传输长度的目标中间节点进行拆分;经拆分后所述链表包括的新中间节点表示的数据长度不大于所述第二最大传输长度,且可被所述第二unit表示的数据单位整除;

控制模块430,用于用于控制DMA通过所述第一unit传输所述新边缘节点,及通过所述第二unit传输所述新中间节点;

所述第二unit表示的数据单位为1K Byte,所述第一unit表示的数据单位为1Byte。

本公开一种可行的实现方式中,所述目标边缘节点经拆分后得到所述新边缘节点及非边缘节点;所述非边缘节点表示的数据长度可被所述第二unit表示的数据单位整除。

本公开一种可行的实现方式中,所述第一拆分模块410,用于在所述目标边缘节点是所述链表的首节点时,将所述首节点的首地址作为拆分起点进行拆分,拆分后得到的所述新边缘节点的首地址为所述首节点的首地址;在所述目标边缘节点是所述链表的尾节点时,将所述尾节点的尾地址作为拆分起点进行拆分,拆分后得到的所述新边缘节点的尾地址为所述尾节点的尾地址。

本公开一种可行的实现方式中,所述目标边缘节点经拆分后得到所述新边缘节点及非边缘节点;所述第一拆分模块410,用于在所述目标边缘节点是所述首节点时,将所述首节点的首地址到该首地址所在页面的尾地址之间所表示的数据长度作为所述新边缘节点表示的数据长度,将所述首节点中的剩余内容作为所述非边缘节点表示的数据长度;

在所述目标边缘节点是所述尾节点时,将所述尾节点的尾地址到该尾地址所在页面的起始地址之间所表示的数据长度作为所述新边缘节点表示的数据长度,将所述尾节点中的剩余内容作为所述非边缘节点表示的数据长度。

本公开一种可行的实现方式中,所述第二拆分模块420,用于针对每个所述目标中间节点,以该目标中间节点的首地址为起点,以所述第二最大传输长度为拆分步长对该目标拆分节点进行拆分,得到所述新中间节点。

本公开一种可行的实现方式中,所述控制模块430,用于控制所述DMA采用Direct方式传输所述新边缘节点;将所述新中间节点组合成新的链表发送给所述DMA,以控制所述DMA采用链表方式传输所述新中间节点。

此外,本公开实施例还提供一种电子设备,包括存储器、处理器和SOC,所述SOC包括DMA,在所述存储器上存储有计算机程序,当所述计算机程序被所述处理器执行时,实施上述任一所述的DMA传输控制方法。

在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等多媒体设备;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。

此外,本公开实施例还提供一种计算机可读存储介质,在该计算机可读存储介质上存储有DMA传输控制程序,该DMA传输控制程序被执行时,可实现上述任一可行的实现方式所提供的DMA传输控制方法。至于具体的执行过程可参照上述方法实施例,此处不再赘述。

基于上述DMA传输控制方案,在生成链表后,可预先为DMA的同一unit指定两种不同规格,分别为第一规格(例如1B)以及第二规格(例如1K)。为了便于区分,该unit采用第一规格时,称之为第一unit;该unit采用第二规格时,称之为第二unit。

在生成链表后,应用程序并不会直接将linklist发送给DMA进行数据传输,而是会对链表中的目标边缘节点进行拆分,以保证经过拆分后链表所包括的新边缘节点的数据长度可以满足与第一unit长度对齐且不大于与第一unit对应的第一最大传输长度,在后续能够被DMA使用第一unit传输成功。此外,还会对链表中的目标中间节点进行拆分,以保证经过拆分后链表所包括的每个新中间节点可以满足与第二unit长度对齐且不大于与第二unit对应的第二最大传输长度,在后续能够被DMA使用第二unit传输成功。那么后续在针对该linklist执行DMA传输时,即可控制DMA使用采用第一unit传输新边缘节点,使用第二unit传输新中间节点,进而规避由于传输数据的传输长度受限所导致的传输失败的问题。

此外,采用本方案,通过将新边缘节点采用Direct传输方式,将新中间节点采用linklist传输方式,还可以解决DMA传输时地址对齐的问题。

尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。

显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。

本领域内的技术人员应明白,本公开的实施例可提供为方法、系统或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本公开是参照根据本公开实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

最后应当说明的是:以上实施例仅用于说明本公开的技术方案而非对其保护范围的限制,尽管参照上述实施例对本公开进行了详细的说明,所属领域的普通技术人员应当理解:本领域技术人员阅读本公开后依然可对发明的具体实施方式进行种种变更、修改或者等同替换,但这些变更、修改或者等同替换,均在公开待批的权利要求保护范围之内。

相关技术
  • 一种信号传输方法、装置、电子设备以及计算机可读存储介质
  • 一种浴室加热装置和用于控制浴室加热装置的方法、设备、电子设备及计算机可读存储介质
  • 控制方法、控制装置、计算机可读存储介质和电子设备
  • 控制视频播放的方法、装置、可读存储介质及电子设备
  • 开关控制方法、装置、电子设备及计算机可读存储介质
  • DMA数据传输方法、系统、电子设备及可读存储介质
  • DMA数据传输方法、系统、电子设备及可读存储介质
技术分类

06120115799970