在使用CC2640R2F的时候发现一个现象,就是在低版本的SDK中有一些工程,到了高版本中SDK就没有了,比如:
simplelink_cc2640r2_sdk_1_40_00_45 中有multi_role
simplelink_cc2640r2_sdk_2_40_00_32 中则没有了multi_role,于是我打算自己动手修改
simple_peripheral + simple_central,其实很简单,无非就是大融合,然后出现了编译过不去的问题,
于是我做了一个小实验
例如在CC2640R2_simple_peripheral从机工程中调用
GapScan_enable(0, DEFAULT_SCAN_DURATION, 0);
函数,怎会出现错误:
undefined first referenced
symbol in file
--------- ----------------
GapScan_enable <whole-program>
起初以为是头文件没有包含造成的,经过各种搜索以后才发现,原来是工程配置的原因
因为GapScan_enable函数是CC2640R2_simple_central主机工程中的函数,所以需要修改
工程配置文件build_config.opt,
/* BLE Host Build Configurations */
-DHOST_CONFIG=PERIPHERAL_CFG
/* -DHOST_CONFIG=CENTRAL_CFG */
/* -DHOST_CONFIG=BROADCASTER_CFG */
/* -DHOST_CONFIG=OBSERVER_CFG */
/* -DHOST_CONFIG=PERIPHERAL_CFG+OBSERVER_CFG */
/* -DHOST_CONFIG=CENTRAL_CFG+BROADCASTER_CFG */
/* -DHOST_CONFIG=PERIPHERAL_CFG+CENTRAL_CFG */
将-DHOST_CONFIG=PERIPHERAL_CFG修改成
-DHOST_CONFIG=PERIPHERAL_CFG+CENTRAL_CFG即可
此时的蓝牙协议栈就包含了主从机的所有功能函数了,
修改配置以后,需要重新编译rebuild project,
有可能出现这样一个错误:
C:/ti/simplelink_cc2640r2_sdk_2_40_00_32/source/ti/ble5stack/common/cc26xx/ccs/cc26xx_app.cmd", line 259: error #10099-D: program will not fit into available memory. placement with alignment fails for section ".cinit" size 0x11b7 . Available memory ranges:
FLASH size: 0x1f000 unused: 0x4 max hole: 0x3
FLASH_LAST_PAGE size: 0x1000 unused: 0x30a max hole: 0x308
error #10010: errors encountered during linking; "ble5_simple_peripheral_cc2640r2lp_app.out" not built
程序太大导致flash装不下,
原来的
#define FLASH_SIZE 0x00020000
将其修成
#define FLASH_SIZE 0x00040000
编译即可成功
但是CC2640R2f的falsh
275KB 非易失性存储器,包括 128KB 系统内可编程闪存
也就是128*1024=131072,换成16进制就是0x20000,所以
修成
#define FLASH_SIZE 0x00040000
虽然编译通过了,但是无法烧写进入板子当中。