sdk:15.2
https://www.cnblogs.com/iini/p/9332463.html
https://www.cnblogs.com/iini/p/9095622.html
如上原厂大佬博客所言,softdevice的flash code段是确定的,而其ram是不确定的,直接和服务的多少以及
宏:
NRF_SDH_BLE_TOTAL_LINK_COUNT //一共同时可以支持多少个连接 NRF_SDH_BLE_PERIPHERAL_LINK_COUNT //作为从模式的连接同时能有几个 NRF_SDH_BLE_CENTRAL_LINK_COUNT //作为主模式的连接同时能有几个 NRF_SDH_BLE_GATT_MAX_MTU_SIZE //MTU size为多大 NRF_SDH_BLE_VS_UUID_COUNT //用户自定义的base UUID有几个 NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE //Attribute table总共占多少协议栈RAM空间 NRF_SDH_BLE_SERVICE_CHANGED //要不要包含service change characteristic
的设定有关;
在添加服务后,
1.首先需要确定的是NRF_SDH_BLE_GATT_MAX_MTU_SIZE的大小,根据需求确定是否使用23字节mtu,或者自定义的大数据传输,确定之后烧录添加服务后的程序。完成烧录之后查看程序是否能够跑的通;
2.根据你自己的服务个数调整NRF_SDH_BLE_VS_UUID_COUNT的值;
3.调整NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE的值以及keil面板中ram的起始地址以及size:
NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE建议以 +256*n 为单位递增,NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE增加了多少则ram1的star一样增加多少,size则对应减少多少;直到修改到烧录进去你能够跑通,蓝牙连接后能按预想进行数据通信;然后可以进行小修在原来基础加256/2,256/4这样精确下去,前提是这个值是4的倍数;找到最合适的值;