设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2971|回复: 3
打印 上一主题 下一主题

求教关于自己写OTA的疑问

[复制链接]

2

主题

3

帖子

25

积分

新手上路

Rank: 1

积分
25
跳转到指定楼层
楼主
ohyeszq 发表于 2018-11-8 20:33:37 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
环境:nRF51822 + SDK12.3
需求:在Application中,使用nus服务接收数据,并存储到Flash中,接收完成后校验通过,则跳转到自己写的boot中进行拷贝。主要是客户要替换以前的设备,升级是3字节序号+17字节固件内容的数据包格式,没有办法使用官方的DFU。
实现思路:在nus服务的数据接收回调函数中,将数据放在缓冲区中,然后调用scheduler,将下载操作放到调度中,当没有可用的缓冲区时,在回调函数中while循环等待。
疑问:当我在nus服务的数据接收回调函数中阻塞时,调度能否正确执行?对于当前数据包,协议栈是否会给手机接收成功的应答?
问题:如果不进行阻塞,会存在数据覆盖的问题,因为手机端一直在发送,同时由于scheduler不断的put,也不正常。但是当阻塞时,又会有数据下发失败的问题。
关于DFU,相关的原理、方法和架构的说明有很多,但是关于BLE数据接收和Flash操作、ZIP包的格式、接收到包后的解析等说明太少,对于工期紧,且首次接触蓝牙芯片而又没有时间仔细研究例程的人来说,压力颇大,一脸懵逼啊,且SDK12和之前的差异还是挺大。

望大神不吝赐教。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

Archiver|手机版|小黑屋|Comsenz Inc.   

GMT+8, 2024-5-9 20:02 , Processed in 0.111750 second(s), 28 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表