Spartan 6上嵌入式网络服务系统设计实现

  作者:杨定定 施慧彬 钱巨 李依桐 时间:2013-08-28来源:电子产品世界

  以下先介绍Xilkernel系统内核主要参数的设置以及多线程的调用方式:

  PARAMETER OS_NAME = xilkernel
  PARAMETER PTHREAD_STACK_SIZE = 8192
  PARAMETER CONFIG_PTHREAD_MUTEX = true
  PARAMETER CONFIG_TIME = true
  PARAMETER CONFIG_SEMA = true
  PARAMETER MAX_SEM = 50
  PARAMETER MAX_SEM_WAITQ = 20
  PARAMETER ENHANCED_FEATURES = true
  PARAMETER CONFIG_YIELD = true
  PARAMETER STATIC_PTHREAD_TABLE = ((run_kerl,1))//系统访问入口函数run_kerl()

  Xilkernel系统使用多线程通信的方法,通过调用相应的线程来实现对应的功能,如下述建立初始线程,访问network_thread()函数:

  sys_thread_new("NW_THREAD", network_thread, NULL,THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);

  通过下述线程调用HTTP WEB功能,实现功能的选择调用,提高资源的利用率:

  sys_thread_new("httpd", web_application_thread, 0, THREAD_STACKSIZE,DEFAULT_THREAD_PRIO);

  文件系统建立

  下面介绍下本文文件系统的建立步骤:

  首先,使用Xilinx ISE集成工具中的Xilinx Bash Shell,切换到原始文件所在的文件夹,使用命令:

  mfsgen -cvbf ../image.mfs 2048 css images js yui generate-mfs index.html,产生所需要的文件系统镜像;

  其次,通过在库文件Xilmfs中设置文件镜像的存储访问地址等信息,如下xilmfs库文件的设置:

  BEGIN LIBRARY
  PARAMETER LIBRARY_NAME = xilmfs
  PARAMETER LIBRARY_VER = 1.00.a
  PARAMETER PROC_INSTANCE = microblaze_0
  PARAMETER NUMBYTES = 400000
  PARAMETER BASE_ADDRESS = 0xC4000000
  PARAMETER INIT_TYPE = MFSINIT_IMAGE
  PARAMETER NEED_UTILS = true
  END

  最后,在xmd下执行

  dow -data F:/EDK_lab/Ethernet13_2AXI/SDK/memfs/image.mfs 0xc4000000命令,下载文件系统镜像到指定地址上,在软件程序中调用xilmfs库文件中定义的mfs_init_fs(),mfs_exists_file()等库函数即可确定文件系统是否成功建立,同时文件系统也可供后续FTP设计中的文件上传和下载作存储器使用。

  FTP文件传输设计

  本文主要是通过以太网上传和下载文件到MCB_DDR2上的文件系统中,通过调用文件系统中的mfs_file_open(),mfs_file_read(),mfs_file_write()以及mfs_file_close()等库函数进行文件系统的访问。

  以下是对lwip130库文件的设置:

  BEGIN LIBRARY
  PARAMETER LIBRARY_NAME = lwip130
  PARAMETER LIBRARY_VER = 3.01.a
  PARAMETER PROC_INSTANCE = microblaze_0
  PARAMETER API_MODE = SOCKET_API
  END

  由以上的设置可以看出本文是基于Xilkernel内核系统的Socket API编程来实现以太网通信,设置MCB_DDR2作为文件存储系统的存储器进行文件的存储和调用。

  case TFTP_RRQ://读文件

  tftp_extract_filename(fname, args->request);printf("TFTP RRQ (read request): %srn", fname);
  tftp_process_read(sd, &args->from, fname);break;
  case TFTP_WRQ://写文件
  tftp_extract_filename(fname, args->request);printf("TFTP WRQ (write request): %srn", fname);
  tftp_process_write(sd, &args->from, fname);break;

  上述TFTP上传和下载程序就是采用Socket API编程,调用lwip130库中的库函数编程来实现文件传输。

1 2 3

关键词: FPGA 总线AXI4 lwip 以太网 实时控制 201309

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版