TI中文支持网
TI专业的中文技术问题搜集分享网站

BLE 蓝牙 空中升级存储空间不够 如何解决

我在做蓝牙空中升级的时候,原工程正常运行,但是添加空中升级服务后,提示一下错误:

Error[e104]: Failed to fit all segments into specified ranges. Problem discovered in segment BANKED_CODE. Unable to place 77 block(s) (0x1ce37 byte(s) total) in 0x1acebbyte(s) of memory. The problem occurred while processing the segment placement command"-P(CODE)BANKED_CODE=_CODE_BEG-_CODE_END,_BANK4_BEG-_BANK4_END,_BANK5_BEG-_BANK5_END,_BANK6_BEG-_BANK6_END,_BANK7_BEG-_BANK7_END", where at the moment of placement the available memory ranges were "CODE:37fc-3ff7,CODE:4b000-4ffff,CODE:59311-5ffff,CODE:68000-6ffff,CODE:78000-7e7ff"

想过优化程序,减小代码量,但是效果不显著,还是不行。请问如何解决这个问题!

Light J:

使用Large OAD例程,在wiki可以找到。最高等级优化,只要代码总量不超过156K都可以。

XiaoZhuang Ling:

回复 Light J:

谢谢 Light J !

我还是不大懂,能不能具体点呢? OAD例程是指类似OADManager的例程么?我是直接用协议栈的OADManager,然后在我的工程添加OAD服务。下面是我的代码量

137 872 bytes of CODE memory 34           bytes of DATA memory (+ 87 absolute ) 7 005     bytes of XDATA memory 194        bytes of IDATA memory 8            bits of BIT memory 4 235    bytes of CONST memory

cedar_xuesong:

回复 XiaoZhuang Ling:

你到这里找OAD参考代码,我这边网络不好,搜索不了

http://processors.wiki.ti.com/index.php/Category:BluetoothLE

XiaoZhuang Ling:

回复 cedar_xuesong:

       我试着把我的工程移植到1.4.0协议栈里面的例程SimpleBLEPeripheral(因为它做好的OAD可用),发现编译通过,但是运行时虽然可以连接手机蓝牙,就是程序有点跑飞的感觉:能接收手机信息,就是其他任务受影响,比如我的PWM输出有点不正常。

Light J:

回复 XiaoZhuang Ling:

Large OAD例程包括BIM,IMAGE A,IMAGE B三个工程,这个例程IMAGE A只有90K,IMAGE B有150K,足够应付很大的应用代码量。主要是要参考这三个工程的链接文件设置和预编译宏的配置。协议栈自带的OAD外设例程是普通的,A和B的大小都不能超过128K,你这个137K的代码量肯定是不能直接移植的。其实有兴趣的话可以自己修改链接文件控制三个固件的大小,只是Large OAD基本上已经做到极致了,没必要再去自己研究了。

XiaoZhuang Ling:

回复 XiaoZhuang Ling:

找到Large Image OAD源码,放到协议栈里,编译,工程本身也有错误。

我是要把我的工程移植到Large Image OAD里面,还是参考Large Image OAD配置我的工程?

Light J:

回复 XiaoZhuang Ling:

没记错的话Large OAD是基于2541的,1.3.2版本协议栈。你用的是41还是40呢?我的建议是BIM编译通过可以直接烧录,IMAGE A和IMAGE B移植到你自己的应用,将Large OAD的相关文件复制过来,比如peripheral_small.c,还有各个链接文件,预编译宏也照着添加。另外建议使用1.4.0以上版本协议栈。

赞(0)
未经允许不得转载:TI中文支持网 » BLE 蓝牙 空中升级存储空间不够 如何解决
分享到: 更多 (0)