ble学习笔记十五----------ble协议栈之flash数据存储实验
协议栈flash数据存储实验 Cc2540自带了256k的flash,可以存储数据也可以存储代码 协议栈自带了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文件 添加头文件
然后在启动事件中添加读取snv中0x80的值 ? //启动事件 ??if?(?events?&?SBP_START_DEVICE_EVT?) ??{ ????//?Start?the?Device ????VOID?GAPRole_StartDevice(?&simpleBLEPeripheral_PeripheralCBs?); ????Serial_Init();??????//?串口初始化 ???? ????//读取snv中0x80的值 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; } ? 运行结果如下 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |