walkie

printf和xil_printf的不同-edk 基础实验lab4,lab5,lab6的一些感想

0
阅读(6693)

继续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运行时候的真实信号抓出来,看看到底是否符合自己的要求。真是好东西。