第二十节 协议栈Flash数据存储
2015-11-28 09:48
267 查看
第二十节 协议栈Flash数据存储
CC254x自带了256K Flash,这256K的储存空间不仅可以储存代码,也可以储存用户的数据,协议栈自带了SNV管理代码,我们只需要学会使用即可。
SNV的使用只有两个函数,分别是读函数osal_snv_read和写函数osal_snv_write,在SNV的储存中,储存的每个数据都有一个唯一的ID,SNV也正是利用这个ID来管理储存在Flash中的数据,在BLE的协议栈中,蓝牙自身数据储存用了一部分ID,我们储存的数据ID不可使用这些ID,在bcomdef.h中有这些ID的定义。
![](http://img.blog.csdn.net/20151128095450916?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下面我们往SNV中存入串口接收到的数据,然后开发板断电重启后读取出这串字符串并通过串口发送出去,来演示SNV的断电保存。
首先我们定义一个我们储存数据的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
我们在启动事件中读取SNV中0x80的值并通过串口输出读取结果,如果读取成功,则会将读取结果打印到PC端,如果读取失败,则会提示读取失败。
![](http://img.blog.csdn.net/20151128095609170?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在串口接收事件中将接收到的数据存入SNV中,并且也进行相应的提示。
![](http://img.blog.csdn.net/20151128095643538?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
将工程编译下载后,可以看到现象如下:
![](http://img.blog.csdn.net/20151128095702388?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
第一次上电可以看到,提示读取数据失败了,说明第一次运行时是没有存储数据的,接下来我们通过串口发送字符串 MT254xboard SNV Test字符串。
![](http://img.blog.csdn.net/20151128095721533?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看到成功的将我们发送过去的字符存入了SNV中,那是否成功存入呢?我们将开发板断电后重启,看看第二次上电是否能够读取出我们存入的数据。
![](http://img.blog.csdn.net/20151128095751423?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
重启后可以发现我们成功的读取出了第一次存入的数据,说明我们成功的将数据存入了SNV中。
本文章转载自
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx
请勿用于商业
CC254x自带了256K Flash,这256K的储存空间不仅可以储存代码,也可以储存用户的数据,协议栈自带了SNV管理代码,我们只需要学会使用即可。
SNV的使用只有两个函数,分别是读函数osal_snv_read和写函数osal_snv_write,在SNV的储存中,储存的每个数据都有一个唯一的ID,SNV也正是利用这个ID来管理储存在Flash中的数据,在BLE的协议栈中,蓝牙自身数据储存用了一部分ID,我们储存的数据ID不可使用这些ID,在bcomdef.h中有这些ID的定义。
下面我们往SNV中存入串口接收到的数据,然后开发板断电重启后读取出这串字符串并通过串口发送出去,来演示SNV的断电保存。
首先我们定义一个我们储存数据的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
我们在启动事件中读取SNV中0x80的值并通过串口输出读取结果,如果读取成功,则会将读取结果打印到PC端,如果读取失败,则会提示读取失败。
在串口接收事件中将接收到的数据存入SNV中,并且也进行相应的提示。
将工程编译下载后,可以看到现象如下:
第一次上电可以看到,提示读取数据失败了,说明第一次运行时是没有存储数据的,接下来我们通过串口发送字符串 MT254xboard SNV Test字符串。
可以看到成功的将我们发送过去的字符存入了SNV中,那是否成功存入呢?我们将开发板断电后重启,看看第二次上电是否能够读取出我们存入的数据。
重启后可以发现我们成功的读取出了第一次存入的数据,说明我们成功的将数据存入了SNV中。
本文章转载自
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx
请勿用于商业
相关文章推荐
- 数据结构 — 二叉树(创建、遍历)java实现
- Ceph分布式存储系统介绍
- (一) Nepxion-Thunder分布式RPC集成框架 - 介绍
- HDU1175 DFS 转弯问题思路
- Python篇----面向对象程序设计(二)(属性和方法篇)
- java是如何实现跨平台的
- matlab FDR校正
- union, struct, enum 的 大小区别
- loadrunner 使用问题记录并分析和理解
- hibernate和spring和struts2工作原理
- [LeetCode]Shortest Word Distance III
- mybatis示例
- 第十九节 协议栈五向按键
- 身份证正则表达式
- LINUX 6.x 内核升级全过程
- Activity的启动过程
- PostgreSQL与RPM
- android移动view之后刷新布局导致移动后的view归回原位置2
- 07-渲染流程-5-Sprite渲染-QuadCommand
- HBase过滤器