4.2 为多处理器系统创建软件
在 NiosII IDE[3]环境下,为3个处理器系统分别创建6个软件工程,为每个处理器创建一个应用工程和一个系统库工程。之后对软件工程进行编译、运行和调试。
软件使用硬件Mutex共享一个消息缓存区。3个处理器分别写消息到消息缓存区(count)且循环加1。cpul读消息且通过JTAG_UART显示消息。每个处理器运行同样的C文件,但处理器的操作稍有不同。这是通过使用Ni-osII的cpuid实现的。在NioslI处理器系统中,某个处理器通过写其cpuid控制寄存器的值到Mutex寄存器的OWNER域来对Mutex加锁。cpuid寄存器保持一个静态值,在多处理器系统中,该值唯一地识别一个处理器,且在系统创建时确定。软件执行某个处理器的函数时,首先检查处理器的cpuid,如果cpuid正确,则执行相应函数。工程中的文件为 hello_world_multi.c,其中将信息写入缓冲区的功能由以下程序段实现:
如果将信息从jtag_uart输出,那么程序首先判断id是否等于3。因为硬件设计时,只有cpul与jtag_uart相连,而cpul的id的值为 3(在系统创建时确定),cpu2、cpu3的id分别为1和2,且id的值等于cpuid控制寄存器的值加1,可在NiosII IDE环境下读取cpuid控制寄存器的内容。其信息输出的程序如下:
在System Library属性中,第1个工程选择jtag_uart为stdin、stderr和stdout,选择cpul_timer为the SystEMCLOCk timer;第2个工程选择cpu2_timer为System clocktimer,验证stdin、stderr和stdout为null,因为这个处理器不与jtag_uart连接;第3个工程选择 cpu3_timer为SystEMClock timer,其余同工程2。验证这3个工程的SDRAM被选择为Program memory、Read-only data memory、Read/write data memory、Heap memory和Stack memory。
分别经编译、下载、运行后,在终端上显示这3个处理器产生的消息,如图2所示。
结 语
结果表明,3处理器系统通过硬件互斥核,实现了存储器的共享。在此实例的基础上,按同样的方法添加处理器及相应的硬件组件,并开发相关应用软件,即可实现满足不同需求的多处理器系统。
本文关键字:处理器 综合-其它,单片机-工控设备 - 综合-其它