walkie

从TestApp_Memory说起~  2008-10-29 21:08

0
阅读(33594)

今天下午快出门的时候被问了一个关于TestApp_Memory的问题,被问的正着,本来以为就在那里的东西突然之间发现原来不在那里。

其实身边的很多朋友也碰到过很多类似的问题,就是在EDK中的一些测试文件的具体源代码在哪里,比如这里的TestApp_Memory。 TestApp_Memory是一个最简单的实例了,很多时候我经常是用它来验证我的硬件设计是否正确,如果TestApp_Memory可以过,基本上 硬件没有什么大问题。

那么今天就来说说这个TestApp_Memory的例子,也可以一起看看EDK管理软件的方法是怎样的,头文件在哪里,具体的c文件在哪里。

我想TestApp_Memory这个最简单的实例,应该用过EDK的人都会碰到。而在Xilinx提供的TestApp_Memory.c文件里,它却 没有具体的给出它的测试函数的实现,而是使用了一个函数。

status = XUtil_MemoryTest32((Xuint32*)XPAR_DDR_SDRAM_16MX16_MEM0_BASEADDR, 1024, 0xAAAA5555, XUT_ALLMEMTESTS);
而把这个TestApp_Memory带过了,然后去找它具体的实现, 一般来说,可以从头文件里找,这个是最基本不过的常识了,找到了

#include "xparameters.h"

#include "stdio.h"

#include "xutil.h"

 

然后发现在xutil.h文件里有。

/* xutil_memtest prototypes */

int XUtil_MemoryTest32(u32 *Addr, u32 Words, u32 Pattern, u8 Subtest);
int XUtil_MemoryTest16(u16 *Addr, u32 Words, u16 Pattern, u8 Subtest);
int XUtil_MemoryTest8(u8 *Addr, u32 Words, u8 Pattern, u8 Subtest);

但是也只是给出了一个定义,没有具体的实现。

但是用过Linux写过makefile的人现在肯定对这个 xutil.h所在的目录结构非常有感觉,对,它是

$(EDK_Project)/microblaze_0/include

头 文件在这里,那么它的具体实现肯定在跟它同级的lib目录下,或者就是在编译的时候由makefile来定义了。后者没有普遍性,前者的结构对于普遍性的 工程来说是合理的。发现在

$(EDK_Project)/microblaze_0/lib

是几个*.a文件,是静态链接 库,于是,它的具体实现就是在这些静态链接库里。那么这些静态链接库是怎么生成的呢?然后在

$(EDK_Project)/microblaze_0/libsrc

看 到了所谓的源码。。

因为一开始就是要找的是TestApp_Memory

所以我第一个看的是sdram_v1_00_a目 录,发现里面空空如也。。。什么都没有。。。

才想起它使用的软件的驱动应该是没有的。

然后看看其他几个都是某个实例的名字, 应该都不是很像。

接着发现了这个目录下还有一个所谓的common_v1_00_a目录,

打开一看,发现就是自己想要的。

所 有的xutil_memtest 函数的具体实现都在xutil_memtest.c这个文件内。