新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 用双MicroBlaze监控汽车应用

用双MicroBlaze监控汽车应用

作者:时间:2012-02-10来源:网络收藏

考虑到实时操作系统(RTOS)具有众多库函数,.text和.data段对BRAM显得过大,因此,我们将这些函数存放在外部存储器中。在多处理器系统中,如果多个处理器需要对相同存储区域寻址,这样做会导致问题复杂化。因此,开发人员必须手动调整存储分段。如前文所述,两个处理器只缓存自己专用的存储区,并共享对代码段和数据段之外定义区域的访问。通过PLB请求XPS Mutex,可对该共享存储区域进行同步访问,从而实现在两个MicroBlaze之间交换数据。为了在主/从或者流水线处理器系统中实现直接通信和同步,我们采用了FSL。这样可以避免在访问共享存储器时,因多次存储器总线分配而导致更高的访问延迟。

我们首先使用SDK链接脚本生成程序创建链接脚本。该脚本为文本文件,由三段组成,定义了堆和栈的大小、存储区以及每个段的地址。下段代码描述了 系统Microblaze_0的链接脚本。我们调整了代码段和数据段存储区的大小,并增加了一个用于共享存储区的新段。我们也相应调整了microblaze_1的链接脚本,将代码段和数据段的起始存储区地址设定为0x8A000000,并为共享存储器分配了一个相等的段。


/*定义microblaze_0的堆和栈大小*/

_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE :

0x1000;

_HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE :

0x1000;

/*定义系统中用于microblaze_0的存储器*/

MEMORY

{

ilmb_cntlr_dlmb_cntlr :

ORIGIN = 0x00000050, LENGTH = 0x00003FB0

/*重新设定用于代码段和数据段的存储器大小*/

DDR2_SDRAM_MPMC_BASEADDR :

ORIGIN = 0x88000000, LENGTH = 0x02000000

/*为共享存储器新增一个分段*/

DDR2_SDRAM_SHARED_BASEADDR :

ORIGIN = 0x8C000000, LENGTH = 0x04000000

}

[...]

/*定义各段和它们在存储器中映射的位置*/

SECTIONS

{

[...]

sharedmem : {

__sharedmem_start = .;

*(sharedmem)

__sharedmem_end = .;

} > DDR2_SDRAM_SHARED_BASEADDR

[...]

}

MPSOC的下载和调试选项

SDK环境为下载、运行和调试多处理器系统的软件提供了两种方法。一方面,基于Eclipse的工具能够为软件工程提供下载和ST.DIO状态的配置;另一方面,可以使用Xilinx微处理器调试(XMD)控制台来处理这些任务。

另外,SDK还可以使用位流和.bmm文件重配置FPGA。根据链接脚本中定义的段,FPGA编程对话框(Program FPGA Dialog)可以随意将整个软件段直接传输到与特定处理器相关联的BRAM中。如上所述,由于.elf文件会因使用库函数的应用而增大,因此,在多处理器系统中,我们一般会将这些段存放在外部存储器中。在这种情况下,可以选择FPGA编程对话框软件配置设置中的bootloop,来提供后续的软件下载。

SDK环境

SDK在工程浏览器(Project Explorer)窗口中,提供了包括软件工程选择的运行与调试(Run Debug)配置,以及在Run菜单中打开“Run configurations…”。系统中每个处理器都有相关联的“Run Debug”配置。在第一个例子中,选择配置对话框主标签中的工程.elf文件。在“Device Initialization”标签中将“Reset Processor Only”选为复位方式,以避免在复位时将整个系统重置。

另外,通过配置ST.DIO Connection标签,可以让ST.DIO直接打印到SDK控制台。将单处理器的“Run Debug”配置捆.绑在一起,它们就可以同时运行各自的软件。最后,SDK基于Eclipse的调试窗口可以让开发人员插入断点,并提供变量赋值和存储分配方面的信息。



评论


相关推荐

技术专区

关闭