一、函数介绍
二、实现数据保存
三、代码下载地址
一、函数介绍
以下是cm_fs.h里面的函数介绍
/**
* @brief 文件指针定位
*
* @param [in] fd 文件描述符
* @param [in] offset 指针偏移量
* @param [in] base 偏移起始点,CM_FS_SEEK_SET:文件开头 CM_FS_SEEK_CUR:当前位置 CM_FS_SEEK_END:文件末尾
*
* @return
* = 0 - 成功 \n
* < 0 - 失败
*
* @details offset不支持为负数
*/
int32_t cm_fs_seek(int32_t fd, int32_t offset, int32_t base);
/**
* @brief 删除文件
*
* @param [in] file_name 文件路径
*
* @return
* >= 0 - 成功 \n
* < 0 - 失败
*/
int32_t cm_fs_delete(const char *file_name);
/**
* @brief 更改文件名
*
* @param [in] src 原文件名
* @param [in] dest 新文件名
*
* @return
* = 0 - 成功 \n
* < 0 - 失败
*/
int32_t cm_fs_move(const char *src, const char *dest);
/**
* @brief 检查文件是否存在
*
* @param [in] file_name 文件名称
*
* @return
* = 1 - 存在 \n
* = 0 - 不存在
*
* @details 文件系统中无路径/文件夹功能,勿在path入参中传入路径信息
*/
int32_t cm_fs_exist(const char *file_name);
/**
* @brief 获取文件大小
*
* @param [in] file_name 文件路径
* @return
*
* >= 0 - 文件长度 \n
* < 0 - 操作失败
*
* @details More details
*/
int32_t cm_fs_filesize(const char *file_name);
/**
* @brief 获取文件系统信息
*
* @param [out] info 文件系统信息
*
* @return
* = 0 - 成功 \n
* < 0 - 失败
*/
int32_t cm_fs_getinfo(cm_fs_system_info_t *info);
/* 模组使用LittleFS文件系统,请按照下文描述的文件打开方式使用。错误使用时文件系统无法保证文件功能正常 */
#define CM_FS_RB (0) /*!< rb,打开一个二进制文件,文件必须存在,只允许读 */
#define CM_FS_WB (1) /*!< wb,新建一个二进制文件,已存在的文件内容清空,只允许写 */
#define CM_FS_AB (2) /*!< ab,打开或新建一个二进制文件,只允许在文件末尾追写 */
#define CM_FS_WBPLUS (3) /*!< wb+,新建一个二进制文件,已存在的文件内容清空,允许读写 */
#define CM_FS_ABPLUS (4) /*!< ab+,打开或新建一个二进制文件,可读,只允许在文件末尾追写 */
#define CM_FS_RBPLUS (5) /*!< rb+,打开一个二进制文件,文件必须存在,允许读写 */
#define CM_FS_SEEK_SET (0) /*!< SEEK_SET,文件开头 */
#define CM_FS_SEEK_CUR (1) /*!< SEEK_CUR,当前位置 */
#define CM_FS_SEEK_END (2) /*!< SEEK_END,文件结尾 */
二、实现数据保存
实验目的 记录模块上电次数,就是每次上电累加一次,并且统计保存次数。
2.1 封装了一个写的函数,传递要保存的数据,打开文件 #define FILENAME "DATA",宏定义文件,写数据之后再关闭
void fs_write_data(unsigned int num)
{
int fd = 0;
fd = cm_fs_open(FILENAME,CM_FS_RBPLUS);/*!< rb+,打开一个二进制文件,文件必须存在,允许读写 */
if(fd >= 0)
{
// cm_fs_seek(fd,0,CM_FS_SEEK_SET);
cm_fs_write(fd, &num, sizeof(uint32_t));
cm_fs_close(fd);
}
}
2.2 封装一个读函数
unsigned int fs_read_data(void)
{
int fd = 0;
uint32_t num = 0;
fd = cm_fs_open(FILENAME,CM_FS_RB);
if(fd >= 0)
{
cm_fs_read(fd, &num, sizeof(uint32_t));
cm_fs_close(fd);
}
return num;
}
2.3 初始化函数 在这里面首先判断文件是否存在,如果没有存在创建一个文件,然后读取数据加1并保存打印num的值
void bsp_fs_init(void)
{
int ret = 0;
uint32_t num = 0;
ret = cm_fs_exist(FILENAME);
if(ret == 0)//不存在
{
int fd = 0;
fd = cm_fs_open(FILENAME,CM_FS_WBPLUS);/*!< wb+,新建一个二进制文件,已存在的文件内容清空,允许读写 */
cm_fs_write(fd, &num, sizeof(uint32_t));
cm_fs_close(fd);
}
num = fs_read_data();
num = num +1;
fs_write_data(num);
num = fs_read_data();
my_printf("num = %d\r\n",num);
}
2.4 实验现象 可以看到每次上电num都增加了1
三、代码下载地址
ML307R OpenCPU 数据保存文件系统fs使用 代码