Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ymodem_ota
5
ymodem_ota接收数据大小问题
发布于 2020-12-03 13:23:47 浏览:1471
订阅该版
- rt-thread 3.1.4 - stm32f4 - ymodem和ymodem_ota ymodem.c中函数 ```c static rt_err_t _rym_trans_data( struct rym_ctx *ctx, rt_size_t data_sz, enum rym_code *code) { const rt_size_t tsz = 2 + data_sz + 2; rt_uint16_t recv_crc; /* seq + data + crc */ rt_size_t i = _rym_read_data(ctx, tsz); if (i != tsz) return -RYM_ERR_DSZ; if ((ctx->buf[1] + ctx->buf[2]) != 0xFF) { return -RYM_ERR_SEQ; } /* As we are sending C continuously, there is a chance that the * sender(remote) receive an C after sending the first handshake package. * So the sender will interpret it as NAK and re-send the package. So we * just ignore it and proceed. */ if (ctx->stage == RYM_STAGE_ESTABLISHED && ctx->buf[1] == 0x00) { *code = RYM_CODE_NONE; return RT_EOK; } ctx->stage = RYM_STAGE_TRANSMITTING; /* sanity check */ recv_crc = (rt_uint16_t)(*(ctx->buf + tsz - 1) << 8) | *(ctx->buf + tsz); if (recv_crc != CRC16(ctx->buf + 3, data_sz)) return -RYM_ERR_CRC; /* congratulations, check passed. */ if (ctx->on_data) *code = ctx->on_data(ctx, ctx->buf + 3, data_sz); else *code = RYM_CODE_ACK; return RT_EOK; } ``` 其中rt_size_t data_sz是ymodmem的数据段最大长度,128或1024,在回调函数用到 /* congratulations, check passed. */ if (ctx->on_data) *code = ctx->on_data(ctx, ctx->buf + 3, data_sz); 实际这个data_sz也是128或1024. ymodem_ota.c中此回调函数具体为 ```c static enum rym_code ymodem_on_data(struct rym_ctx *ctx, rt_uint8_t *buf, rt_size_t len) { ... if (fal_partition_write(dl_part, update_file_cur_size, buf, len) < 0) { LOG_E("Firmware download failed! Partition (%s) write data error!", dl_part->name); return RYM_CODE_CAN; } } ```c 直接用此data_sz作为写flash的长度,为什么是这样做,实际用xshell发送226796字节,而以上data_sz的累加会为226816字节(恰好是128*1772),这个写文件不会多出20个字节么? ![data_send.jpg](/uploads/20201203/1366ccd5e9471c9e04c280dccb9954f6.jpg) ![bytes_received.png](/uploads/20201203/4dd0c006cf2068e7655962e713bd8608.png)
查看更多
踩姑娘的小蘑菇
2020-12-03
这家伙很懒,什么也没写!
同遇到过这个问题,是个bug ~~我没提pr,看起来一直没修啊:)~~ (我提了pr,master已经修了,lts-3.1.x还没修) [ymodem传输文件存在问题](https://club.rt-thread.org/ask/question/423781.html)
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
1.5k
关于作者
baoxinqiang
这家伙很懒,什么也没写!
提问
3
回答
3
被采纳
0
关注TA
发私信
相关问题
1
ymodem 升级失败
2
rtthread通用bootloader踩坑分享
3
通过BootLoader升级固件失败,用的是stm32f407zgt6
4
qboot ymodem上传固件后release失败
5
ymodem传输 用什么工具呢?
6
Ymodem升级过程中丢包
7
H743的bootloader,在使用ymodem升级固件,无法写入app分区
8
求助 RT-Thread Studio 中 Ymodem 升级问题
9
YMODEM OTA 擦除download分区不完全
10
为什么电脑与板子直连着网线的时候,用ymodem_ota升级经常在中途卡住?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部