news 2026/6/9 15:28:23

15.rtthread之文件系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
15.rtthread之文件系统

1.概述

使用文件系统存储传感器的数据。

2.步骤

  1. 挂载SD卡
  2. 获取温湿度数据
  3. 在创建SD卡中创建文件,保存数据
  4. 将异常温湿度数据保存到SD文件中

3.关键步骤

1.SD卡热插拔处理

void FlieSystem_entry(void *parameter) { static rt_err_t result; rt_device_t dev; while(1) { dev = rt_device_find("sd0"); if (dev != RT_NULL) { if (dfs_mount("sd0", "/", "elm", 0, 0) == RT_EOK) { rt_kprintf("SD mount to / success\n"); break; } else { rt_kprintf("SD mount to / failed\n"); } } rt_thread_mdelay(500); } } static int FileSystemInit(void) { //创建sd线程 rt_thread_t thread_filesystem = rt_thread_create("file_sys", FlieSystem_entry, RT_NULL, 1024, 18, 20); if (thread_filesystem != RT_NULL) { rt_thread_startup(thread_filesystem); } } INIT_ENV_EXPORT(FileSystemInit);

2.传感器数据发送

使用邮箱或者消息队列

3.文件读写

//保存数据到SD void Sensor_DataTo_SD(char* buff) { /* 以创建和读写模式打开 /text.txt 文件,如果该文件不存在则创建该文件 */ FILE *recvdata_p0; recvdata_p0 = fopen("/Sensor_Data.cav", "a+"); if (recvdata_p0 != RT_NULL) { fputs(buff, recvdata_p0); fputs("\n", recvdata_p0); fclose(recvdata_p0); } } //从SD读取信息 void Data_ReadFSD(void) { FILE *fp; char buffer[120]; fp = fopen("/Sensor_Data.cav", "r"); if (fp != RT_NULL) { fread(buffer, sizeof(char), sizeof(buffer), fp); rt_kprintf("%s", buffer); fclose(fp); } } void Save_Data_TOSD(float data1, float data2) { if(data1 >= HIGHT_TEMPVALUE) { detect_logic.T_Count_Alarm++; } else { detect_logic.T_Count_Alarm--; if(detect_logic.T_Count_Alarm <= 0) detect_logic.T_Count_Alarm = 0; } if(detect_logic.T_Count_Alarm >= MAX_COUNTER) { detect_logic.T_Count_Alarm = MAX_COUNTER; rt_kprintf("温度超过标准!%d\n",detect_logic.T_Count_Alarm); sprintf((char*)detect_logic.Alarm_buff, "Temp:%.2f,humi:%.2f", data1, data2); //拼接到温度数组里 //保存异常数据到SD卡 Sensor_DataTo_SD((char*)detect_logic.Alarm_buff); } // if(data2 >= HIGHT_HUMIVALUE) { detect_logic.H_Count_Alarm++; } else { detect_logic.H_Count_Alarm--; if(detect_logic.H_Count_Alarm <= 0) detect_logic.H_Count_Alarm = 0; } if(detect_logic.H_Count_Alarm >= MAX_COUNTER) { detect_logic.H_Count_Alarm = MAX_COUNTER; rt_kprintf("湿度超过标准!%d\n",detect_logic.H_Count_Alarm); sprintf((char*)detect_logic.Alarm_buff, "Temp:%.2f,humi:%.2f", data1, data2); //拼接到温度数组里 //保存异常数据到SD卡 Sensor_DataTo_SD((char*)detect_logic.Alarm_buff); } }

4.温度监控线程

温度异常时,会存储到SD卡中

static void Publish_th(void *pram) { //传感器数据结构体 Sensor_msg sensor_msg; static rt_uint32_t e; static char r_buff[64]; while(1) { if (rt_event_recv(Sensor_event, EVENT_ADC_FLAG, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e) != RT_EOK) continue; //2000ms超时接收 --- if (rt_event_recv(Sensor_event, EVENT_TH_FLAG, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, rt_tick_from_millisecond(2000), &e) == RT_EOK) { //永久等待接收邮件 if(rt_mb_recv(Sensor_msg_mb, (rt_ubase_t*)&sensor_msg, RT_WAITING_FOREVER) == RT_EOK) { sprintf((char*)r_buff, "Temp:%.2f,humi:%.2f", (float)sensor_msg->temp, (float)sensor_msg->hum); //拼接到温度数组里 } rt_kputs((char*)r_buff); rt_kputs("\n"); //阈值判断逻辑 Save_Data_TOSD((float)sensor_msg->temp, (float)sensor_msg->hum); //释放内存块 rt_mp_free(sensor_msg); sensor_msg = RT_NULL; continue; } //1s超时直接存数据 //阈值判断逻辑 rt_kputs("@1s接收事件超时--存储数据\n"); Sensor_DataTo_SD((char*)r_buff); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:30:23

跨平台OA系统Word文档转存插件

河南某集团企业项目需求评估与实施记录&#xff08;基于UEditor的信创兼容方案&#xff09; 一、项目背景与核心需求 作为集团项目负责人&#xff0c;需在企业网站后台管理系统&#xff08;基于UEditor、Vue2/Vue3/React前端、SpringBoot后端&#xff09;中新增以下功能&…

作者头像 李华
网站建设 2026/6/10 9:29:11

LlamaIndex与Qwen2.5:搭建行业知识库问答机器人全攻略

一、引言 在当今信息爆炸的时代,各行业都积累了海量的文本数据,如技术文档、行业报告、客户问答记录等。如何从这些繁杂的数据中快速、准确地获取有价值的信息,成为了企业和组织面临的一大挑战。行业知识库问答机器人应运而生,它能够理解用户的问题,并在行业知识库中进行智…

作者头像 李华
网站建设 2026/6/10 9:35:52

堆垛机控制系统步FC12功能块赋值每一步目标脉冲

1、堆垛机控制系统STEP7硬件组态如下图 CPU CPU 314C-2 PN/DP 6ES7 314-6EH04-0AB0 SM 338 POS-INPUT AO2x12Bit 6ES7 332-5HB01-0AB0 2、堆垛机控制系统STEP7内部变量 3、Network1 "第一步" 4、Network2 "第二步" 5、Network3 "第三步" &qu…

作者头像 李华
网站建设 2026/6/10 11:10:01

AI物理技术加速半导体TCAD仿真

使用AI物理技术进行技术计算机辅助设计仿真 技术计算机辅助设计仿真&#xff0c;涵盖工艺仿真与器件仿真&#xff0c;是现代半导体制造的关键环节。它们实现了“虚拟制造”&#xff0c;使工程师能够在投入昂贵的物理制造流程之前&#xff0c;以数字化方式设计、构建和测试晶体管…

作者头像 李华
网站建设 2026/6/10 11:08:49

前端导入Word文档并保留图文混排的插件

企业级文档处理解决方案 作为贵州IT行业软件公司的.NET工程师&#xff0c;针对贵司在后台管理系统中增加Word粘贴和文档导入的需求&#xff0c;我提供以下专业解决方案&#xff0c;完全满足贵司的技术栈和预算要求。 技术架构设计 系统架构图 [客户端] ←HTTPS→ [Web层] ←…

作者头像 李华
网站建设 2026/6/10 11:09:58

文件管理自动化:.bat 脚本使用指南

您是否也曾被混乱的桌面和难以整理的文件所困扰&#xff1f;这篇文章的核心思想是&#xff0c;我们不必再进行繁琐的手动整理&#xff0c;而是可以通过创建简单的 .bat 自动化脚本&#xff0c;将文件管理变成一条高效的流水线&#xff0c;把脑力从重复的“数字体力活”中解放出…

作者头像 李华