嵌入式技术论坛
直播中

lee_st

13年用户 45163经验值
擅长:841961
私信 关注
[经验]

第40章 RL-TCPnet之TFTP客户端

转帖
本章节为大家讲解RL-TCPnet的TFTP客户端应用,学习本章节前,务必要优先学习第38章的TFTP基础知识。有了这些基础知识之后,再搞本章节会有事半功倍的效果。
      本章教程含STM32F407开发板和STM32F429开发板。
40.1 初学者重要提示
40.2 TFTP函数
40.3 TFTP配置说明(Net_Config.c)
40.4 TFTP调试说明(Net_Debug.c)
40.5 TFTP服务器端软件和板子的操作步骤
40.6实验例程说明(RTX)
40.7 总结

回帖(93)

lee_st

2018-1-2 10:42:44
40.1  初学者重要提示

1、学习本章节前,务必保证已经学习了第38章的基础知识。
2、本章配套的例子是将开发板作为TFTP客户端,使用开发板上面的SD卡作为客户端的存储介质。所以测试本章节的例子,务必要准备一个SD卡。
3、由于配套例子的文件系统是采用的RL-FlashFS,此文件系统的文件名仅支持ASCII字符,不支持中文,特别注意!
4、具体电脑端TFTP服务器的创建方法和板子的操作步骤在本章的40.5小节有详细说明。做本章节配套的实验,必须要看!
举报

lee_st

2018-1-2 10:43:04
40.2  TFTP函数
      使用如下11个函数可以实现RL-TCPnet的TFTP:
(1)tftp_accept_host
(2)tftp_fclose
(3)tftp_fopen
(4)tftp_fread
(5)tftp_fwrite
(6)tftpc_fclose
(7)tftpc_fopen
(8)tftpc_fread
(9)tftpc_fwrite
(10)tftpc_get
(11)tftpc_put
举报

lee_st

2018-1-2 10:43:25
关于这11个函数的讲解及其使用方法可以看教程第 3 章 3.4 小节里面说的参考资料 rlarm.chm 文件:

举报

lee_st

2018-1-2 10:43:44
这里我们重点的说以下6个函数,因为本章节配套的例子使用的是这6个函数:
(1)tftpc_fclose
(2)tftpc_fopen
(3)tftpc_fread
(4)tftpc_fwrite
(5)tftpc_get
(6)tftpc_put
关于这些函数注意以下三点:
1、TFTP的所有函数都不支持重入,也就是不支持多任务调用。
2、以tftp_开头的函数是用于TFTP服务器的。
3、以tftpc_开头的函数是用于TFTP客户端的。
举报

lee_st

2018-1-2 10:44:01
40.2.1   函数tftpc_fopen
函数原型:
void* tftpc_fopen (
    U8* fname,     /* 文件名地址 */
U8* mode );    /* 操作模式 */
举报

lee_st

2018-1-2 10:44:20
函数描述:
函数tftpc_fopen用于打开本地文件(TFTP客户端的文件)。此函数在MDK安装目录中的TFTPC_uif.c文件里面,属于底层接口函数,用户要在此函数里面添加具体的操作。
1、第1个参数是文件名地址。
2、第2个参数是操作模式,可以是读操作或者写操作,具体支持的形参类型如下:

举报

lee_st

2018-1-2 10:44:42
3、返回值,打开文件成功的话,返回指向此文件的指针变量,否则返回NULL。
使用这个函数要注意以下问题:
1.     此接口函数是用于TFTP客户端的。
举报

lee_st

2018-1-2 10:44:59
使用举例:
void *tftpc_fopen (U8 *fname, U8 *mode) {
  /* 打开文件,如果返回NULL,表示打开失败  */
  return (fopen ((char *)fname, (char *)mode));
}
举报

lee_st

2018-1-2 10:45:17
40.2.2   函数tftpc_fclose
函数原型:
void tftpc_fclose (
FILE* file );    /* 文件句柄地址 */
举报

lee_st

2018-1-2 10:45:32
函数描述:
函数tftpc_fclose用于关闭文件。此函数在MDK安装目录中的TFTPC_uif.c文件里面,属于底层接口函数,用户要在此函数里面添加具体的操作。
1、第1个参数是要关闭的文件句柄地址。
使用这个函数要注意以下问题:
1.     此接口函数是用于TFTP客户端的。
举报

lee_st

2018-1-2 10:45:51
使用举例:
void tftpc_fclose (void *file) {
   /* 关闭文件 */
  fclose (file);
}
举报

lee_st

2018-1-2 10:46:11
40.2.3   函数tftpc_fread
函数原型:
U16 tftpc_fread (
    FILE* file,     /* 文件句柄地址 */
    U8*   buf,      /* 数据缓冲地址 */
    U16   len );    /* 要读取的字节数 */
举报

lee_st

2018-1-2 10:46:28
函数描述:
函数tftpc_fread用于从文件中读出len个字节数据。此函数在MDK安装目录中的TFTPC_uif.c文件里面,属于底层接口函数,用户要在此函数里面添加具体的操作。
1、第1个参数是要读取数据的文件句柄地址。
2、第2个参数是数据缓冲地址,用于存储读取出来的数据。
3、第3个参数是要读取出来的数据大小,单位字节。
4、返回值,返回从文件中实际读出的字节数。
使用这个函数要注意以下问题:
1.     设置读取函数时,必须设置指定大小的字节数。如果实际读出的字节数小于len,将停止读取并关闭TFTP会话,这种情况一般都是文件已经读取完毕。
2.     此接口函数是用于TFTP客户端的。
举报

lee_st

2018-1-2 10:46:44
使用举例:
U16 tftpc_fread (void *file, U8 *buf, U16 len) {
/* 读取len字节到buf中,返回值是实际读取的字节数,返回数值小于len的话,表示文件已经读取完毕,
文件将被关闭 */
  return (fread (buf, 1, len, file));
}
举报

lee_st

2018-1-2 10:47:01
40.2.4   函数tftpc_fwrite
函数原型:
U16 tftpc_fwrite (
    FILE* file,     /* 文件句柄地址 */
    U8*   buf,      /* 数据缓冲地址 */
    U16   len );    /* 要写入的字节数 */
举报

lee_st

2018-1-2 10:47:19
函数描述:
函数tftpc_fwrite用于往文件中写入len个字节数据。此函数在MDK安装目录中的TFTPC_uif.c文件里面,属于底层接口函数,用户要在此函数里面添加具体的操作。
1、第1个参数是要写入数据的文件句柄地址。
2、第2个参数是数据缓冲地址,存储了要写入的数据。
3、第3个参数是要写入的数据大小,单位字节。
4、返回值,返回实际写入文件的字节数。
使用这个函数要注意以下问题:
1.     设置写函数时,必须设置指定大小的字节数。如果实际写入的字节数小于len,TFTP客户端将停止写入,终止数据传输并关闭TFTP会话,这种情况一般是写操作出错了。
2.     此接口函数是用于TFTP客户端的。
举报

lee_st

2018-1-2 10:47:37
使用举例:
U16 tftpc_fwrite (void *file, U8 *buf, U16 len) {
  /* 将buf中的len字节写入到文件中,如果返回数值(实际写入的字节数)不等于len,数据传输将终止 */
  return (fwrite (buf, 1, len, file));
}
举报

lee_st

2018-1-2 10:47:55
40.2.5   函数tftpc_get
函数原型:
BOOL tftpc_get (
    U8*   ipadr,                   /* 远程TFTP服务器的IP地址 */
    U16   port,                    /* 远程TFTP服务器的端口号 */
    const char *src,               /* 远程TFTP服务器上的文件名 */
    const char *dst,               /* 保存到本地的文件名 */
    void (*cbfunc)(U8 event) );    /* 回调函数 */
举报

lee_st

2018-1-2 10:48:17
函数描述:
函数tftpc_get用于启动RL-TCPnet系统上的TFTP客户端,将文件从远程TFTP服务器下载到本地系统。 这样TFTP客户端就可以通过连接到UDP端口号为port(本函数的第2个形参)的TFTP服务器来启动TFTP会话。如果第2个参数的端口号填0,系统将使用TFTP服务器的标准端口号69进行连接。
1、第1个参数填TFTP服务器的IP地址。
2、第2个参数填TFTP服务器的端口号。
3、第3个参数是TFTP服务器上的文件名,即TFTP客户端要下载的文件名。
4、第4个参数是TFTP客户端上新建文件的文件名,用于存储从TFTP客户端下载的文件。如果这个参数填NULL,那么此文件在TFTP服务器上的文件名是什么,下载后还是什么。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分