上位机有处理
[C] 纯文本查看 复制代码 /*
*********************************************************************************************************
* 函 数 名: Ymodem_PreparePacket
* 功能说明: 准备发送数据包
* 形 参: SourceBuf 要发送的原数据
* data 最终要发送的数据包,已经包含的头文件和原数据
* pktNo 数据包序号
* sizeBlk 要发送数据数
* 返 回 值: 无
*********************************************************************************************************
*/
int sendsize = 0;
void Ymodem_PreparePacket(uint8_t *SourceBuf, uint8_t *data, uint8_t pktNo, uint32_t sizeBlk)
{
uint16_t i, size, packetSize;
uint8_t* file_ptr;
/* 设置好要发送数据包的前三个字符data[0],data[1],data[2] */
/* 根据sizeBlk的大小设置数据区数据个数是取1024字节还是取128字节*/
packetSize = sizeBlk >= PACKET_1K_SIZE ? PACKET_1K_SIZE : PACKET_SIZE;
/* 数据大小进一步确定 */
size = sizeBlk < packetSize ? sizeBlk :packetSize;
/* 首字节:确定是1024字节还是用128字节 */
if (packetSize == PACKET_1K_SIZE)
{
data[0] = STX;
}
else
{
data[0] = SOH;
}
/* 第2个字节:数据序号 */
data[1] = pktNo;
/* 第3个字节:数据序号取反 */
data[2] = (~pktNo);
file_ptr = SourceBuf;
/* 填充要发送的原始数据 */
for (i = PACKET_HEADER; i < size + PACKET_HEADER;i++)
{
data[i] = *file_ptr++;
}
/* 不足的补 EOF (0x1A) 或 0x00 */
if ( size <= packetSize)
{
for (i = size + PACKET_HEADER; i < packetSize + PACKET_HEADER; i++)
{
data[i] = 0x1A; /* EOF (0x1A) or 0x00 */
}
}
sendsize += size;
printf("SendSize = %d\r\n", sendsize);
} |