CC2640的SimpleBLEMulti工程的如何添加OAD功能?
我们有个产品,需要同时用到接收和发送广播功能,所以在 SimpleBLEMulti工程的基础上做开发,但是在添加OAD功能时遇到问题:
1,SimpleBLEMulti工程的协议栈部分占用空间有70KB左右,加上OAD代码的20多KB,那么留给APP的flash空间可能只有36K不到了,有没有什么办法对各个部分的代码进行优化呢?
2,添加OAD功能后,必须要注释掉appBLE.cfg的前两行(如下所示)吗?因为注释掉这两行后,APP占用Flash的空间又多了5KB多,进一步减少了业务代码空间,对项目开发限制很大。
//var ROM = xdc.useModule('ti.sysbios.rom.ROM');
//ROM.romName = ROM.CC2650;
麻烦各位同行帮忙分析一下,感谢!
就CC2640的内存空间而言,实现multirole+OAD比较困难。如果需要,我们建议外接一个MCU,负责软件部分的升级功能实现
Viki Shi
就CC2640的内存空间而言,实现multirole+OAD比较困难。如果需要,我们建议外接一个MCU,负责软件部分的升级功能实现
那外接一个Flash行不行呢?正在分析这种方案的可行性。
因为我们的这款产品用的主机(Central)功能就是扫描广播,然后根据广播内容作出响应,最后通过发送广播回复给上位机。
所以很多主机端功能不需要,我添加预编译宏GATT_NO_CLIENT后,multi工程协议栈变成64KB了。
现在准备在APP部分再优化下,增加再搞几KB出来留给业务代码使用。
希望这个方案能成功!
争取再搞几KB出来留给业务代码使用。
可行,主要的限制在于内存,这块考虑外接的话理论上可操作
ni你有没有用SVN功能,官方的multi例程默认是关掉SVN的,我开启SVN之后,协议栈的代码已经接近80Kb了,这种情况下是不是更加不可能实现片内OAD啊
没错,开启SNV内存就更加捉襟见肘了。。。
嗯,谢谢,我们先进行优化调整,实在不行的话,就只能外接flash试试,或者上CC2640R2F。
qinhan he
ni你有没有用SVN功能,官方的multi例程默认是关掉SVN的,我开启SVN之后,协议栈的代码已经接近80Kb了,这种情况下是不是更加不可能实现片内OAD啊
需要加SNV,用于保存计步等app数据。但是原来的方案可能没那么多空间。
在buildConfig.opt中采用 -DHOST_CONFIG=PERIPHERAL_CFG+OBSERVER_CFG 配置,可以将stack占用flash空间大小降到60KB以下,那么就可以留出4KB给SNV使用,但是这样的话需要对app代码做大的调整,目前正在考虑采用该方案。
我采用-DHOST_CONFIG=PERIPHERAL_CFG+OBSERVER_CFG 配置编译了一下,代码已经超过了60K,具体编译出来的大小是:
1.SNV=1时,代码大小是62902+4614
2.SNV=2时,代码大小是62910+8706
请问你是裁剪掉某些功能使代码压缩到60K以下吗?
还有SNV等于1和等于2,具体的区别是什么?我之前看官方的说明好像说是SNV=1时,数据不能稳定保存,不知道是不是我理解错了
我用SimpleBLEPeripheral这个工程里面编译 -DHOST_CONFIG=PERIPHERAL_CFG+OBSERVER_CFG 配置的协议栈,代码大小是小于60KB,我昨天是在SimpleBLEMulti工程编译的。重新开了下稳定,SNV=1,好像是在保存数据的时候掉电才会丢失数据,正常情况下应该没问题吧
在协议栈工程的buildConfigSrc.opt文件中,将 -DCTRL_V41_CONFIG 这个配置也注释掉,
同时,在 multi.c 文件中修改 gapRole_profileRole:
gapRole_profileRole = GAP_PROFILE_PERIPHERAL | GAP_PROFILE_OBSERVER;
这样 PERIPHERAL 和 OBSERVER 这两个角色可以同时使用,而且协议栈大小在52KB以内。
如果需要加SNV=1的话,则协议栈大小在60KB以内,APP有40KB的空间可用。