加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ble学习笔记十五----------ble协议栈之flash数据存储实验

发布时间:2020-12-15 17:33:39 所属栏目:百科 来源:网络整理
导读:协议栈 flash 数据存储实验 Cc2540 自带了 256k 的 flash, 可以存储数据也可以存储代码 协议栈自带了 snv 管理代码 , 读函数 osal_snv_read, 写函数 osal_snv_write 数据都有一个唯一的 id,snv 通过这个唯一的 id 管理 FLASH 中的数据? OSAL 目录下的 Bcomde

协议栈flash数据存储实验

Cc2540自带了256kflash,可以存储数据也可以存储代码

协议栈自带了snv管理代码,读函数osal_snv_read,写函数osal_snv_write

数据都有一个唯一的id,snv通过这个唯一的id管理FLASH中的数据?

OSAL目录下的Bcomdef.h中定义了他自身所使用的一部分id,示例代码如下:

?

?

?

示例应用:SNV中存入串口接收的数据,断电重启后读取这串字符串,并通过串口发送

?

?

1?首先在bcomdef.h中添加哪下代码

//自定义存储数据的id?

#define?BLE_NVID_USER_CFG_START????0x80??//!<?Start?of?the?USER?Configuration?NV?IDs

#define?BLE_NVID_USER_CFG_END???????0x89??//!<?End?of?the?USER?Configuration?NV?IDs

?

2?修改simpleBLEPeripheral.c文件

添加头文件


#include?"osal_snv.h"

然后在启动事件中添加读取snv0x80的值

?

//启动事件

??if?(?events?&?SBP_START_DEVICE_EVT?)

??{

????//?Start?the?Device

????VOID?GAPRole_StartDevice(?&simpleBLEPeripheral_PeripheralCBs?);

????Serial_Init();??????//?串口初始化

????

????//读取snv0x80的值

if(SUCCESS?==?osal_snv_read(?BLE_NVID_USER_CFG_START,??128,?SerialRxBuf))

????{

??????SerialPrintf("Read?Snv?ID?%d?success?rn?Value?is:"%s"rn",?BLE_NVID_USER_CFG_START,?SerialRxBuf);

????}

????else

????{

????????SerialPrintf("Read?Snv?ID?%d?failedrn",??BLE_NVID_USER_CFG_START);

????}

????

????//?Start?Bond?Manager

????VOID?GAPBondMgr_Register(?&simpleBLEPeripheral_BondMgrCBs?);

????//?Set?timer?for?first?periodic?event

????osal_start_timerEx(?simpleBLEPeripheral_TaskID,?SBP_PERIODIC_EVT,?SBP_PERIODIC_EVT_PERIOD?);

?

????return?(?events?^?SBP_START_DEVICE_EVT?);

??}

?

?

在串口接收事件中将接收到的数据存储到snv,示例代码如下:

if?(?events?&?UART_EVENT?)

??{

????HalLcdWriteString(?(char*)SerialRxBuf,?HAL_LCD_LINE_6?);????//?在第5行显示启动信息

????//HalUARTWrite(HAL_UART_PORT_0,?SerialRxBuf,?osal_strlen(SerialRxBuf));

?

????if(SUCCESS?==?osal_snv_write(?BLE_NVID_USER_CFG_START,??osal_strlen(SerialRxBuf),?SerialRxBuf))

????{

????????SerialPrintf("Save?"%s"?to?Snv?ID?%d?successrn",?BLE_NVID_USER_CFG_START);

????}

????osal_memset(SerialRxBuf,?0,?128);

????return?(events?^?UART_EVENT);

??}

?

??//?Discard?unknown?events

??return?0;

}

?

运行结果如下

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读