printf和xil_printf的不同-edk 基础实验lab4,lab5,lab6的一些感想
0赞继续edk基础实验的移植,刚刚把所有的实验都移植到了新的板卡上。
lab4主要关注于简单软件的编写。对于 这个实验,我影响最深的是xil_printf()以及printf()函数的不同。虽然xilinx的microblaze以及edk工具支持标准的c 库,比如我们最日常使用的printf函数,就是标准c库里的一个重要函数。但是标准c库所谓的标准性,或者所谓的通用性带来的问题就是它必须面对所有的 情况,而一些情况在fpga设计中是普通情况下是极少碰到的,比如正常情况下,浮点处理是很少用的。如此之后,这个函数必然会变得体态臃肿。比如这里的 printf函数。不知道大家有没有这样的经验,使用printf函数,你的程序最后编译出来变的很大~其实xil_printf和printf的功能是 一样的,只是xil_printf除去了浮点的所有功能,如此之后,一下子程序就变得很小了。下面是实际的比较:
这是使用 printf函数的程序:
mb-size TestApp_Memory/executable.elf
text data bss dec hex filename
65476 1404 2164 69044 10db4 TestApp_Memory/executable.elf
下面是使用xil_printf函数的程序:
mb-size TestApp_Memory/executable.elf
text data bss dec hex filename
5842 348 2094 8284 205c TestApp_Memory/executable.elf
两 个程序实现的功能完全一样,但是最后的大小却有5倍之差,不得不引起自己得注意。
这里再附上源程序:
while (1)
{
psb_check = XGpio_DiscreteRead(&push, 1);
xil_printf("Push Buttons Status %x\r\n", psb_check);
dip_check = XGpio_DiscreteRead(&dip, 1);
xil_printf("DIP Switch Status %x\r\n", dip_check);
XGpio_DiscreteWrite(&LEDs8_Bit, 1,dip_check);
// output dip switches value on LEDs_8Bit device
for (i=0; i<999999; i++);
}
所不 同得就是粗体标出得那两个print函数。
lab5是sdk得使用,其实就是打了xilinx补丁得eclipse得使 用。发现eclipse很火,貌似Actel以及Altera得软件集成开发环境都是eclipse,只是各自打了相应得补丁。。
lab6 是使用xmd以及sdk进行软件得调试,同时用了chipscope进行硬件的调试。有了chipscope,觉得fpga的开放就方便多了,可以把 fpga运行时候的真实信号抓出来,看看到底是否符合自己的要求。真是好东西。
