Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 利用YMODEM协议通过串行通信将SPIFFS(ESP8266)内的文件传输到PC_C++_Embedded_Esp8266 - Fatal编程技术网

C++ 利用YMODEM协议通过串行通信将SPIFFS(ESP8266)内的文件传输到PC

C++ 利用YMODEM协议通过串行通信将SPIFFS(ESP8266)内的文件传输到PC,c++,embedded,esp8266,C++,Embedded,Esp8266,我需要使用YMODEM协议通过串行通信将文件从ESP8266(Arduino/C++)的SPIFFS传输到PC 就YMODEM协议而言,我有一个完整的实现,包括协议所需的辅助功能,我的项目顺利编译,没有任何问题。但是,问题在于传输文件所需的以下功能: /** * @brief Transmit a file using the YMODEM protocol * @param buffer: Address of the first byte * @retval The size

我需要使用YMODEM协议通过串行通信将文件从ESP8266(Arduino/C++)的SPIFFS传输到PC

就YMODEM协议而言,我有一个完整的实现,包括协议所需的辅助功能,我的项目顺利编译,没有任何问题。但是,问题在于传输文件所需的以下功能:

/**
  * @brief  Transmit a file using the YMODEM protocol
  * @param  buffer: Address of the first byte
  * @retval The size of the file
  */
uint8_t Ymodem_Trsfer(uint8_t *buffer, const uint8_t* sendFileName, uint32_t sizeFile)
{
   // code goes here
}
如上所示,该函数将指向数据缓冲区的指针作为参数。我要传输的文件(大约64KB)是一个二进制文件,存储在SPIFFS中,并在前面通过HTTP从web服务器下载。我从文件中读取字节并在其上使用大多数流方法都没有问题,但是,我不确定如何将打开的文件/流的地址传递给上面的函数,以便通过YMODEM发送其内容


我心里有一些特定的场景,但我想先得到一些反馈。

看起来您无法将文件流传递给它。看起来您应该已经将文件流读取到
char
数组中,并使用
char
数组作为
buffer
参数。这看起来是一个很好的阅读启发:@user4581301:是的,这是我想到的场景之一,但是这里的主要限制是用户在这个小芯片上可以使用的SRAM,它小于40KB。也许将文件拆分为多个块会有所帮助?您可能需要修改
Ymodem\u Trsfer
,以便可以分块发送,注意,并非所有文件都存储在内存中。这将允许您填充缓冲区、调用函数、填充另一个缓冲区、调用函数等。Y-Modem协议应该能够处理“块”数据。我不记得协议中是否有总的块数。是时候进行一些协议研究了。:-)如果可以,尝试切换到USB。块传输协议更适合您的应用程序。看起来您无法将文件流传递给它。看起来您应该已经将文件流读取到
char
数组中,并使用
char
数组作为
buffer
参数。这看起来是一个很好的阅读启发:@user4581301:是的,这是我想到的场景之一,但是这里的主要限制是用户在这个小芯片上可以使用的SRAM,它小于40KB。也许将文件拆分为多个块会有所帮助?您可能需要修改
Ymodem\u Trsfer
,以便可以分块发送,注意,并非所有文件都存储在内存中。这将允许您填充缓冲区、调用函数、填充另一个缓冲区、调用函数等。Y-Modem协议应该能够处理“块”数据。我不记得协议中是否有总的块数。是时候进行一些协议研究了。:-)如果可以,尝试切换到USB。块传输协议更适合您的应用程序。