微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2640的SimpleBLEMulti工程的如何添加OAD功能?

CC2640的SimpleBLEMulti工程的如何添加OAD功能?

时间:10-02 整理:3721RD 点击:

我们有个产品,需要同时用到接收和发送广播功能,所以在 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的空间可用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top