设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2716|回复: 1
打印 上一主题 下一主题

关于NRF52832 FDS使用

[复制链接]

2

主题

5

帖子

66

积分

注册会员

Rank: 2

积分
66
跳转到指定楼层
楼主
zhongfushun 发表于 2019-9-6 10:36:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
NRF52832使用SDK12.3,使用库中的FDS功能,参照SDK15.0官方FDS例程,出现以下问题,百思不得其解...
首先定义record_chunk.length_words = 30,即打算写入30个字节到FLASH,其次设m_data_record.data.num_chunks = 1;然后使用fds_record_write函数写入30个数据,回调函数观察到写入成功,此时使设备进入睡眠状态,一会后再唤醒,然后用fds_record_find找到记录,再用fds_record_open打开并读取,这时读回来的前14个是正常数据,后16个全为0,请问这应该从哪几方面入手确认?


写函数:
ret_code_t data_write(uint32_t index,uint32_t file_id,uint32_t record_id,int16_t *data,uint32_t length_words)
{

                ret_code_t rc;       
                fds_record_chunk_t  record_chunk;
                if(index > 3){
                        return FDS_ERR_INVALID_ARG;
                }
                if(length_words > 3000){
                        return FDS_ERR_INVALID_ARG;
                }
                if(data == NULL){
                        return FDS_ERR_INVALID_ARG;
                }
                record_chunk.p_data = data;       
                record_chunk.length_words = length_words;

               
                m_data_record.file_id = file_id;
                m_data_record.key = record_id;
                m_data_record.data.p_chunks = &record_chunk;
                m_data_record.data.num_chunks = 1;

                rc = fds_record_write(NULL, &m_data_record);//D′¼Ç¼oíêy¾Y
    APP_ERROR_CHECK(rc);
                return rc;
        }

读函数:
ret_code_t data_read(uint32_t index,uint32_t file_id,uint32_t record_id,int16_t *data,uint32_t *len)
{
                ret_code_t rc;
                fds_flash_record_t  flash_record = {0};
                //fds_record_desc_t   record_desc;
                //fds_find_token_t    ftok;
        if(data == NULL)return FDS_ERR_INVALID_ARG;
        if(len == NULL)return FDS_ERR_INVALID_ARG;
        if(index > 3)return FDS_ERR_INVALID_ARG;
       
                memset(&tok, 0x00, sizeof(fds_find_token_t));
                                // Loop until all records with the given key and file ID have been found.
                rc = fds_record_find(file_id, record_id, &desc, &tok);// == FDS_SUCCESS
                if(rc == FDS_SUCCESS){
                                rc = fds_record_open(&desc, &flash_record);
                                APP_ERROR_CHECK(rc);
                                //data = (int16_t *)flash_record.p_data;
                                *len = flash_record.p_header->tl.length_words;
                                memcpy(data, (int16_t *)flash_record.p_data, flash_record.p_header->tl.length_words);
                                // Access the record through the flash_record structure.
                                // Close the record when done.
                                rc = fds_record_close(&desc);// != FDS_SUCCESS)
                                APP_ERROR_CHECK(rc);
                       
                                                // Handle error.
                               
                        }else {
        /* System config not found; write a new one. */
//        rc = fds_record_write(&desc, &m_dummy_record);//ÖØDÂD′¼Ç¼
//        APP_ERROR_CHECK(rc);
    }
                       
                return rc;
               
               
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

2

主题

5

帖子

66

积分

注册会员

Rank: 2

积分
66
沙发
 楼主| zhongfushun 发表于 2019-9-9 11:19:14 | 只看该作者
已解决,读的时候 memcpy(data, (int16_t *)flash_record.p_data, flash_record.p_header->tl.length_words*(sizeof(uint32_T)));因为写的时候是字对齐的。
回复 支持 反对

使用道具 举报

Archiver|手机版|小黑屋|Comsenz Inc.   

GMT+8, 2024-4-30 00:14 , Processed in 0.111926 second(s), 28 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表