ML307R OpenCPU 数据保存文件系统fs使用

一、函数介绍

二、实现数据保存

三、代码下载地址

一、函数介绍

以下是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使用 代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/332277.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的4S店车辆管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

别人不愿意教,那我来教你Simulink建模(二)【语法知识】【原创分享】

文章目录 前言节点和状态的区别?local 和非 local 的区别?事件的作用?Bus 总线?Memory 模块?caller用法?自己瞎练习的(我也不知道为啥会多出来.h文件)自己瞎练习的(这个没有多出来.h文件)autosar实例学习前言 继续更新去年的博文系列,请君切记,师父领进门修行在个…

Django 里的静态资源调用

静态资源&#xff1a;图片&#xff0c;CSS, JavaScript 一共有两种方法 第一种方法 在项目的文件夹里创建名为 static 文件夹 在该文件夹里&#xff0c;添加静态资源 在 settings.py 里添加路径 import os# Static files (CSS, JavaScript, Images) # https://docs.djan…

多商户消费券系统源码(ThinkPHP+FastAdmin+微信公众号)

打造智能促销新体验 一、引言&#xff1a;消费券系统的时代意义 在当今这个数字化高速发展的时代&#xff0c;电子商务和移动支付已经成为人们日常生活的重要组成部分。随着市场竞争的加剧&#xff0c;多商户消费券系统作为一种创新的促销手段&#xff0c;正逐渐受到商家和消…

C++学习/复习4--与类相关的概念/默认成员函数/运算符重载/Date类实现案例

一、类和对象 1.本章概要 2.C中的结构体(struct与class) 升级为类 &#xff08;1&#xff09;类及成员函数的两种定义方式 声明与定义分离 &#xff08;2&#xff09;权限 注意1&#xff1a;struct/class在权限上的区别 &#xff08;3&#xff09;封装 &#xff08;4&#x…

功率电感设计方法2:实例

文章目录 1&#xff1a;美磁的选项手册截图2&#xff1a;设计步骤2.1&#xff1a;设计需求2.2:选择磁芯材料2.3&#xff1a;选择磁芯2.4 查询 A L A_{L} AL​自感系数2.5 初算匝数2.6重新校准验算感量 3&#xff1a;后续 绕线因子4&#xff1a;日常壁纸分享 参考手册链接 1&…

iOS App上架全流程及审核避坑指南

App Store作为苹果官方的应用商店&#xff0c;审核严格周期长一直让用户头疼不已&#xff0c;很多app都“死”在了审核这一关&#xff0c;那我们就要放弃iOS用户了吗&#xff1f;当然不是&#xff01;本期我们从iOS app上架流程开始梳理&#xff0c;详细了解下iOS app上架的那些…

移动云以深度融合之服务,令“大”智慧贯穿云端

移动云助力大模型&#xff0c;开拓创新领未来。 云计算——AI模型的推动器。 当前人工智能技术发展的现状和趋势&#xff0c;以及中国在人工智能领域的发展策略和成就。确实&#xff0c;以 ChatGPT 为代表的大型语言模型在自然语言处理、文本生成、对话系统等领域取得了显著的…

python数据分析-CO2排放分析

导入所需要的package import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import datetime %matplotlib inline plt.rcParams[font.sans-serif] [KaiTi] #中文 plt.rcParams[axes.unicode_minus] False #负号 数据清洗…

PLC_博图系列☞R_TRIG:检测信号上升沿

PLC_博图系列☞R_TRIG&#xff1a;检测信号上升沿 文章目录 PLC_博图系列☞R_TRIG&#xff1a;检测信号上升沿背景介绍R_TRIG&#xff1a; 检测信号上升沿说明参数示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 R_TRIG 背景介绍 这是一篇关于PLC编程的文章&a…

云计算-关系型数据库(Relational Database)

关系数据库服务&#xff08;RDS&#xff09;&#xff08;Relational Database Service (RDS)&#xff09; Amazon RDS 可用于在云中设置和运行关系数据库。它支持多种数据库实例类型以及多个数据库引擎&#xff0c;如 Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle 数据库…

gfast:基于全新Go Frame 2.3+Vue3+Element Plus构建的全栈前后端分离管理系统

gfast&#xff1a;基于全新Go Frame 2.3Vue3Element Plus构建的全栈前后端分离管理系统 随着信息技术的飞速发展和数字化转型的深入&#xff0c;后台管理系统在企业信息化建设中扮演着越来越重要的角色。为了满足市场对于高效、灵活、安全后台管理系统的需求&#xff0c;gfast应…

零基础学Java第二十三天之网络编程Ⅱ

1. InetAddress类 用来表示主机的信息 练习&#xff1a; C:\Windows\system32\drivers\etc\ hosts 一个主机可以放多个个人网站 www.baidu.com/14.215.177.37 www.baidu.com/14.215.177.38 www.taobao.com/183.61.241.252 www.taobao.com/121.14.89.253 2. Socket 3.…

Windows11平台在VS2022上通过CMake安装C++绘图库ROOT库

Root库是一个功能强大的开源软件框架&#xff0c;用于数据分析、可视化和存储。它最初是为高能物理实验设计的&#xff0c;但现在已经广泛应用于各种科学领域和工程应用中。Root库使用C编写&#xff0c;提供了许多用于数据处理和分析的工具和算法。它的核心功能包括数据存储、数…

tcpdump源码分析

进入tcpdump.c&#xff08;函数入口&#xff09;之前&#xff0c;先看一些头文件netdissect.h里定义了一个数据结构struct netdissect_options来描述tcdpump支持的所有参数动作&#xff0c;每一个参数有对应的flag, 在tcpdump 的main 里面&#xff0c; 会根据用户的传入的参数来…

C#基础语言

​​​​ 目录 一个c# 程序主要包括以下部分&#xff1a;​​​​​​​ 标识符 C# 关键字 C# 数据类型 值类型&#xff08;Value types&#xff09; 引用类型&#xff08;Reference types&#xff09; 对象&#xff08;Object&#xff09;类型 动态&#xff08;Dynam…

总是等不是办法,向媒体投稿你得学会用新方法

初入信息宣传领域,我怀揣着对文字的热爱与传播价值的热情,肩负起了单位活动的宣传报道重任。那时的我,满脑子都是传统的投稿思维:精心撰写每一篇稿件,然后逐一搜寻各大媒体的投稿邮箱,一封封邮件满怀期待地发出,像播撒希望的种子,渴望在广袤的媒体土壤中生根发芽。然而,理想很丰…

YOLOv10尝鲜测试五分钟极简配置

最近清华大学团队又推出YOLOv10&#xff0c;真是好家伙了。 安装&#xff1a; pip install supervision githttps://github.com/THU-MIG/yolov10.git下载权重&#xff1a;https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 预测&#xff1a; from ult…

C++笔记:三种适配器(分别修饰函数、迭代器、容器)

Algorithms看不见Containers&#xff0c;对其一无所知。所以&#xff0c;它所需要的一切信息都必须从iterators取得&#xff0c;而iterators&#xff08;由Containers提供&#xff09;必须能够回答Algorithm的所有提问&#xff0c;才能搭配该Algorithm的所有操作。 1. C 标准库…

国内首个智能体生态大会!2024百度万象大会定档5月30日

最近&#xff0c;百度悄悄「上新」了几个AI神器。 百度搜索上线「互动」功能&#xff0c;可以实时问答&#xff0c;查询信息就像聊天一样简单&#xff0c;还可以艾特相关智能体&#xff0c;更细致精确地满足个性化需求&#xff0c;比如去新加坡旅游&#xff0c;可以让新加坡旅…