C++ 利用YMODEM协议通过串行通信将SPIFFS(ESP8266)内的文件传输到PC
我需要使用YMODEM协议通过串行通信将文件从ESP8266(Arduino/C++)的SPIFFS传输到PC 就YMODEM协议而言,我有一个完整的实现,包括协议所需的辅助功能,我的项目顺利编译,没有任何问题。但是,问题在于传输文件所需的以下功能: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
/**
* @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。块传输协议更适合您的应用程序。