引言
随着嵌入式技术的不断成熟以及业界对工业设备小型化、个性化需求的不断提高,越来越多的工业设备控制采用嵌入式系统设计。工业设备控制的最大的特点是对系统实时性要求较高,而通常情况下,控制过程中常常同时存在多种不同实时性要求的任务,不同任务对处理器时间的占用比例也有较大差异,因此如何有效满足并提高系统实时性能成为研究的重点。
传统的控制系统中,单核处理器架构是主流,除了通过提升处理器主频来提高系统的响应速度,还可以通过使用抢占式实时操作系统、引入多线程、改进系统任务调度策略等软件方法来进一步提高系统性能。但随着应用不断复杂,控制精度要求不断提高,有限的系统资源成为系统性能提升的最大瓶颈。
针对单CPU架构的局限性,多处理器系统的研究应用逐渐增多。参考文献[1]采用FPGA和多个DSP 互连的并行处理结构,实现了高速数据传输带宽、低延迟且计算性能强大的实时图像处理系统。参考文献[2]提出了一种基于ARM的双CPU协调运动控制系统的设计方法。参考文献[3]采用ARM+DSP的主从式双CPU结构设计嵌入式运动控制器。参考文献[4]分析比较了几种典型的嵌入式双核通信接口,并介绍了典型接口的设计要点。参考文献[5]在单核嵌入式操作系统构架的基础上,提出一种基于对称通信的双核处理器嵌入式操作系统架构,解决了异构双核处理器的通信效率和共享内存的利用问题。随着双核架构应用的不断推广,同时双核微处理器技术逐渐成熟,如何设计稳定高效的双核系统软件架构成为当前研究的重点。本文以F28M35双核系统为例,介绍了一种以IPC通信机制为核心,基于共享内存的双核软件架构方法。
1 双核间通信的系统结构
完成双核间的数据通信,除了共享内存外,还需要系统提供一套双核间交互的信号机制。通常该信号机制中同时包括中断信号和非中断信号。利用该信号机制,结合共享内存,可设计出各种灵活的通信方式。从通信信号的角度,通信方式可分为轮询方式和中断方式。由于轮询方式使内核处于忙等状态,因此应尽量避免使用,该方式多用于双核之间事件需严格按照一定顺序执行的情况,例如系统启动时双核之间的初始化交互。
从携带数据量的角度讲,双核之间可仅仅利用信号机制完成通信,双方协定默认的操作。另外,双方通过共享内存交换数据,也是大部分时候的通信方式,该方式在设计时,将共享内存划分为两种属性的内存区,分别用于两个方向的数据传递。一种内存允许一个内核进行读写操作,同时允许另外一个内核进行只读操作,另一种则方向相反。例如,A内核欲向B内核发送数据时,先将数据写入A核内的共享内存区,然后向B核发送信号,B核收到信号后从该方向的共享内存区将数据取出,并回复A核,完成一次数据通信。
通信协议和通信接口封装是双核通信应该重点考虑的环节。简单的数据通信,双方可以直接发送数据,默认双方已经知道数据的含义以及数据应该放置的内存地址。但是随着系统逐渐复杂,代码量增加,无协议的数据通信给编程和理解都带来很大问题,降低了系统的可扩展性能。在设计中,双核通信可以采用和系统外设相同的通信协议,例如串口通信使用的Modbus协议,这样可以重复利用协议解析函数,同时也可提高可移植性。另外可根据实际需要自行定义适用的通信协议,或者将通用的通信协议做适当修改以更适应共享内存大数据量的数据通信。关于通信接口的软件封装通常定义数据发送函数、数据接收函数、协议解析函数等,原则是接口尽量精简,最大程度降低双核间的耦合度。
2 双核间的数据共享机制
双核间实现数据共享主要有两种策略,一种是将共享数据直接存储于共享内存中,双核均可对其进行操作。该方法关键要解决对共享内存互斥访问的问题。关于双口RAM互斥访问的方法大致有两种:
① 硬件判优。系统通过存储器冲突仲裁单元向两个内核提供共享内存访问冲突标志,当双核同时对相同地址的RAM进行存取时,仲裁单元触促发相应忙信号,设计中可利用该信号插入等待时间,避免访问冲突。
② 信号量机制。系统提供独立于双核的信号量管理单元,该方式又叫令牌判优方式,每个令牌可对应指定地址,指定长度的共享内存段。双核按照协定的规则交替获得令牌,进而操作相应的共享内存段。当双核同时申请同一个令牌时,信号量管理单元裁定谁先占用。设计中可通过在访问内存前先申请对应的令牌,实现双核对共享内存区的互斥访问。
另一种实现数据共享的策略是在双核各自本地定义相同的数据作为共享数据,按照写后及时更新的原则,利用中断方式通过双核间的数据通信实现数据同步。这种方法适用于共享数据满足一定条件时,即该共享数据对于其中一个内核是只读的,否则,由于双核独立运行,运行进度几乎没有制约,若出现双核均改写共享数据,则无法保证数据的有效性。
3 双核任务分配
任务分配的原则在于充分利用双核资源,最大限度缩短系统响应时间。例如在运动控制领域利用ARM+DSP双核处理器架构控制系统,在ARM核中实现系统逻辑控制,在DSP核中实现运动控制输出,ARM核控制运动过程,通过命令的形式驱动DSP核实现具体的运动动作。在注塑机控制实例中,利用ARM核实现注塑过程控制,而在DSP端完成注塑机位置和温度的智能控制算法,实现系统优化处理。
4 F28M35双核处理器的软件架构设计
4.1 F28M35双核存储结构
TI的全新ConcertoF28M35微控制器采用了一种双子系统架构,其中包含一个TI C28x内核与一个ARM CortexM3内核。这种混合架构将业内用于控制和主机通信功能的最佳技术融入到单个控制器中,而该控制器可提供维持实时控制环路所需的性能、效率及可靠性,并具备低延迟通信所需的快速响应能力。
如图1所示,在F28M35中包含两类共享内存,一类是MTOCmessage RAM(MTOCMSGRAM)和CTOMmessage RAM(CTOMMSGRAM),大小都为2 KB,其特点是一个内核对其有读写的权限,而另外一个内核仅有只读权限。例如,M3内核可以读写MTOCMSGRAM内存,而C28x内核只能对MTOCMSGRAM进行读操作。另外一类共享内存包含8个内存块(S0~S7),大小均为8 KB。该类内存可以被划分到任意内核,系统通过控制寄存器MSxMSEL设置该类内存的属性,每块内存对应该寄存器中的一位,通过设置相应位来设置相应内存块的归属权。例如,若S0被设置为归属M3内核,则M3内核可读写该内存,而C28内核只能对其进行读操作。同时需要注意的是,控制寄存器MSxMSEL只能在M3内核中进行设置。
图1 F28M35x系统结构
4.2 IPC机制
在双核技术中,双方之间的通信是核心。在F28M35x体系结构中,基于IPC信号和IPC中断实现IPC通信(Inter Processor Communications)机制。其工作原理如图2所示。
图2 IPC机制原理
该处理器在每个方向(MTOC/CTOM)上定义了32个IPC信号,前4个信号触发时可以附加中断功能。处理器通过一套寄存器组实现IPC信号的操作。如图2所示,每个内核通过自己存储空间内的一套寄存器实现IPC功能,每个寄存器32位,每一位分别代表一个IPC信号,第0~3位同时可设置为IPC中断。以C28内核为例,寄存器组分别包括:
① CTOMIPCSET。用于向M3核发送IPC信号或者IPC中断。该寄存器置位时,同时将CTOMIPCFLG和CTOMIPCSTS寄存器相应位置为1。
② CTOMIPCCLR。用于清除C28到M3方向上的IPC信号或IPC中断标志。该寄存器置位时,同时将CTOMIPCFLG和CTOMIPCSTS寄存器相应位清零。
③ CTOMIPCFLG。该寄存器为只读寄存器,用于显示C28核到M3核方向上当前IPC信号的状态。该寄存器和M3存储空间中的CTOMIPCSTS寄存器在物理上是同一个寄存器。
④ MTOCIPCSTS。作用和CTOMIPCFLG类似,同样是只读的,只是表征方向相反,用于显示M3核到C28核当前IPC信号的状态。同样,它和M3存储空间中的MTOCIPCFLG寄存器在物理上是同一个寄存器。
⑤ MTOCIPCACK。该寄存器置位时,同时将MTOCIPCFLG和MTOCIPCSTS寄存器相应位清零。当C28内核收到M3发送来的IPC信号或者IPC中断时,利用该寄存器发送确认信息,完成二者的握手。
形象地说,双核之间维护了两条相互独立的全双工通道,每条通道包含了一个方向的信号发送(SET)和反向的信号确认(ACK)。同时双方可以随时读取两个方向下的当前IPC状态(FLG/STS),最终实现双核间的IPC交互机制。
此外,F28M35还提供了一套IPC消息寄存器,分别是MTOC Message Registers和CTOM Message Registers,分别在每个内核空间对应4个寄存器。结合IPC信号和IPC中断实现双核之间的便捷通信。以M3内核空间为例说明,如表1所列,该寄存器组包括命令寄存器、地址寄存器、写数据寄存器、读数据寄存器。
表1 MTOC消息寄存器
4.3 双核芯片的软件系统
以系统控制块数据结构为核心的双核系统的架构方法。即设计了一种数据结构,称作系统控制块(System Control Block,SCB)。将系统所有相关控制对象均映射到系统控制块中,每个任务对系统的操作均可转化为对SCB的读写操作,这样系统可以很方便地实现模块化,定义SCB操作管理模块即可实现多任务对系统操作的统一管理。关于SCB与实际控制对象的物理关联可以通过对应的驱动模块实现。
图3中描述了以SCB为核心的系统简易逻辑架构,SCB不仅体现控制器与外部控制对象之间的关系,例如,映射人机界面操作、PC机监控过程以及各种输入/输出信号等;同时,SCB还包含了双核之间实现系统控制的内部数据映射。SCB的基本结构如图4所示,主要包括A核外设映射区、B核外设映射区、系统参数区、系统状态区等。
图3 基于SCB的系统架构
图4 SCB结构示意图
SCB是整个系统的体现,从处理器内部分析,双核通过维护同一个SCB实现对系统的协调控制。利用双核之间的通信,当其中一个内核的SCB被写操作时,立即向另一内核发送更新命令,实时完成双核间的数据同步。以A内核I/O资源映射为例说明SCB的同步,过程如图5所示。
图5 SCB同步示例
利用本节介绍的IPC信号机制,以及多种形式的存储空间,可以灵活设计出多种双核通信方式。如下所述:
① 仅利用IPC信号或者IPC中断方式,多用于完成拓扑序列事件执行,或者系统启动时初始化握手交互。
② IPC信号/中断+IPC消息寄存器组方式,用于小数据量的通信。命令寄存器中的命令完全由软件定义,用户可设计不同的命令来完成不同的数据操作,多用于对字节型内存的读写操作。
③ IPC信号/中断+MSGRAM/S0S7方式,S0S7可分别分配给任意内核,该方式可以实现大数据量的核间通信,同时利用通用或者自定义的通信协议,提高系统的扩展能力及可移植性。
结语
如图6所示,基于F28M35双核处理器设计实现的注塑机控制器,采用本文介绍的方法实现了主从式软件架构,ARM核作为主核完成与上位机的通信任务和系统逻辑过程的控制任务,利用DSP高速的计算能力作为从核完成注塑机位置控制和温度控制智能算法的执行任务,双核通过SCB的映射实现相互的协调。新的控制器替代了原有的以600 MHz主频处理器为核心的控制系统,较好地完成了注塑机的控制任务。
图6 双核系统的注塑机控制器
在以后的工作中,从核智能控制算法仍有优化的空间,系统性能仍可进一步改善。另外,除了主从模式,可研究双主模式,实现更灵活有效的系统架构,并完成双端独立的在线监控和程序下载等功能,可进一步降低软件开发难度。