首页> 中国专利> 多任务处理器及其任务切换方法

多任务处理器及其任务切换方法

摘要

一种多任务处理器及其任务切换方法。任务切换方法包含下列步骤:多任务处理器执行第一任务,而此第一任务的执行指令中包含了许多的切换点指令。一中断事件发生,而此中断事件将使多任务处理器暂缓执行目前的第一任务,改为执行第二任务。多任务处理器执行中断事件的处理程序,并设置一任务切换标志。中断事件的处理程序结束后,多任务处理器不进行任务切换,仍继续执行第一任务,直到执行至第一任务执行指令中的切换点指令处,多任务处理器才进行任务切换,改为执行第二任务。

著录项

  • 公开/公告号CN101673219A

    专利类型发明专利

  • 公开/公告日2010-03-17

    原文格式PDF

  • 申请/专利权人 财团法人工业技术研究院;

    申请/专利号CN200810149435.7

  • 申请日2008-09-12

  • 分类号G06F9/48;

  • 代理机构北京市柳沈律师事务所;

  • 代理人蒲迈文

  • 地址 中国台湾新竹县

  • 入库时间 2023-12-17 23:44:22

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-04-24

    授权

    授权

  • 2010-04-28

    实质审查的生效 IPC(主分类):G06F9/48 申请日:20080912

    实质审查的生效

  • 2010-03-17

    公开

    公开

说明书

技术领域

本发明涉及一种多任务处理器及其任务切换方法。

背景技术

随着科技的蓬勃发展,使得通讯及多媒体的标准不断的更新,众家业者为了应付通讯及多媒体标准的更新速度,于是以可编程处理器(programmable processor)取代传统特定功能整合电路(application specifiedintegrated circuit,ASIC),整合到嵌入式系统中。而新一代的通讯及多媒体的应用倾向于提高多任务处理器运算复杂度,达到以较低位率提供高画质内容的功能。为了符合通讯及多媒体上的即时(real-time)处理的需求(同时执行多个应用程序、及时反应使用者需求等),可编程处理器(programmableprocessor)于是使用作业系统(operating system)或微核心(micro kernel)动态即时管理的能力,并以分时(time slicing)多任务(multitasking)的方式来实现。

在分时多任务的环境下,可编程处理器必须常常切换所执行的工作(或称任务,task),每进行一次任务切换,则必须进行一次内容切换(contextswitch),将现在进行的任务状态(包括寄存器以及其他任务信息)全部存到堆迭(stack)中。现今可编程处理器的发展趋势倾向于增加寄存器的数量,以及加长寄存器的字长度(word-length),以便于藉由单一指令多重数据(singleinstruction multiple data,简称SIMD)的技术,利用数据层级平行度(data-levelparallelism,简称DLP)来提升运算能力。

市面上产品的微核心动态即时管理的方式大多以抢先式(preemptive)排序的为主。图1为现有的多任务处理器的抢先式微核心的任务切换流程图。当中断(interrupt)发生的时候(如步骤S101),微核心会控制多任务处理器先暂停所有的任务。接着会执行步骤S102,先将中断处理(interrupt handler)所需要的部份寄存器的内容保留(备份)至堆迭中。步骤S103会进行中断事件的处理程序,此时微核心会控制多任务处理器先储存堆迭点,接着对所有的任务(包含执行中、等待被执行及中断载入的任务)进行重新任务调度(reschedule)。在执行到步骤S104的时候,会依据重新任务调度的结果,比对是否有比目前执行中的任务具有更高优先权的任务。若有的话,便会做一次完整的内容切换,使多任务处理器先载入优先权较高的任务(步骤S110)。所谓内容切换,包含将原先任务的所有执行内容(寄存器的内容)备份至堆迭中,然后将新任务的所有执行内容存回寄存器中。在完成内容切换后,便可以开始执行新的任务(步骤S111)。若是没有更高优先权的任务,则会将步骤S102所备份的寄存器内容存回寄存器中(步骤S120),以便让原先执行中的任务继续执行(步骤S121)。

图1A为根据现有技术,说明图1的任务时序图。图中横轴表示时间t。于图1中,抢先延迟时间为时间T11及T12。参照图1A,在时间T101之前,多任务处理器执行第一任务。在时间T101发生中断事件后,多任务处理器暂停执行第一任务,并在时间T101~T102的期间中进行中断事件的处理程序(包含中断处理与重新任务调度)。其中,重新任务调度会对所有等待执行的任务重新排序。

当完成重新任务调度后(也就是在时间T102之后),若重新任务调度显示原先进行的第一任务为最优先处理的任务,则多任务处理器将继续执行第一任务;当完成重新任务调度后(也就是在时间T102之后),若有一任务(第二任务)取代执行中的任务(第一任务)成为最优先处理的任务时,则多任务处理器将任务切换改执行前述的第二任务,并在时间T102~T103的期间中进行内容切换。在内容切换期间,多任务处理器会将第一任务的执行内容(所有寄存器的内容)备份至堆迭中,然后将第二任务的执行内容载入寄存器中。很明显地,内容切换所需时间,需视寄存器的数量以及每一个寄存器的字长度而定。在现今可编程多任务处理器的发展趋势下,内容切换所需时间(即时间T102~T103的期间)会越来越长。在图1A中,其时间T1为抢先延迟(preemption latency)的时间,代表从发生中断事件到完成内容切换所花的时间。当完成内容切换后(即时间T103),此时多任务处理器已经准备好并且开始执行第二任务。

在即时处理的系统中,抢先延迟的时间(T1)是一个考量重点。在现有抢先式微核心中,当执行内容切换时,会将所有的寄存器(包括使用中及未使用的寄存器)作备份,其中亦包括不再使用的寄存器。

发明内容

本发明提供一种多任务处理器,此多任务处理器包含处理单元以及切换标志,其可以接受二个以上的任务指派。处理单元用以执行含有一切换点指令的指令集,其中该切换点指令为特定的处理器指令。其中,该处理单元执行具有至少一切换点指令的第一任务。当发生中断事件时,处理单元执行中断事件的处理程序以判断是否需要任务切换,并依据判断结果设定该切换标志后,该处理单元即继续执行第一任务,直到处理单元执行该第一任务中的该至少一切换点指令时检查该切换标志;若切换标志表示该处理单元于进行前述中断事件的处理程序时判断需进行任务切换,则处理单元即进行任务切换改执行第二任务。若该切换标志表示处理单元于进行中断事件的处理程序时判断不需任务切换,则处理单元则继续执行第一任务。

本发明亦提出一种多任务处理器的任务切换方法。此任务切换方法包括下述步骤。首先由多任务处理器执行第一任务。假设某一事件表示该多任务处理器应进行任务切换,以便由执行第一任务切换为执行第二任务。当发生该事件时,使该多任务处理器暂缓进行该任务切换,并继续执行第一任务,直至该多任务处理器执行至第一任务中的可切换点,径行该任务切换以切换执行第二任务。

为使本发明的上述特征和优点能更明显易懂,下文特举较佳实施例,并结合附图详细说明如下。

附图说明

图1为现有的多任务处理器的抢先式微核心的任务切换流程图。

图1A为根据现有的,说明图1的任务时序图。

图2A为根据本发明的一实施例的多任务处理器的任务切换方法之中断事件处理流程图。

图2B为根据本发明的一实施例的多任务处理器的任务切换方法的任务切换处理流程图。

图2C为根据本发明一实施例的切换点指令配置示意图。

图2D为根据本发明一实施例的多任务处理器的任务切换方法的时序图。

图3为根据本发明的一实施例的多任务处理器的方块图。

图3A为根据本发明一实施例,说明图3存活寄存器表示意图。

附图符号说明

S101~S104、S110、S111、S120、S121、S210~S215、S221~S225:步骤

T120、T101、T103~T105、T110、T201~T204:时间

201~204:寄存器数量最少的位置

210:程序码

211~214:切换点指令

300:多任务处理器

350:切换标志

322:寄存器单元

341:数据存储器

342:存活寄存器表

343_~343_n:存活寄存器清单

310:指令提取级

320:指令解码级

321:解码器

330:执行级

340:数据存取级

AND1:与门

具体实施方式

如前述所提及,现在的多任务处理器设计趋势倾向于增加寄存器的数量及字的长度,这使得现有的抢先式微核心以分时多任务来执行多个任务时,在任务切换过程花费过多的时间储存所有的寄存器。有鉴于此,本发明将提出一多任务处理器,利用增加一切换点指令及一切换标志,搭配一任务切换方法。

以下诸实施例将说明,当发生某一事件(例如中断事件)时,本发明的多任务处理器如何进行任务切换。前述某一事件表示该多任务处理器应进行「任务切换」,以便由执行「第一任务」切换执行「第二任务」。

当发生前述足以触发任务切换的中断事件时,本实施例的多任务处理器暂缓进行任务切换,并继续执行目前的任务(第一任务),直至多任务处理器执行至第一任务中的可切换点,才进行任务切换以切换执行新的任务(第二任务)。前述的可切换点可以是第一任务中,进行任务切换所需花费资源较少的地方。另外,该可切换点也可以是第一任务中,为满足即时性需求(real-time requirements)所设置的任务切换点。本领域的技术人员可以任何方式实现所述可切换点。例如,在第一任务中任务切换所需花费资源较少的地方配置某一特定指令(切换点指令),以标示所述可切换点的位置并触发多任务处理器进行「任务切换」。

值得注意的是,本实施例与下述诸实施例所称足以触发「任务切换」的事件(或是中断事件),可以是任何形式的事件。例如,该事件可以是多任务处理器外部或内部所发生的软件中断事件或硬件中断事件。又例如,该事件可以是固定周期发生的计时器事件(timer events)。以下再举另一实施例,以说明本实施例的详细实现方式。

图2A为根据本发明的一实施例的多任务处理器的任务切换方法的中断事件处理流程图。图2B为根据本发明的一实施例的多任务处理器的任务切换方法的任务切换处理流程图。图2C为根据本发明一实施例的可切换点(或切换点指令)配置示意图。图2D为根据本发明一实施例的多任务处理器的任务切换方法的时序图。图2D中横轴表示时间t。

先参照图2D,在时间T201之前,多任务处理器会载入并执行第一任务,其中第一任务会包含至少一个切换点指令。若该多任务处理器执行第一任务中,未发生中断及未执行切换点指令,则多任务处理器会继续执行第一任务。请同时参照图2A与图2D,在第一任务执行的过程中,假设于时间T201发生中断事件。此时多任务处理器会先暂停执行第一任务,并备份部份寄存器的内容,以保留中断事件的处理程序所需的部份寄存器(步骤S210)。接着执行中断事件的处理程序(步骤S211)对所有的任务(包括执行中、等待被执行以及触发中断的任务)进行重新任务调度。

若重新任务调度的结果显示第一任务的优先权为最大(步骤S212),亦即判断结果为「否」,则直接执行步骤S214以还原中断事件的处理程序所保留的寄存器而不设置切换标志。接下来于时间T202之后多任务处理器会继续执行第一任务(步骤S215)。反之,若重新任务调度的结果显示第一任务不是优先权最大的任务(步骤S212);代表有更高优先权的任务(在此假设最高优先权的任务为第二任务);在多任务处理器在完成步骤S212后,多任务处理器会设置切换标志(步骤S213),接着于时间T202之前还原中断事件的处理程序所保留的寄存器(步骤S214)。在时间T202之后,假设在时间T203之前,第一任务没有发生中断事件及执行切换点指令,多任务处理器不进行任务切换而会继续执行第一任务(步骤S215),直到第一任务中的切换点指令被执行(即图2D的时间T203)。

请参照图2B与图2D,当多任务处理器执行切换点指令时,步骤S221会检查切换标志是否已被设置。如多任务处理器未曾进行步骤S213,亦即未设置切换标志,多任务处理器执行第一任务中的切换点指令时将继续执行第一任务(步骤S215)。反之,若多任务处理器已于步骤S213设置切换标志,则多任务处理器在完成步骤S221后接着进行「内容切换(context switch)」操作后改执行第二任务;也就是说,当多任务处理器执行切换点指令时,若中断事件的处理程序中重新任务调度的结果表示多任务处理器需任务切换,则多任务处理器进行内容切换后改执行第二任务。在本实施例中,内容切换包含步骤S222、S223与S224。在步骤S222中,多任务处理器会记录堆迭点及将第一任务的执行内容存入堆迭以备份欲保留的任务执行内容。在备份完成后,多任务处理器清除切换标志(步骤S223),然后载入第二任务的执行内容(步骤S224)。在完成上述动作后,多任务处理器就已完成内容切换的操作,并于时间T204之后,改执行第二任务(步骤S225),同时第一任务就会被闲置至下一次中断事件发生或第二任务结束。于图2D中,抢先延迟时间为时间T21及T22

上述切换点指令于第一任务中的位置,可以是第一任务中使用系统资源较少的位置,亦即多任务处理器进行任务切换时需保留的寄存器数量较少的位置。请参照图2C,其横轴表示第一任务的程序执行顺序,纵轴表示多任务处理器进行任务切换时需保留的寄存器数量。一般而言,可以利用程序语言编译器进行静态分析而获得图2C所示的曲线。在配置切换点指令前,程序设计者可以利用编译器对第一任务的程序码210作静态分析,以取得程序码对寄存器的使用状态,这些仍将使用的寄存器就是多任务处理器进行任务切换时需保留的寄存器。接着编译器可以依据静态分析结果将切换点指令配置在程序码中需保留寄存器数量最少的地方(例如将切换点指令214配置在位置204),并测试是否符合抢先延迟时间限制。如果不能符合抢先延迟时间限制,编译器会放宽使用资源的限制并对配置切换点指令不足的程序码目标区段(target section)做进一步的分析,接着将切换点指令配置在此目标区段中的最佳替代点;此最佳替代点为目标区段中,多任务处理器进行任务切换时,需保留寄存器数量最少的地方,如图2C中将切换点指令211、212与213分别配置在位置201、202及203。以上述动作反复执行到第一任务程序码中两相邻切换点指令间的抢先延迟时间不会过长。为了避免在程序码中配置过多的切换点指令,使得第一任务执行的效能大幅降低,最后要再对程序码做分析,合并抢先延迟时间过短的两相邻切换点指令,以确保编译后的第一任务中的切换点指令211~214数量不会过多及切换点指令211~214各自被配置在目标区段中需保留寄存器数量最少的地方201~204。

上述切换点指令配置方式为第一种配置方式,除此之外,在此提出第二种切换点指令配置的方式。此方式为先将切换点指令配置于第一任务各个子程序(子任务)的结尾端;因子程序结束时,只会保留子程序结束运作完的结果以传递至主程序或下个子程序,故其保留寄存器数量(亦即使用系统资源)会最少。接着测试两切换点指令的配置是否满足抢先延迟时间,并根据测试结果配置额外切换点指令于最佳替代点。而所使用的测试方式与上述配置方式相同,故不再赘述。

然而,子程序的末端并非一定为保留寄存器数量最少的位置,故可依据上述方式加以变动,以符合抢先延迟时间的限制。切换点指令的第三种配置方式为先对各子程序码作静态分析,并将切换点指令配置于保留寄存器数量最少的地方,且此地方不一定为子任务的末端。接着,将整个程序作延迟时间测试以了解切换点指令配置的位置及密度是否符合延迟时间限制,如不符合,则以上述切换点指令配置方式再安插切换点指令。而在其他的实施方式中,切换点指令的配置方式可为上述第一、第二及第三种切换点指令的配置方式的组合及其他配置方式。例如,切换点指令的配置方式,也可以是在第一任务中,为满足即时性需求(real-time requirements)所设置的任务切换点。

由前述的实施例可知,本发明提出的多任务处理器于执行第一任务时;当发生一中断事件,多任务处理器即暂缓第一任务执行,改执行中断事件的处理程序。藉此,本发明仍保留对于中断事件的快速处理能力。

由前述的实施例可知,本发明提出的多任务处理器,因切换点指令配置于第一任务中使用系统资源较少的地方,使得多任务处理器在使用系统资源较少的时候执行任务切换处理,进行任务切换的时间也相对较少。

图3为根据本发明的一实施例的多任务处理器300的方块图。请参照图3,多任务处理器300包括处理单元以及切换标志350。处理单元用以执行含有一切换点指令的指令集,其中该切换点指令为特定的处理器指令。其中,该处理单元执行具有至少一切换点指令的一第一任务。当发生中断事件时,该处理单元进行该中断事件的处理程序以判断是否需要任务切换,并依据判断结果设定切换标志后,该处理单元即继续执行第一任务,直至处理单元执行第一任务中的该至少一切换点指令时检查切换标志;若切换标志表示该处理单元于进行中断事件的处理程序时判断需任务切换,则处理单元即进行任务切换而改执行第二任务;以及若切换标志表示该处理单元于进行中断事件的处理程序时判断不需任务切换,则处理单元则继续执行第一任务。

本领域的技术人员可以任何方式实现处理单元。例如,图3所示的处理单元包括指令提取级310、指令解码级320、执行级330、数据存取级340、与门AND1等。图3中并未绘出全部构件与全部信号路径(例如控制/设定信号路径等),以免图式太过繁杂。指令提取级310会循序提取任务程序码中的指令,并将指令传送到指令解码级320进行解码。当解码完成后,解码后的指令会传送到执行级330,以执行此指令。

指令解码级320包括解码器321及寄存器单元322。解码器321会将指令进行解码,以便控制执行级330依据指令进行运算。依据解码器321的解码结果,运算元会从寄存器单元322传送至执行级330,以便进行该指令的运算。完成运算后,依据解码器321的解码结果,执行级330会将运算结果写回至寄存器单元322,或是通过数据存取级340写回至数据存储器341。

于本实施例中,指令提取级310会先循序提取第一任务的程序码中的各个指令。其中,第一任务的程序码中已经配置多个切换点指令,其切换点指令的配置方式可以参照图2C及相关说明,故不再赘述。指令提取级310所提取的指令,经解码器321解码后传送到执行级330执行。

于本实施例中,多任务处理器于第一任务中每一个切换点进行任务切换时,都必需备份不同的执行内容。于本实施例中,将针对每一个切换指令建立专属的存活寄存器清单(live register list),以便记录多任务处理器进行任务切换时需要备份的寄存器。每一个切换点指令各自包含一个地址,此地址指向该切换点所对应的存活寄存器清单。以下将利用存活寄存器表(liveregister table)342记录所有的存活寄存器清单。

在本实施例中,存活寄存器表342是配置于数据存储器341中。本领域的技术人员可以任何形式实施上述存活寄存器表342。例如,图3A为根据本发明一实施例,说明图3存活寄存器表342示意图。参照图3A,因各个切换点要保留的执行内容不尽相同,故要建立多个存活寄存器清单343(例如图3A的存活寄存器清单343_1~343_n),以便为各个切换点指令记录其需要保留的寄存器信息。例如,图2C中切换点指令211要存留的寄存器信息被记录在图3A的存活寄存器清单343_1中,切换点指令212要存留的寄存器信息被记录在图3A的存活寄存器清单342_2,以下类推。以存活寄存器清单343_3为例,存活寄存器清单343_3中,其记录切换点指令213执行时(即图2C的位置203),多任务处理器进行任务切换时,所需储存备份的寄存器(0表示不储存,1表示要储存)。例如,若存活寄存器清单343_3的内容为「011...」,表示寄存器单元320中寄存器R0的内容不要储存,寄存器R1的内容要储存,寄存器R2的内容要储存,以此类推。如图3A所示,所有的存活寄存器清单343_1~343_n都会记录在存活寄存器表342中,其中存活寄存器表342的宽度m(代表系统中寄存器个数)及长度n(代表切换点指令个数)可以依系统环境的需求以及本领域通常知识者的设计而有所变动。

综上所述,请参照图3及图3A,指令提取级310会循序提取第一任务程序码中的指令,并将指令提供给解码器321解码。当执行级330接收到解码后的指令,则会依照指令的要求而产生不同的动作。寄存器单元322包含多个寄存器,用以记录多任务处理器300的执行内容。如前实施例所述,在第一任务执行的过程中,当系统于时间T201发生中断事件时(在本实施例是以第二任务触发中断),此时执行级330会执行中断事件的处理程序。在中断事件的处理程序中,执行级330先暂停第一任务的执行,且将寄存器单元322中部份寄存器的数据备份至堆迭(或是数据存储器341),以便保留中断事件的处理程序所需的寄存器。接着对所有的任务进行重新任务调度(步骤S211)。本领域的技术人员可以任何技术实施前述中断事件的处理程序与重新任务调度,例如应用现有技术来实现前述中断处理与重新任务调度。

当重新任务调度后,多任务处理器300会检视第一任务是否为最高优先权的任务(步骤S212)。当第一任务不为最高优先权的任务时,则多任务处理器300会设置切换标志350(步骤S213);相对的,当第一任务为最高优先权的任务时,多任务处理器300则重置(reset)或清除切换标志350。前述操作流程可参照图2A及其相关说明。上述步骤S211、S212、S213的操作,可以由指令解码级320、或执行级330、或多任务处理器300内部其他控制电路(未绘示)实行。

不论切换标志是否已被设置,在执行级330完成重新任务调度后,多任务处理器还原中断处理所保留的寄存器(步骤S214)。完成寄存器单元322的数据回复后,执行级330会继续执行第一任务。也就是说,多任务处理器300在完成中断事件的处理程序后不进行任务切换而继续执行第一任务,直到多任务处理器300执行至第一任务中的切换点指令。

当指令提取级310将第一任务的切换点指令送至解码器321时(即图2D的时间T203),解码器321会发出任务切换信号至与门AND1。在切换标志350尚未被设置的状态下(亦即切换标志350为逻辑「0」),解码器321所发出的任务切换信号会被与门AND1阻挡而无法到达指令提取级310。在切换标志350被设置的状态下(亦即切换标志350为逻辑「1」),解码器321所发出的任务切换信号会经由与门AND1而到达指令提取级310。指令提取级310便可以依据此一任务切换信号来决定是否继续提取第一任务程序码的指令,或是改提取任务切换程序指令以便执行第二任务程序。

因此,当指令解码级320执行切换点指令时,若切换标志350未被设置,则多任务处理器300继续执行第一任务。反之,当指令解码级320执行切换点指令时,若切换标志350被设置,则多任务处理器300进行内容切换(如图2D所示的T203~T204期间)以执行第二任务。在进行内容切换时,多任务处理器300依据目前所执行的切换点指令,从存活寄存器表342查找出对应此切换点指令的存活寄存器清单(在此假设对应为存活寄存器清单3433)。多任务处理器300会根据此切换点指令对应的存活寄存器清单内容,储存备份寄存器单元322中的存活寄存器,并将这些指定的寄存器的内容存入堆迭中(或数据存储器341中),如此就能将多任务处理器300中第一任务在时间点T203的执行内容加以备份(步骤S222)。在备份完成后,多任务处理器300清除切换标志(步骤S223),然后载入第二任务的执行内容(步骤S224),以完成任务切换。上述步骤S222、S223、S224及其他操作,可以由指令解码级320、或执行级330、或多任务处理器300内部其他控制电路(未绘示)进行,需视不同应用需求而采行不同的设计手段。

在完成任务切换后,指令提取级310会开始循序提取第二任务程序码的指令,并使多任务处理器300开始执行第二任务。前述操作流程可参照图2B及其相关说明。

在上述本发明的一实施例的多任务处理器,在完成中断事件的处理程序后不进行任务切换而继续执行第一任务,直到执行至第一任务中的切换点指令。由于切换点指令皆配置在第一任务中使用系统资源较少(亦即保留的寄存器数量较少)的位置,故当多任务处理器执行至第一任务中的切换点指令且需进行任务切换时,内容切换所需备份的寄存器数量亦较少。配置切换点指令虽会影响系统些微的效能,但对于整体程序执行时间上并不会造成明显影响。藉此,本实施例可降低多任务处理器进行任务切换的时间及消耗的功率,并可减少多任务处理器在多个任务间进行任务切换所增加的硬件成本(例如堆迭的容量)。

特别要注意的是,上述实施例所提的切换标志可内建于寄存器单元中,亦可于多任务处理器中另外设置。其内建于寄存器单元中的意思为本发明亦可以利用多任务处理器未用到的寄存器及存储器空间来实现切换标志。另外,虽然上述实施例中将每一个切换点指令所需的存活寄存器清单集中放置在存活寄存器表342中,但是其实现方式不应以此受限。例如,在其他实施例中可能将存活寄存器清单编码至对应的切换点指令中,使得存活寄存器清单可以随着切换点指令被指令提取级310提取,而不需要另外从数据存储器341中提取存活寄存器清单343。

虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,本领域的技术人员在不脱离本发明的精神和范围的前提下可作若干的更动与润饰,因此本发明的保护范围以本发明的权利要求为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号