NRF52832的FDS程序,参考非蓝牙例程修改而来(需要增加DFU的基础上只要增加如下程序即可解决)
/* Dummy configuration data. */
static configuration_t m_dummy_cfg =
{
.config1_on = false,
.config2_on = true,
.boot_count = 0x0,
.device_name = "dummy",
}; /* A record containing dummy configuration data. */
static fds_record_t const m_dummy_record =
{
.file_id = CONFIG_FILE,
.key = CONFIG_REC_KEY,
.data.p_data = &ucheck_v,//&m_dummy_cfg,
/* The length of a record is always expressed in 4-byte units (words). */
.data.length_words = (sizeof(ucheck_v) + 3) / sizeof(uint32_t),
}; /* Keep track of the progress of a delete_all operation. */
//static struct
//{
// bool delete_next; //!< Delete next record.
// bool pending; //!< Waiting for an fds FDS_EVT_DEL_RECORD event, to delete the next record.
//} m_delete_all; void user_data_update(void)
{
ret_code_t rc; // NRF_LOG_INFO("Reading flash usage statistics..."); fds_stat_t stat = {0}; rc = fds_stat(&stat);
APP_ERROR_CHECK(rc); NRF_LOG_INFO("Found %d valid records.", stat.valid_records);
NRF_LOG_INFO("Found %d dirty records (ready to be garbage collected).", stat.dirty_records); fds_record_desc_t desc = {0};
fds_find_token_t tok = {0}; rc = fds_record_find(CONFIG_FILE, CONFIG_REC_KEY, &desc, &tok); if (rc == FDS_SUCCESS)
{
/* A config file is in flash. Let's update it. */
fds_flash_record_t config = {0}; /* Open the record and read its contents. */
rc = fds_record_open(&desc, &config);
APP_ERROR_CHECK(rc); /* Copy the configuration from flash into m_dummy_cfg. */
//memcpy(&ucheck_v, config.p_data, sizeof(check_V));//这里是更新数据,所以不能把旧数据复制过来了 NRF_LOG_INFO("Config file found, updating boot count to %d.", ucheck_v.boot_count); /* Update boot count. */
ucheck_v.boot_count++; /* Close the record when done reading. */
rc = fds_record_close(&desc);
APP_ERROR_CHECK(rc); /* Write the updated record to flash. */
rc = fds_record_update(&desc, &m_dummy_record);
APP_ERROR_CHECK(rc);
}
else
{
/* System config not found; write a new one. */
NRF_LOG_INFO("Writing config file..."); rc = fds_record_write(&desc, &m_dummy_record);
APP_ERROR_CHECK(rc);
} //cli_start();
}
void user_init_data_flash(void)
{
ret_code_t rc;
fds_record_desc_t desc = {0};
fds_find_token_t tok = {0}; rc = fds_record_find(CONFIG_FILE, CONFIG_REC_KEY, &desc, &tok); if (rc == FDS_SUCCESS)
{
/* A config file is in flash. Let's update it. */
fds_flash_record_t config = {0}; /* Open the record and read its contents. */
rc = fds_record_open(&desc, &config);
APP_ERROR_CHECK(rc); /* Copy the configuration from flash into m_dummy_cfg. */
memcpy(&ucheck_v, config.p_data, sizeof(check_V)); NRF_LOG_INFO("Config file found, updating boot count to %d.", ucheck_v.boot_count); /* Update boot count. */
ucheck_v.boot_count++; /* Close the record when done reading. */
rc = fds_record_close(&desc);
APP_ERROR_CHECK(rc); /* Write the updated record to flash. */
rc = fds_record_update(&desc, &m_dummy_record);
APP_ERROR_CHECK(rc);
} }
在增加了DFU之后的52832程序,只要增加如下程序就可以完成FDS的数据保存
NRF52832的FDS程序,参考非蓝牙例程修改而来(需要增加DFU的基础上只要增加如下程序即可解决)的更多相关文章
- (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录 (Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1
package homework001; import java.util.HashMap; import java.util.Scanner; public class Map { public s ...
- QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例
QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例 部分代码: // 创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束 QMenu *pDialog = mBar->ad ...
- 操作系统的发展史(并发与并行)<异步与同步>《进程与程序》[非堵塞与堵塞]
目录 一:一:手工操作 -- 穿孔卡片 1.简介 二:手工操作方式两个特点: 三:批处理 -- 磁带存储 1.联机批处理系统 2.脱机批处理系统 3.多道程序系统 4.多道批处理系统 四:总结发展史 ...
- C#取得Web程序和非Web程序的根目录的N种取法
取得控制台应用程序的根目录方法方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.BaseDi ...
- 从此走上一条iOS程序猿不归路。。。
新的城市,新的生活!前不久刚刚结束了苦逼的面试找工作之旅,期间也小有收货,如今正处年底工作闲暇之余,将前一阵子陆陆续续的总结整理了一下,本人菜鸟程序猿一只,水平有限,本文总结的知识不算深入,比较浅显, ...
- Lua 学习之基础篇九<Lua 协同程序(Coroutine)>
引言 讲到协程,首先来介绍一下线程和协程的区别 lua协程和多线程 相同之处:拥有自己独立的桟.局部变量和PC计数器,同时又与其他协程共享全局变量和其他大部分东西 不同之处:一个多线程程序可以同时运行 ...
- 应用程序框架实战十四:DDD分层架构之领域实体(基础篇)
上一篇,我介绍了自己在DDD分层架构方面的一些感想,本文开始介绍领域层的实体,代码主要参考自<领域驱动设计C#2008实现>,另外参考了网上找到的一些示例代码. 什么是实体 由标识来区分的 ...
- 基于php基础语言编写的小程序之计算器
基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...
- 【转】appStore上传苹果应用程序软件发布流程
转载地址:http://blog.sina.com.cn/s/blog_68661bd801019uzd.html 首先确定帐号是否能发布, https://developer.apple.com/a ...
- appStore上传苹果应用程序软件发布流程(之前都是同事发,复制一份备用)
首先确定帐号是否能发布, https://developer.apple.com/account,如果你打开Provisioning Portal,然后点击DisTribution看到的是下图中那样, ...
随机推荐
- RSA 非对称加密
原文链接:https://www.jianshu.com/p/d56a72013392 RSA 是一种非对称加密算法,在实际业务中经常使用此算法对数据进行加密.但是它的加解密速度较慢,不太适用于高并发 ...
- 当前工程中typescritpt依赖包与依赖包中依赖包类型不一致如何解决
在开发中,遇到文件中引入webpack,但是webpack.ICompiler不一致的情况 //import webpack from 'webpack'; import webpackHot fro ...
- P1982 [NOIP2013 普及组] 小朋友的数字 题解
目录 简单版 题目 code 本题 code 简单版 先要会做这道题 题目 P1115 最大子段和https://www.luogu.com.cn/problem/P1115 这道题其实是动态规划,d ...
- 光纤加速卡第410篇:基于XCVU9P+ C6678的40G光纤的加速卡 光纤的加速卡 无线通信
光纤加速卡第410篇:基于XCVU9P+ C6678的40G光纤的加速卡 光纤的加速卡 无线通信 基于XCVU9P+ C6678的40G光纤的加速卡 一.板卡概述 二.技术指标 • 板卡为自定义 ...
- beforeRouteLeave vue监听返回的使用方法
beforeRouteLeave(to, from, next) { console.log(this, to, from, next, "thissss"); if (to.fu ...
- jquery的网络引用地址
http://apps.bdimg.com/libs/jquery/1.6.4/jquery.js http://apps.bdimg.com/libs/jquery/1.6.4/jquery.min ...
- google api 后端打点上报
https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type ...
- 错题记录:C51同一个hex文件偶尔效果不行 的处理方法
51单片机很多方面和C语言有区别,经验下来,总结以下:1.关于变量报错:报错的原因大多是因为编译器C++版本不同,所以变量我都推荐使用驼峰命名法;2.如果同一个hex文件,或者改的代码自己认为没问题 ...
- Python面向对象编程——一些类定义(杂)
一.abstractmethod 子类必须全部实现重写父类的abstractmethod方法 非abstractmethod方法可以不实现重写 带abstractmethod方法的类不能实例化 fro ...
- Unity 简易聊天室(基于TCP)(2)
客户端用Unity开发,主要就是搭建一下聊天室的UI界面:输入框,聊天内容显示框,发送按钮 灰色背景的就是Message,也就是聊天内容的显示框,是一个Text类型,这里创建UI方面就不多讲了 在Ca ...