一、函数介绍
二、实现数据保存
三、代码下载地址
一、函数介绍
以下是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使用 代码