CN117472560A - 跨多个内核的软件共享 - Google Patents
跨多个内核的软件共享 Download PDFInfo
- Publication number
- CN117472560A CN117472560A CN202310898238.XA CN202310898238A CN117472560A CN 117472560 A CN117472560 A CN 117472560A CN 202310898238 A CN202310898238 A CN 202310898238A CN 117472560 A CN117472560 A CN 117472560A
- Authority
- CN
- China
- Prior art keywords
- cpu
- memory
- address
- data
- microcontroller
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 claims abstract description 170
- 238000000034 method Methods 0.000 claims abstract description 80
- 238000012545 processing Methods 0.000 claims abstract description 39
- 230000006870 function Effects 0.000 claims description 104
- 238000013519 translation Methods 0.000 claims description 71
- 238000010586 diagram Methods 0.000 description 18
- 238000013500 data storage Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本申请公开跨多个内核的软件共享。在一个示例中,一种方法包括将执行第一应用程序的第一中央处理单元(CPU)的代码存储在存储器的第一区域中,并且将执行第二应用程序的第二CPU的代码存储在存储器的第二区域中。该方法包括将第一CPU和第二CPU的共享代码存储在存储器的第三区域中。该方法包括将第一CPU的读写数据存储在存储器的第四区域中,并且将第二CPU的读写数据存储在存储器的第五区域中。该方法包括将第一地址从第一CPU的第一专属地址空间转换到第三区域中的共享地址空间,并且将第二地址从第二CPU的第二专属地址空间转换到第三区域中的共享地址空间。
Description
相关申请的交叉引用
本申请要求美国临时专利申请第63/392549号的优先权,该申请于2022年7月27日提交,题为“OPTI-SHARE:METHOD AND SYSTEM FOR SOFTWARE SHARING ACROSS MULTIPLECORES IN AN MCU”,并且特此通过整体引用并入本文。
背景技术
高性能微控制器可以具有多个处理内核,诸如两个或四个内核。微控制器可以被体现在片上***(SOC)中。SOC可以包括在处理内核之间共享的附加硬件和软件,诸如存储器、互连件、输入/输出端口、通信硬件等。在一些SOC中,每个处理内核可以执行独立于其他处理内核的应用程序。
发明内容
根据描述的至少一个示例,一种方法包括将执行第一应用程序的第一中央处理单元(CPU)的代码存储在微控制器中的存储器的第一区域中。该方法还包括将执行第二应用程序的第二CPU的代码存储在微控制器中的存储器的第二区域中。该方法包括将第一CPU和第二CPU的共享代码存储在微控制器中的存储器的第三区域中。该方法还包括将第一CPU的读写数据存储在微控制器中的存储器的第四区域中。该方法包括将第二CPU的读写数据存储在微控制器中的存储器的第五区域中。该方法还包括将第一地址从第一CPU的第一专属地址空间转换到存储器的第三区域中的共享地址空间。该方法包括将第二地址从第二CPU的第二专属地址空间转换到存储器的第三区域中的共享地址空间。
根据描述的至少一个示例,一种方法包括用微控制器中的第一CPU执行第一功能,其中第一功能读取存储在微控制器中的第一存储器区域中的第一数据。该方法还包括用微控制器中的第二CPU执行第二功能,其中第二功能读取存储在微控制器中的第一存储器区域中的第一数据,其中第一存储器区域存储第一功能和第二功能共用的数据。该方法包括用微控制器中的第二CPU执行第三功能,其中第三功能读取存储在微控制器中的第二存储器区域中的第二数据,其中第二存储器区域存储专属于第二CPU的数据。
根据描述的至少一个示例,一种微控制器包括第一CPU和第二CPU,其中第一CPU被配置为执行第一应用程序并且第二CPU被配置为执行第二应用程序。微控制器包括被配置为存储代码和数据的存储器,其中存储器在微控制器内部,并且其中存储器具有被配置为存储第一CPU的代码的第一区域、被配置为存储第二CPU的代码的第二区域、被配置为存储第一CPU和第二CPU两者的共享代码和只读数据的第三区域、被配置为存储第一CPU的读写数据的第四区域和被配置为存储第二CPU的读写数据的第五区域。微控制器包括第一地址转换单元,其被配置为在第一CPU专属地址空间中从第一CPU接收第一地址并且将第一地址转换到存储器的第三区域中的共享存储器地址空间。微控制器还包括第二地址转换单元,其被配置为在第二专属地址空间中从第二CPU接收第二地址并且将第二地址转换到存储器的第三区域中的共享存储器地址空间。
附图说明
图1是根据各种示例的用于跨多个处理内核的软件共享的方框图示。
图2是根据各种示例的示例软件共享算法的方框图示。
图3是根据各种示例的用于识别跨多个应用程序的公共共享代码和数据的方法的流程图。
图4是根据各种示例的软件共享算法的方框图示。
图5是根据各种示例的用于地址重新映射和重新链接的表。
图6是根据各种示例的用于识别跨多个应用程序的公共共享代码和数据的方法的流程图。
图7是根据各种示例的用于跨微控制器中的多个处理内核的软件共享的示例***的方框图示。
图8是根据各种示例的地址转换逻辑的方框图示。
图9是根据各种示例的微控制器的方框图示。
图10是根据各种示例的用于软件共享的方法的流程图。
图11是根据各种示例的用于软件共享的方法的流程图。
图12是根据各种示例的计算机***的方框图示。
在附图中使用相同的参考数字或其他参考指示符来表示(功能上和/或结构上)相同或相似的特征。
具体实施方式
微控制器单元(MCU)是位于集成电路(IC)芯片上的计算机。许多MCU是为特定目的开发的低成本单元,诸如汽车或工业应用中的嵌入式***。MCU可以具有多个中央处理单元(CPU)内核以满足计算要求,诸如两个内核、四个内核、八个内核等。MCU还可以具有片上存储器,诸如片上随机存取存储器(RAM)。由于成本的原因,片上RAM或其他存储器的数量通常是有限的。在MCU中,由处理内核执行的应用程序通常在个人计算机上开发。每个处理内核可以执行不同的应用程序,并且MCU的使用情况可以是固定的。固定的使用情况意味着应用程序被开发并加载到MCU上,然后应用程序很少更新。每个应用程序可以使用公共软件库和功能,诸如相同的实时操作***(RTOS)、相同的直接存储器访问(DMA)驱动器、相同的联网堆栈等。MCU通常不具有存储器管理单元(MMU)。因此,处理内核不具有经由MMU使用虚拟地址空间的能力;相反,处理内核使用现有片上RAM的物理地址空间。
即使每个处理内核执行独立的应用程序,应用程序的一些代码或只读数据也可能跨一个以上的应用程序重复。然后,这种重复的代码和/或数据被多次存储在RAM上,因此它可以被对应的处理内核和正在执行的相关联的应用程序访问。然而,在有限的内部存储器的情况下,在某些使用情况中,MCU可能会出现存储器不足。多次存储相同的代码或数据是有限的MCU存储器的低效使用。
在本文的示例中,分析要在每个处理内核上执行的应用程序,以识别应用程序之间的公共共享代码和/或数据段。本文中使用的术语“数据”也可以指代码。软件或算法可以用于分析应用程序并找到公共代码和/或数据。在分析应用程序或应用程序二进制文件之后,可以创建新的二进制文件。新的二进制文件可以包括:不包括公共代码/数据的每个处理内核的专属二进制文件;以及包括共享代码、两个或更多个处理内核共用的只读数据和共享读写数据的二进制文件。在分析应用程序之后,可以更新引导加载器(bootloader)以加载每个处理内核的专属代码/数据,一次加载共享代码和只读数据,并且多次加载读写数据,每个处理内核一次。通过一次而不是多次加载共享代码和只读数据,可以减少存储器使用。减少的数量取决于应用程序之间存在多少共享代码/数据。
新的二进制文件可以被映射到内部存储器中的公共共享存储器空间。在操作期间,MCU可以利用低延迟硬件转换来将地址从每个处理内核的CPU专属地址空间转换到共享存储器地址空间。查找表或比较器可以使用地址的1:1映射来执行地址转换。硬件转换逻辑在某些示例中可能是有用的。地址转换硬件可以耦合到每个处理内核。利用这种地址转换方案,不需要存储器管理单元(MMU),并且本文的示例可以在MCU上实施。在其他示例中,存储器可以是外部存储器,并且任何类型的存储器在本文描述的示例中都可能是有用的。
图1是根据本文的各种示例的用于跨多个处理内核的软件共享的方框图示100。图示100包括微控制器的示例硬件部件和存储器使用的两个示例:一个没有软件共享,而一个有软件共享。图示100包括CPU1 102A和CPU2 102B(统称为CPU 102)。CPU 102在本文中也可以被称为处理器内核102。在该示例中,示出了两个CPU 102,但是其他示例可以包括更多的CPU 102,诸如四个或八个CPU 102。每个CPU 102是执行应用程序的处理器内核。CPU 102耦合到互连件104,互连件104耦合到RAM 106。RAM 106是被配置为存储在CPU 102执行应用程序期间由CPU 102经由互连件104访问的代码和/或数据的存储器。在本文的示例中,RAM106也可以被称为存储器106。在一些示例中,存储器106可以是不同于RAM的存储器类型。在本文描述的示例中,存储器106可以是内部存储器或外部存储器,或者两者的组合。存储器106可以是任何类型的存储器。存储器106可以是静态RAM(SRAM)、动态RAM(DRAM)、闪存存储器或任何类型的非易失性存储器。在一些示例中,存储器106还可以是外部闪存、外部DRAM、双倍数据速率(DDR)存储器等。
图示100还示出了RAM 106内的示例数据存储方案。数据存储方案108A示出了在没有软件共享的情况下存储在RAM 106中的数据。数据存储方案108B示出了根据本文的各种示例的在具有软件共享的情况下存储在RAM 106中的数据。在没有软件共享的数据存储方案108A中,为CPU1 102A存储在RAM 106中的代码和数据包括代码110A(代码A)、公共代码/数据110B(代码B)、只读(RO)数据110C和读写(RW)数据110D。代码110A是专属于由CPU1102A执行的应用程序的代码。公共代码/数据110B包括非专属的并且也由另一CPU(诸如CPU2 102B)执行的应用程序共用的代码和/或数据。RO数据110C是专属于CPU1 102A的RO数据。RW数据110D是专属于CPU1 102A的RW数据。
在数据存储方案108A中,为CPU2 102B存储类似类型的代码和数据。为CPU2 102B存储在RAM 106中的代码和数据包括代码112A(代码C)、公共代码/数据112B(代码B)、RO数据112C和RW数据112D。代码112A是专属于由CPU2 102B执行的应用程序的代码。公共代码/数据112B(代码B)包括非专属的并且与为CPU1 102A存储的公共代码/数据110B(代码B)相同的代码和/或数据。RO数据112C是专属于CPU2 102B的RO数据。RW数据112D是专属于CPU2102B的RW数据。
数据存储方案108A示出一些代码/数据被重复并多次存储在RAM 106中(例如,公共代码/数据110B和112B(代码B))。重复该代码/数据并将其多次存储在RAM 106中占用了RAM 106中原本可以使用的空间,这些空间在可能具有有限存储器的微控制器中是有用的。数据存储方案108B示出了在具有软件共享的情况下存储在RAM 106中的数据,这释放了存储器空间。在数据存储方案108B中,为CPU1 102A存储在RAM 106中的代码和数据包括代码114A(代码A)、RO数据114B、RW数据114C和公共代码/数据114D(代码B)。代码114A是专属于由CPU1 102A执行的应用程序的代码。RO数据114B是专属于CPU1 102A的RO数据。RW数据114C是专属于CPU1 102A的RW数据。最后,公共代码/数据114D(代码B)是由CPU1 102A和CPU2 102B两者共享的代码和/或数据。
在数据存储方案108B中,为CPU2 102B存储在RAM 106中的代码和数据包括代码116A(代码C)、RO数据116B和RW数据116C。代码116A是专属于由CPU2 102B执行的应用程序的代码。RO数据116B是专属于CPU2 102B的RO数据。RW数据116C是专属于CPU2 102B的RW数据。在该示例中,CPU2102B的公共代码/数据不重复且不存储两次。相反,CPU2 102B在应用程序的执行期间根据需要访问公共代码/数据114D(代码B)。通过不重复公共代码/数据114D(代码B),在RAM 106中创建了空闲空间116D。因此,通过如本文示例中所述的软件共享,可以在RAM 106中释放存储器空间。
在该示例中,示出了两个CPU 102。在其他示例中,在微控制器中可以存在两个以上的CPU 102。在本文的示例中,可以针对微控制器中的任意两个或更多个CPU 102来实施软件共享。例如,如果存在四个CPU 102,则可以分析由四个CPU 102执行的应用程序,并且可以将所有四个CPU 102共用的代码/数据存储在存储器的第一区域中。在相同微控制器中,如果找到四个CPU 102中的仅两个CPU共用的代码/数据,则这两个CPU 102共用的代码/数据可以被存储在存储器的第二区域中。如果找到四个CPU 102中的仅三个CPU共用的代码/数据,则这三个CPU 102共用的代码/数据可以被存储在存储器的第三区域中。在本文的示例中,存储器可以被划分为任意数量的区域,以用于存储CPU 102的任意组合共用的代码/数据。如上所述,每个CPU 102还具有专用于该CPU 102的针对代码、RO数据和RW数据的专用存储器区域。
图2是根据本文的各种示例的软件共享算法的方框图示200。图示200示出了一个示例软件共享算法202的输入和输出,该算法可以是编译器或其他程序开发工具的一部分。在该示例中,软件共享算法202接收两个输入并产生四个输出。在其他示例中,可以存在更多的输入和输出。例如,可以向软件共享算法202提供两个以上的应用程序二进制文件。软件共享算法202可以在任何合适的计算平台(诸如个人计算机)上执行。
首先,软件共享算法202接收将由微控制器中的处理器内核执行的应用程序的二进制文件。在该示例中,微控制器具有两个处理器内核(CPU1 102A和CPU2 102B)。CPU1二进制文件204和CPU2二进制文件206被提供给软件共享算法202。二进制文件可以包括存储器106中的用于每个CPU 102的专属地址空间。二进制文件还可以包括符号表信息。符号表是由编译器创建和维护的数据结构,用于跟踪变量的语义。符号表存储关于各种实体的实例的信息,诸如变量和功能名称、类别、对象等。在该示例中,软件共享算法202接收二进制文件和任何其他应用程序信息并产生四个输出。下面提供软件共享算法202的一个示例操作的描述。
软件共享算法202接收N个应用程序二进制文件(其中N是整数),并通过检测可以在应用程序之间共享的重复代码和/或数据来产生N+1个二进制文件。N+1个二进制文件包括具有用于每个应用程序的专属代码/数据的N个二进制文件,以及包含共享代码、共享RO数据和共享RW数据的一个二进制文件。二进制文件可以被映射到RAM 106中的公共共享存储器地址空间。作为一个示例,软件共享算法202产生CPU1二进制文件208、CPU2二进制文件210和共享二进制文件212。CPU1二进制文件208包括专属于CPU1二进制文件204的代码/数据,并且不包括任何公共代码/数据。CPU2二进制文件210包括专属于CPU2二进制文件206的代码/数据,并且不包括任何公共代码/数据。共享二进制文件212包括共享代码和RO数据214以及共享RW数据216。在软件共享算法202创建新的二进制文件之后,由软件共享算法202提供的代码/数据被存储在微控制器的存储器106中的特定存储器区域中,如图1所示。如下所述,在由微控制器执行应用程序期间,可以对存储在存储器106中的一些代码/数据执行地址转换。
图3是根据本文的各种示例的用于识别跨多个应用程序的公共共享代码和数据的方法300的流程图。方法300是软件共享算法(诸如软件共享算法202)的一个示例。下面参考图4和图5描述识别公共共享代码和数据的附加细节。方法300的步骤可以以任何合适的顺序来执行。在一些示例中,任何合适的硬件或数字逻辑都可以执行方法300。在一个示例中,下面关于图12描述的硬件可以被编程或被配置为执行指令,该指令使得处理器执行如本文关于图3-图6描述的软件共享算法。
方法300从310处开始,在310处分析每个CPU二进制文件以针对每个CPU二进制文件创建功能加全局符号调用图。调用图识别CPU二进制文件中的功能和数据之间的依赖关系。如果相同的功能或全局符号出现在两个不同的CPU二进制文件中,那么该功能和全局符号作为识别两个CPU二进制文件之间的公共共享代码/数据的起点可能是有用的。此步骤针对每个CPU二进制文件来执行。如上所述,可以分析两个以上的CPU二进制文件。如果分析了两个以上的CPU二进制文件,则在310处可以找到所有CPU二进制文件共用的功能或全局符号。方法300也可以识别少于所有CPU二进制文件共用(诸如仅CPU二进制文件中的两个、三个或四个共用)的功能或全局符号。
在针对每个CPU二进制文件确定了功能加全局符号调用图之后,方法300在320处继续,在320处识别公共子图。子图是调用图的较小部分,并且对这些子图进行分析以找到共性。公共子图有助于细化CPU二进制文件之间潜在的公共共享代码/数据。作为一个示例,如果跨两个CPU二进制文件的符号名称是相同的,则可能存在公共子图。分析与该符号名称相关联的功能或数据引用。如果功能或数据引用不匹配,则该符号不是共享代码/数据的示例。如果功能或数据引用匹配,则该符号可能是共享代码/数据的示例。因此,在320处,方法300分析在310中找到的公共代码/数据起点,并细化该分析以确定跨CPU二进制文件是否实际存在公共共享代码/数据。
方法300前进到330,在330处,对于公共子图中的每个功能和全局数据,分析二进制文件指令和数据值以找到匹配。如果子图匹配,则代码/数据可能不是公共的,因为功能可能执行不同的局部指令,或者可能使用不同的初始化数据值。在这些情况下,子图之间不存在公共代码/数据。在330处,方法300进一步细化潜在的公共代码/数据,以确定跨所分析的CPU二进制文件是否存在共享代码/数据。在一些示例中,在确定是否找到匹配时,可以忽略在调用图中识别的指令或功能中的地址。跨CPU的公共代码中引用的地址可能不同,因为每个CPU二进制文件都具有CPU专属地址空间,但公共代码将在存储器中被存储一次。地址转换过程将在在CPU上执行应用程序期间将CPU专属地址转换为共享存储器地址空间中的正确地址。因此,调用图中的地址可能不匹配,但功能和数据可能指示公共代码。在330处找到共享代码/数据的最终集合。
方法300前进到340,在340处编译器接收跨CPU二进制文件的共享代码/数据。编译器将所有公共代码、RO数据和共享RW数据转换并布置到存储器106中的共享地址空间。此外,编译器将CPU专属代码/数据转换并布置到每个CPU的CPU专属地址空间。每个CPU的二进制文件都用新的地址进行更新。公共代码节段包括共享代码和数据,并且如果原始应用程序访问公共代码,则应用程序跳转到存储器106中的共享地址空间中存储公共代码的位置。因此,只存储公共代码的一个副本。在该步骤之后,可以对实时地址转换进行编程。
在340之后,更新的引导加载器一次加载CPU专属代码/数据,一次加载共享代码/RO数据并且多次加载共享RW数据,每个CPU一次。引导加载器更新地址转换单元,使得CPU专属地址空间和共享地址空间映射到存储器106中的实际物理存储器地址空间。作为一个示例,由CPU执行的应用程序的调用图可以包括跳转到原始地址(例如,CPU专属地址空间中的地址)的指令。地址转换单元在共享代码区域中编码新的地址,以代替原始地址。在一些示例中,地址转换单元可以是查找表或比较器。
图4是根据本文的各种示例的软件共享算法的方框图示400。图4包括三个步骤:步骤一402、步骤二404和步骤三406。步骤一402类似于上面的310,其中每个CPU二进制文件被分析以针对每个CPU二进制文件创建功能加全局符号调用图。在该示例中,分析了两个二进制文件,并且在图4中示出了示例调用图。调用图识别CPU二进制文件中的功能和数据之间的依赖关系。
步骤一402在左边示出针对CPU1 102A的调用图,并且在右边示出针对CPU2 102B的调用图。针对CPU1 102A的调用图包括功能F1 408、功能A410、RO数据D0 412和RW数据D1414。针对CPU2 102B的调用图包括功能F1 416、功能B 418、RO数据D0 420和RW数据D1 422。如上所述,如果相同的功能或全局符号出现在两个不同的CPU二进制文件中,那么该功能和全局符号作为识别两个CPU二进制文件之间的共用共享代码/数据的起点可能是有用的。在该示例中,功能F1对两个调用图来说是共用的(例如408和416)。此外,RO数据D0对两个调用图来说是共用的(412和420),并且RW数据D1对两个调用图来说是共用的(414和422)。因此,功能F1、RO数据D0和RW数据D1可以被选择作为识别两个二进制文件之间的共用共享代码/数据的起点。
步骤二404示出了在步骤一402中识别的共用共享代码/数据(例如,公共子图)。公共子图包括功能F1 408、RO数据D0 412和RW数据D1 414。在该示例中示出了一个公共子图,但是在其他示例中可以存在任何数量的公共子图。
步骤三406示出了类似于上述330的二进制文件匹配步骤。对于在步骤二404中识别的公共子图中的每个功能和全局数据,分析二进制文件指令和数据值以找到匹配。如果在步骤三406中确定了共享代码/数据,则可以收集共享代码/数据以供编译器使用共享地址空间来转换和布置新的二进制文件。编译器将所有公共代码、RO数据和共享RW数据转换并布置到存储器106中的共享地址空间。此外,编译器将CPU专属代码/数据转换并布置到每个CPU的CPU专属地址空间。
图5是根据本文的各种示例的用于地址重新映射和重新链接的示例表500。在一个示例中,表500可以由以上关于图4描述的步骤产生。表500包括五个列。列502包括上面图4中识别的针对各种功能和数据的符号名称。列504指示针对各种符号的共享地址空间的位置。列506指示针对符号的CPU1加载地址。列508指示针对符号的CPU2加载地址。列510是针对该列中的每一行的描述符。
在表500中,第一行512示出了符号A(例如,功能A410)。如上关于图4所述,功能A410在CPU1调用图中找到,但在CPU2调用图中没有找到。功能A410是专属于CPU1的代码。功能A410的共享地址空间是0x1000。CPU1加载地址也是0x1000。在列508中,CPU2加载地址是不适用(NA),因为功能A410专属于CPU1。
第二行514示出了符号B(例如,功能418)。如上关于图4所述,功能B 418在CPU2调用图中找到,但在CPU1调用图中没有找到。功能B 418是专属于CPU2的代码。功能B 418的共享地址空间是0x2000。在列506中,CPU1加载地址是NA,因为功能B 418专属于CPU2。CPU2加载地址也是0x2000(列508)。在该示例中,在共享存储器地址空间中,CPU1的专属代码位于0x1000,并且CPU2的专属代码位于0x2000。
第三行516示出了符号F1(例如,功能408和416)。如图4所示,功能F1对CPU1和CPU2来说是共用的。功能F1的公共代码在0x3000处开始存储。因为此代码对两个CPU来说是共用的,所以CPU1加载地址和CPU2加载地址是相同的,并且也是0x3000。
第四行518示出了符号D0(412和420)。D0是在图4中找到的公共RO数据。在针对CPU1的调用图和针对CPU2的调用图两者中都找到了该RO数据D0。在0x4000处开始存储RO数据D0的公共代码。CPU1加载地址和CPU2加载地址也是0x4000。
第五行520示出了符号D1(414和422)。D1是在图4中找到的公共RW数据。在针对CPU1的调用图和针对CPU2的调用图两者中都找到了该RW数据D1。在0x5000处开始存储RW数据D1的公共代码。因为这是RW数据,所述CPU1和CPU2具有不同的加载地址,因为这些数据可以在应用程序的执行期间由CPU独立写入。如表500所示,CPU1加载地址(列506)是0x5000。CPU2加载地址(列508)是0x6000。因此,针对每个CPU重复并存储RW数据,因此每个CPU具有专属加载地址。
表500示出了功能F1和RO数据D0的公共代码被一次存储在共享存储器空间中,并且可以由CPU1或CPU2访问。通过仅一次存储该公共代码和数据,可以在存储器106中节省空间。在其他示例中,可以为两个以上的CPU创建两个以上的调用图,并且可以跨CPU的任何组合来确定公共代码和数据。
图6是根据本文的各种示例的用于识别跨多个应用程序的公共共享代码和数据的方法600的流程图。方法600是软件共享算法(诸如软件共享算法202)的一个示例。方法600的步骤可以以任何合适的顺序来执行。在一些示例中,任何合适的硬件或数字逻辑都可以执行方法600。在一个示例中,在个人计算机上执行的软件程序可以执行方法600。
方法600从610处开始,在610处针对第一应用程序创建第一调用图,第一应用程序被配置为在第一处理器内核上执行。在该示例中,第一调用图包括第一功能和第一数据。如上关于图4所述,针对要在第一CPU上执行的第一应用程序的调用图可以包括功能F1 408和RO数据D0 412。
方法600在620处继续,在620处针对第二应用程序创建第二调用图,第二应用程序被配置为在第二处理器内核上执行。在该示例中,第二调用图包括第二功能和第二数据。如上关于图4所述,针对要在第二CPU上执行的第二应用程序的调用图可以包括功能F1 416和RO数据D0 420。
方法600在630处继续,在630处在第一调用图和第二调用图之间识别公共子图。在该示例中,公共子图包括第一功能、第二功能、第一数据和第二数据。可以通过确定功能F1408具有与功能F1 416相同的名称来识别公共子图。此外,数据D0 412可以与数据D0 420相同。可以通过分析针对要由CPU执行的应用程序的各种调用图中的功能和数据来确定公共子图。
方法600在640处继续,在640处程序确定第一功能中的指令是否与第二功能中的指令匹配,并且确定第一数据是否与第二数据匹配。上面在方法300的330中描述的过程提供了分析二进制文件指令和数据值以找到匹配的一个示例。可以针对在公共子图中找到的每个功能和数据执行该分析。
方法600在650处继续,在650处响应于确定第一功能中的指令与第二功能中的指令匹配,并且第一数据与第二数据匹配,编译器创建具有匹配功能和匹配数据的二进制文件。上面在方法300的340中描述的过程提供了该过程的一个示例。在一个示例中,编译器接收跨CPU二进制文件的共享代码/数据。编译器将所有公共代码、RO数据和共享RW数据转换并布置到存储器106中的共享地址空间。此外,编译器将CPU专属代码/数据转换并布置到每个CPU的CPU专属地址空间。每个CPU的二进制文件都用新的地址进行更新。此外,在该步骤之后,可以对实时地址转换进行编程。
图7是根据本文的各种示例的用于跨微控制器中的多个处理内核的软件共享的示例***700的方框图示。在一个示例中,***700可以包括微控制器中的部件。***700中的部件可以执行本文所述的示例。***700包括CPU1 102A、CPU2 102B、互连件104和存储器106。以上关于图1描述了这些部件。***700还包括地址转换单元702A和702B(统称为地址转换单元702)。在该示例中,存储器106包括各种区域。存储器106内的区域可以被分配用于存储不同类型的代码和/或数据。第一区域704存储专属于CPU1 102A的代码/数据。第二区域706存储专属于CPU2 102B的代码/数据。第三区域708存储CPU1 102A和CPU2 102B两者共用的共享代码和RO数据。第四区域710存储用于CPU1 102A的RW数据。第五区域712存储用于CPU2 102B的RW数据。
如上关于图5所述,专属于CPU1 102A的代码/数据可以在第一地址(例如,0x1000或区域704)处开始。专属于CPU2 102B的代码/数据可以在第二地址(例如,0x2000或区域706)处开始。两个CPU的共享代码可以在第三地址(例如0x3000)处开始。两个CPU的共享RO数据可以在第四地址(0x4000)处开始。在图7的示例中,共享代码和RO数据被示出为都在区域708中找到。在其他示例中,共享代码和RO数据可以具有不同的区域。用于CPU1 102A的RW数据可以在第五地址(0x5000或区域710)处开始。用于CPU2 102B的RW数据可以在第六地址(0x6000或区域712)处开始。
再次参考图7,针对存储器106示出了五个区域。然而,在其他示例中,任何数量的区域都可能是有用的。如果存在两个以上的CPU,则可以为所有CPU共用的代码/数据或CPU的子组共用的代码/数据指定其他区域。在一些示例中,存储器106可以是RAM或闪存存储器。在一些示例中,存储器106可以具有多级存储器,诸如L1、L2、L3等。
在操作中,***700提供确定性低延迟地址转换。在一些示例中,地址转换单元702可以是查找表或比较器。地址转换单元702将地址从CPU专属地址空间转换到共享代码/数据地址空间(例如,区域708)。在一些示例中,地址转换可能需要一到两个时钟周期。地址转换单元可以使用任何合适的硬件、软件、数字逻辑或数字电路***来执行地址转换。在一个示例中,地址转换逻辑将传入地址转换为传出地址。对于不需要转换的地址,诸如在区域704和706内的CPU专属代码/数据的地址,可以实施直通机制。在一个示例中,地址转换逻辑可以定义从起点A到终点B的地址区域。如果地址落在A和B之间的范围内,则地址转换逻辑转换该地址。可以指定多个地址区域进行转换。在一个示例中,可以用查找表来执行确定性的低延迟转换,诸如在一个或两个时钟周期内。在一些示例中,这些地址区域之外的地址可以在没有转换的情况下通过。
图8是根据本文的各种示例的地址转换逻辑的方框图示800。图示800包括地址转换逻辑802和区域配置804。在一些示例中,图示800中的部件可以在地址转换单元(诸如地址转换单元702A和/或702B)中找到。在一个示例中,可以实施查找表或比较器来执行地址转换。区域配置804可以包括诸如输入地址、输出地址、区域大小和区域控制(诸如区域的开始和完成位置)之类的信息。这里示出了一个区域配置804的细节作为示例;然而,如本文所述,可以定义用于地址转换的多个区域。针对每个区域存储的信息可以包括输入地址、输出地址、区域大小等。
在一个示例中,传入CPU事务806由地址转换逻辑802接收。地址转换逻辑802确定与传入CPU事务806相关联的地址,并确定是否执行地址转换。如上所述,如果地址在需要转换的地址的区域内,则地址转换逻辑802可以接收输入地址并确定输出地址。在一个示例中,可以在查找表中找到输出地址。地址转换逻辑802执行转换以确定输出地址,然后提供包括用于存储器106中的共享存储器地址空间的输出地址的传出事务808。
如果传入CPU事务806中的地址不需要转换,则地址转换逻辑802做出该确定,然后在不执行地址转换的情况下使该事务通过。在一个示例中,由CPU专属代码执行的指令可能不需要转换。
图9是根据本文的各种示例的微控制器900的方框图示。微控制器900是执行本文所述的示例的微控制器的一个示例。在一个示例中,***700可以被并入到微控制器900中。在该示例中,微控制器900包括两个或更多个处理器内核102。微控制器900可以包括任意数量的处理器内核102,诸如2个、4个或8个。微控制器900包括上面描述的互连件104和存储器106。微控制器900包括地址转换单元702。在一些示例中,针对每个处理器内核102包括一个地址转换单元702。在其他示例中,专用处理器内核102(诸如隔离内核)可以被包括在微控制器900中。
微控制器900还包括用于外部连接的输入/输出(I/O)902硬件,诸如以太网、内部集成电路(I2C)、控制器局域网(CAN)、串行***接口(SPI)、通用异步接收器-发射器(UART)等。微控制器900还包括***服务904,诸如功率管理、除错、防火墙、直接存储器访问(DMA)、错误控制编码(ECC)、错误信号模块(ESM)等。微控制器900包括感测装置906,该感测装置可以包括比较器子***、模数转换器(ADC)、数模转换器(DAC)、编码器模块、西格玛-德尔塔滤波器模块(SDFM)、脉冲宽度调制器(PWM)等。微控制器900还包括安全装置908,该安全装置可以包括诸如安全引导、安全散列算法(SHA)、公钥加速器(PKA)、随机数生成器(RNG)等部件。微控制器900中的部件仅仅是示例,并且在一些示例中其他微控制器可以包括更多或更少的部件。
在一个示例中,微控制器900包括CPU1 102A和CPU2 102B,其中CPU1102A被配置为执行第一应用程序,并且CPU2 102B被配置为执行第二应用程序。微控制器900包括被配置为存储代码和数据的存储器106。存储器106具有被配置为存储CPU1 102A的代码的第一区域、被配置为存储CPU2 102B的代码的第二区域、被设置为存储CPU1 102A和CPU2 102B两者的共享代码和只读数据的第三区域、被配置为存储CPU1 102A的读写数据的第四区域和被配置为存储CPU2 102B的读写数据的第五区域。在具有两个以上的处理内核的其它示例中,存储器106可以包括被配置为存储专属于其它处理内核的代码/数据或者处理内核的其他组合共用的代码/数据的区域。
在一个示例中,微控制器900还包括第一地址转换单元702A,该第一地址转换单元被配置为在第一CPU专属地址空间中从CPU1 102A接收第一地址,并且将第一地址转换到存储器的第三区域中的共享存储器地址空间。微控制器900还包括第二地址转换单元702B,该第二地址转换单元被配置为在第二专属地址空间中从CPU2 102B接收第二地址,并且将第二地址转换到存储器的第三区域中的共享存储器地址空间。
图10是根据本文的各种示例的用于软件共享的方法1000的流程图。方法1000的步骤可以以任何合适的顺序来执行。在一些示例中,任何合适的硬件或数字逻辑都可以执行方法1000。在一些示例中,微控制器(诸如微控制器900)可以执行方法1000。
方法1000从1010处开始,在1010处编译器或其他合适的部件将执行第一应用程序的第一CPU的代码存储在微控制器中的存储器的第一区域中。在一个示例中,第一CPU可以是CPU1 102A。第一应用程序可以是由CPU1 102A执行的任何应用程序或功能或子功能。存储器的第一区域可以是如上所述的第一区域704。
方法1000在1020处继续,在1020处编译器将执行第二应用程序的第二CPU的代码存储在微控制器中的存储器的第二区域中。在一个示例中,第二CPU可以是CPU2 102B。第二应用程序可以是由CPU2 102B执行的任何应用程序或功能或子功能。存储器的第二区域可以是如上所述的第二区域706。
方法1000在1030处继续,在1030处编译器将第一CPU和第二CPU的共享代码存储在微控制器中的存储器的第三区域中。存储器的第三区域可以是如上所述的第三区域708。共享代码可以通过本文所述的过程来确定,诸如上面关于图3、图4、图5和图6描述的示例。在另一示例中,编译器还可以将第一CPU和第二CPU的共享只读数据存储在存储器的第三区域中。
方法1000在1040处继续,在1040处编译器将第一CPU的读写数据存储在微控制器中的存储器的第四区域中。存储器的第四区域可以是如上所述的第四区域710。
方法1000在1050处继续,在1050处编译器将第二CPU的读写数据存储在微控制器中的存储器的第五区域中。存储器的第五区域可以是如上所述的第五区域712。
方法1000在1060处继续,在1060处第一地址转换单元将第一地址从第一CPU的第一专属地址空间转换到存储器的第三区域中的共享地址空间。第一地址转换单元可以包括如本文所述的任何合适的硬件或逻辑,诸如查找表或比较器。在一个示例中,第一地址转换单元可以是地址转换单元702A。
方法1000在1070处继续,在1070处第二地址转换单元将第二地址从第二CPU的第二专属地址空间转换到存储器的第三区域中的共享地址空间。第二地址转换单元可以包括如本文所述的任何合适的硬件或逻辑,诸如查找表或比较器。在一个示例中,第二地址转换单元可以是地址转换单元702B。
图11是根据本文的各种示例的用于软件共享的方法1100的流程图。方法1100的步骤可以以任何合适的顺序来执行。在一些示例中,任何合适的硬件或数字逻辑都可以执行方法1100。在一些示例中,微控制器(诸如微控制器900)可以执行方法1100。
方法1100从1110处开始,在1110处微控制器中的第一CPU执行第一功能,其中第一功能读取存储在微控制器中的第一存储器区域中的第一数据。在一个示例中,微控制器可以是微控制器900,并且在一个示例中,第一CPU可以是CPU1 102A。在一个示例中,第一功能可以是由CPU1 102A执行的任何应用程序或子功能。在一个示例中,第一存储器区域可以是第三区域708。第一存储器区域可以存储CPU1 102A和CPU2 102B两者共用的数据和/或代码。在一个示例中,执行第一功能包括将地址从第一CPU专属地址空间转换到第一存储器区域中的共享地址空间。在一个示例中,地址可以由任何合适的地址转换单元进行转换。
方法1100在1120处继续,在1120处微控制器中的第二CPU执行第二功能,其中第二功能读取存储在微控制器中的第一存储器区域中的第一数据,其中第一存储器区域存储第一功能和第二功能共用的数据(例如,共享地址空间)。在一个示例中,第二CPU可以是CPU2102B。在一个示例中,第二功能可以是由CPU2 102B执行的任何应用程序或子功能。
方法1100在1130处继续,在1130处第二CPU执行第三功能,其中第三功能读取存储在微控制器中的第二存储器区域中的第二数据。第二存储器区域存储专属于第二CPU的数据。在一个示例中,第三功能可以是由CPU2 102B执行的任何应用程序或子功能。在一个示例中,第二存储器区域可以是第二区域706。
图12是根据本文的各种示例的计算机***1200的方框图示。***1200包括用于执行如本文所述的软件共享算法的硬件部件。***1200可以是例如个人计算机、工作站、膝上型计算机或笔记本计算机,或者被配置用于执行本文所述的功能(特别是与本文中关于图3、图4和图6所述的软件共享算法相关的那些功能)的其他计算***。
***1200可以包括一个或多个处理器1202和一个或多个存储器1204。存储器1204可以包括任何合适的数据、代码、逻辑或指令1206。处理器1202被配置为读取并执行计算机可读指令。例如,处理器1202被配置为调用并执行存储在存储器1204中的程序中的指令(包括指令1206)。在一个示例中,指令1206可以执行如本文所述的软件共享算法。在一个示例中,存储器1204可以与处理器1202集成。存储器1204被配置为存储各种软件程序和/或多组指令(包括指令1206)。存储器1204可以包括一个或多个存储设备。例如,存储器1204包括高速随机存取存储器和/或可以包括非易失性存储器,诸如一个或多个盘存储设备、闪存存储器、另一个非易失固态存储设备或伪静态随机存取存储器(PSRAM)。存储器1204可以存储OS,诸如ANDROID、IOS、WINDOWS或LINUX。存储器1204可以进一步存储网络通信程序。网络通信程序对于执行与一个或多个附接设备、一个或多个用户设备或一个或多个网络设备的通信是有用的。存储器1204可以进一步存储用户接口程序。用户接口程序通过图形界面显示应用程序的内容,并且经由输入控件(诸如菜单、对话框或物理输入设备(未示出))接收用户在应用程序上执行的数据或操作。存储器1204被配置为存储用于实施根据本描述的各种示例提供的各种方法和过程的指令1206。
在另一个示例中,本文公开的***1200的元件可以使用存储在非瞬态介质(诸如存储器1204)中的专用硬件和指令的任何组合。非瞬态介质包括除信号之外的所有电子介质或存储介质。处理器1202可以包括一个或多个微控制器、专用集成电路(ASIC)、CPU、图形处理单元(GPU)和/或被配置为执行存储在介质上的指令1206的其他处理资源。合适的非瞬态计算机可读介质的示例包括一个或多个闪存存储器设备、电池支持的RAM、固态驱动器(SSD)、硬盘驱动器(HDD)、光学介质和/或适合于存储处理器1202的指令1206的其他存储器设备。
在本文的示例中,分析要在每个处理内核上执行的应用程序,以识别应用程序之间的公共共享代码和/或数据段。自动化软件算法对于分析应用程序和找到公共代码和/或数据可能是有用的。在分析应用程序或应用程序二进制文件之后,可以创建新的二进制文件。新的二进制文件可以包括:不包括公共代码/数据的每个处理内核的专属二进制文件;以及包括共享代码、两个或更多个处理内核共用的只读数据和共享读写数据的二进制文件。在分析应用程序之后,可以更新引导加载器以加载每个处理内核的专属代码/数据,一次加载共享代码和只读数据,并且多次加载读写数据,每个处理内核一次。通过一次而不是多次加载共享代码和只读数据,可以减少存储器使用。
在操作期间,MCU可以利用低延迟硬件转换来将地址从每个处理内核的CPU专属地址空间转换到共享存储器地址空间。查找表或比较器可以使用地址的1:1映射来执行地址转换。在一个示例中,地址转换硬件可以耦合到每个处理内核。利用地址转换方案,不需要MMU,并且本文的示例可以在MCU上实施。
术语“耦合”贯穿整个说明书。该术语可以涵盖能够实现与本说明书一致的功能关系的连接、通信或信号路径。例如,如果设备A生成信号以控制设备B执行动作,则在第一示例中,设备A耦合到设备B,或者在第二示例中,如果介入部件C基本上不改变设备A和设备B之间的功能关系,则设备A通过介入部件C耦合到设备B,使得设备B由设备A经由设备A生成的控制信号来控制。
被“配置为”执行任务或功能的设备可以在制造时由制造商配置(例如,编程和/或硬接线)以执行该功能,和/或可以在制造后由用户可配置(或可重新配置)以执行该功能和/或其他附加或替代功能。配置可以通过设备的固件和/或软件编程、通过设备的硬件部件和互连件的构造和/或布局或其组合来实现。
在本说明书中,除非另有说明,否则参数前面的“大约”、“近似”或“基本上”表示在该参数+/-10%以内。在权利要求的范围内,在所描述的实施例中进行的修改是可能的,并且其他实施例也是可能的。
Claims (20)
1.一种方法,包括:
将执行第一应用程序的第一中央处理单元即第一CPU的代码存储在微控制器中的存储器的第一区域中;
将执行第二应用程序的第二CPU的代码存储在所述微控制器中的所述存储器的第二区域中;
将所述第一CPU和所述第二CPU的共享代码存储在所述微控制器中的所述存储器的第三区域中;
将所述第一CPU的读写数据存储在所述微控制器中的所述存储器的第四区域中;
将所述第二CPU的读写数据存储在所述微控制器中的所述存储器的第五区域中;
将第一地址从所述第一CPU的第一专属地址空间转换到所述存储器的所述第三区域中的共享地址空间;以及
将第二地址从所述第二CPU的第二专属地址空间转换到所述存储器的所述第三区域中的所述共享地址空间。
2.根据权利要求1所述的方法,进一步包括:
将第三地址从所述第一CPU的所述第一专属地址空间转换到所述存储器的所述第四区域中的所述共享地址空间。
3.根据权利要求1所述的方法,其中转换所述第一地址包括用查找表转换所述第一地址。
4.根据权利要求1所述的方法,进一步包括:
将执行第三应用程序的第三CPU的代码存储在所述微控制器中的所述存储器的第六区域中。
5.根据权利要求1所述的方法,进一步包括:
将指令中的第三地址从所述第一CPU传递到所述存储器的所述第一区域而不进行转换。
6.根据权利要求1所述的方法,进一步包括:
将所述第一CPU和所述第二CPU的共享只读数据存储在所述微控制器中的所述存储器的所述第三区域中。
7.一种方法,包括:
用微控制器中的第一中央处理单元即第一CPU执行第一功能,其中所述第一功能读取存储在所述微控制器中的第一存储器区域中的第一数据;
用所述微控制器中的第二CPU执行第二功能,其中所述第二功能读取存储在所述微控制器中的所述第一存储器区域中的所述第一数据,其中所述第一存储器区域存储所述第一功能和所述第二功能共用的数据;以及
用所述微控制器中的所述第二CPU执行第三功能,其中所述第三功能读取存储在所述微控制器中的第二存储器区域中的第二数据,其中所述第二存储器区域存储专属于所述第二CPU的数据。
8.根据权利要求7所述的方法,进一步包括:
用所述微控制器中的所述第一CPU执行第四功能,其中执行所述第四功能包括读取存储在所述微控制器中的第三存储器区域中的第三数据,其中所述第三存储器区域存储专属于所述第一CPU的数据。
9.根据权利要求8所述的方法,进一步包括:
用第一CPU执行所述第一功能,其中执行所述第一功能包括读取存储在所述微控制器中的第四存储器区域中的第四数据,其中所述第四存储器区域存储专属于所述第一CPU的读写数据。
10.根据权利要求7所述的方法,其中执行所述第一功能包括将地址从第一CPU专属地址空间转换到所述第一存储器区域中的共享地址空间。
11.根据权利要求10所述的方法,其中转换所述地址包括使用查找表转换所述地址。
12.根据权利要求10所述的方法,其中转换所述地址包括使用比较器转换所述地址。
13.根据权利要求7所述的方法,其中所述第一存储器区域被配置为存储所述第一功能和所述第二功能共用的只读数据。
14.根据权利要求7所述的方法,其中所述第一存储器区域被配置为存储所述第一功能、所述第二功能和所述第三功能共用的只读数据。
15.一种微控制器,包括:
第一中央处理单元即第一CPU和第二CPU,其中所述第一CPU被配置为执行第一应用程序,并且所述第二CPU被配置为执行第二应用程序;
存储器,其被配置为存储代码和数据,其中所述存储器在所述微控制器内部,并且其中所述存储器具有被配置为存储所述第一CPU的代码的第一区域、被配置为存储所述第二CPU的代码的第二区域、被配置为存储所述第一CPU和第二CPU两者的共享代码和只读数据的第三区域、被配置为存储所述第一CPU的读写数据的第四区域和被配置为存储所述第二CPU的读写数据的第五区域;
第一地址转换单元,其被配置为在第一CPU专属地址空间中从所述第一CPU接收第一地址,并且将所述第一地址转换到所述存储器的所述第三区域中的共享存储器地址空间;以及
第二地址转换单元,其被配置为在第二专属地址空间中从所述第二CPU接收第二地址,并且将所述第二地址转换到所述存储器的所述第三区域中的所述共享存储器地址空间。
16.根据权利要求15所述的微控制器,其中所述第一地址转换单元是查找表。
17.根据权利要求15所述的微控制器,其中所述第一地址转换单元是比较器。
18.根据权利要求15所述的微控制器,进一步包括:
第三CPU,其被配置为执行第三应用程序;以及
第三地址转换单元,其被配置为在第三CPU专属地址空间中从所述第三CPU接收第三地址,并且将所述第三地址转换到所述存储器的所述第三区域中的所述共享存储器地址空间。
19.根据权利要求15所述的微控制器,其中所述第一地址转换单元被配置为在所述第一CPU专属地址空间中从所述第一CPU接收第三地址,并且从所述存储器的所述第一区域检索数据而不进行地址转换。
20.根据权利要求19所述的微控制器,其中所述第二地址转换单元被配置为在所述第二CPU专属地址空间中从所述第二CPU接收第四地址,并且从所述存储器的所述第二区域检索数据而不进行地址转换。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US63/392,549 | 2022-07-27 | ||
US18/082,693 US20240037028A1 (en) | 2022-07-27 | 2022-12-16 | Software sharing across multiple cores |
US18/082,693 | 2022-12-16 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117472560A true CN117472560A (zh) | 2024-01-30 |
Family
ID=89631816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310898238.XA Pending CN117472560A (zh) | 2022-07-27 | 2023-07-20 | 跨多个内核的软件共享 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117472560A (zh) |
-
2023
- 2023-07-20 CN CN202310898238.XA patent/CN117472560A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8570333B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
EP2348406B1 (en) | Endian conversion tool | |
JPH06348642A (ja) | マルチプル・バス・ネットワークの初期化方法及びその装置 | |
US20110093627A1 (en) | Handling legacy bios services for mass storage devices using system management interrupts | |
WO2012148841A1 (en) | Method and apparatus for detecting memory access faults | |
US8683191B2 (en) | Reconfiguring a secure system | |
US8436862B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
US10866881B1 (en) | Firmware debug trace capture | |
CN113468079B (zh) | 内存访问方法及装置 | |
TW201947397A (zh) | 多核心系統的記憶體池分配 | |
JP2012099035A (ja) | プロセッサの動作検証方法、プロセッサの動作検証装置、及びプロセッサの動作検証プログラム | |
CN113672237B (zh) | 防内存越界的程序编译方法及装置 | |
CN113485716B (zh) | 防内存越界的程序编译方法及装置 | |
EP3022643B1 (en) | Techniques for dynamically redirecting device driver operations to user space | |
CN117472560A (zh) | 跨多个内核的软件共享 | |
US20240037028A1 (en) | Software sharing across multiple cores | |
US6105101A (en) | 16 bit bios interrupt calls under 32 bit protected mode application | |
US10838737B1 (en) | Restoration of memory content to restore machine state | |
US8117427B2 (en) | Motherboard, storage device and controller thereof, and booting method | |
US8122205B2 (en) | Structured virtual registers for embedded controller devices | |
CN111061591B (zh) | 基于存储器完整性检查控制器实现数据完整性检查的***和方法 | |
JP7369701B2 (ja) | 処理回路上で実行されるべきプログラムをデバッグするときにメタデータにアクセスする方法 | |
US20060010312A1 (en) | Information processing method, program for realizing the method, and recording medium | |
US20170315912A1 (en) | Address Space Expander for a Processor | |
US11650930B2 (en) | Reconfigurable memory mapped peripheral registers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |