更新SD卡文件列表到tablew中的list

#include"SD.h"#include"ff.h"#include"usart.h"#include<string.h>#include"lvgl.h"#include<stdio.h>// 全局 FatFs 对象和文件操作变量 FATFS fs;/* FatFs 文件系统对象 */ FIL fil;/* 文件对象 */ FRESULT fres;/* FatFs 函数返回结果 */// 文件列表存储char file_list[MAX_FILES][MAX_NAME_LEN];int file_count =0;// 打印文件信息(内部使用)staticvoidprint_file_info(FILINFO* fno);voidList_SD_Files(void){ DIR dir; FILINFO fno; UINT i =0;char path[]="0:";// 挂载文件系统 fres =f_mount(&fs, path,1);if(fres != FR_OK){HAL_UART_Transmit(&huart1,(uint8_t*)"failed",6,1000);return;}HAL_UART_Transmit(&huart1,(uint8_t*)"successful",10,1000);HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);// 打开根目录 fres =f_opendir(&dir, path);if(fres != FR_OK){HAL_UART_Transmit(&huart1,(uint8_t*)"failedFF",8,1000);return;}// 读取目录项while(1){ fres =f_readdir(&dir,&fno);if(fres != FR_OK || fno.fname[0]==0)break;if(strcmp(fno.fname,".")==0||strcmp(fno.fname,"..")==0)continue;print_file_info(&fno);}// 清理资源f_closedir(&dir);f_mount(NULL, path,0);}staticvoidprint_file_info(FILINFO* fno){// 打印文件名HAL_UART_Transmit(&huart1,(uint8_t*)fno->fname,strlen(fno->fname),1000);strncpy(file_list[file_count], fno->fname, MAX_NAME_LEN -1); file_list[file_count][MAX_NAME_LEN -1]='\0'; file_count++;HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);}intSD_ReadFile(char* flname){char path[]="0:";char line[100];// 挂载文件系统 fres =f_mount(&fs, path,1);if(fres != FR_OK)return(int)fres;// 打开文件 fres =f_open(&fil, flname, FA_READ);if(fres != FR_OK){f_mount(NULL, path,0);return(int)fres;}// 逐行读取while(f_gets(line,sizeof(line),&fil)){HAL_UART_Transmit(&huart1,(uint8_t*)line,strlen(line),1000);HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);}// 关闭文件并卸载f_close(&fil);f_mount(NULL, path,0);return(int)fres;}intSD_WriteFile(char* newfname,char* data, UINT* bw){char path[]="0:"; UINT len =strlen(data);// 挂载文件系统 fres =f_mount(&fs, path,1);if(fres != FR_OK)return(int)fres;// 创建/打开文件 fres =f_open(&fil, newfname, FA_CREATE_ALWAYS | FA_WRITE | FA_READ);if(fres != FR_OK){f_mount(NULL, path,0);return(int)fres;}// 写入数据 fres =f_write(&fil, data, len, bw);if(fres == FR_OK){HAL_UART_Transmit(&huart1,(uint8_t*)"Write successful",16,1000);HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);}else{HAL_UART_Transmit(&huart1,(uint8_t*)"Write failed",12,1000);HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);}// 刷新并关闭f_sync(&fil);f_close(&fil);f_mount(NULL, path,0);return(int)fres;}// 将SD卡文件列表更新到LVGL界面 - 仅显示文件名voidUpdate_SD_Files_To_LVGL(lv_obj_t* tab_page){if(tab_page ==NULL){//HAL_UART_Transmit(&huart1, (uint8_t*)"Tab page is NULL\r\n", 18, 1000);return;}// 清除tab页面中的所有子对象lv_obj_clean(tab_page);// 为每个文件创建标签(只显示文件名)for(int i =1; i < file_count && i < MAX_FILES; i++){lv_obj_t* file_label =lv_label_create(tab_page);lv_label_set_text(file_label, file_list[i]);// 设置样式:文件名使用等宽字体lv_obj_set_style_text_font(file_label,&lv_font_montserrat_14,0);lv_obj_set_style_text_color(file_label,lv_color_hex(0x000000),0);// 垂直排列,每行间隔25像素lv_obj_align(file_label, LV_ALIGN_TOP_LEFT,10,10+(i *25));}// 如果没有文件,显示提示信息if(file_count ==0){lv_obj_t* no_file_label =lv_label_create(tab_page);lv_label_set_text(no_file_label,"No files found");lv_obj_set_style_text_color(no_file_label,lv_color_hex(0x888888),0);lv_obj_align(no_file_label, LV_ALIGN_CENTER,0,0);}//HAL_UART_Transmit(&huart1, (uint8_t*)"Files displayed on LVGL (only filenames)\r\n", 42, 1000);}

.h

#ifndefFATFS_UTIL_H#defineFATFS_UTIL_H#include"ff.h"#include"main.h"#include"lvgl.h"#defineMAX_FILES500// 最大文件数#defineMAX_NAME_LEN50// 文件名最大长度(包含 '\0')externchar file_list[MAX_FILES][MAX_NAME_LEN];externint file_count;voidList_SD_Files(void);intSD_ReadFile(char* flname);intSD_WriteFile(char* newfname,char* data, UINT* bw);// LVGL界面更新函数voidUpdate_SD_Files_To_LVGL(lv_obj_t* tabview);#endif/* FATFS_UTIL_H */

调用List_SD_Files()后调用Update_SD_Files_To_LVGL(guider_ui.screen_1_list_1);即可显示,传入要传入的图框

Read more

GitHub 上 10 大热门开源 AI Agent 项目综述(2025 最新)

随着 AI 技术的快速发展,AI Agent(AI 智能体)正成为科技界最炙手可热的话题之一。这些能够自主感知、决策和行动的 AI 系统正在改变我们与技术交互的方式。而在这场 AI 革命中,开源社区扮演着至关重要的角色。 GitHub,作为全球最大的开源代码托管平台,汇聚了众多创新的 AI Agent 项目。这些项目不仅展示了 AI 技术的最新进展,还为开发者和研究者提供了宝贵的学习和实验资源。在本文中,我们将详细介绍 10 个在 GitHub 上广受欢迎的开源 AI Agent 项目,探讨它们的特点、应用场景以及对未来 AI 发展的影响,以下排名不分先后。 AutoGPT * GitHub Stars: 166k+ * 链接: https://github.com/Significant-Gravitas/AutoGPT

除了 OpenClaw,今天 AI 热榜还有什么值得看?我把 5 个重点方向讲清楚了

除了 OpenClaw,今天 AI 热榜还有什么值得看?我把 5 个重点方向讲清楚了

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 除了 OpenClaw,今天 AI 热榜还有什么值得看?我把 5 个重点方向讲清楚了 * 除了 OpenClaw,今天 AI 热榜还有什么值得看?我把 5 个重点方向讲清楚了 * 1. 我先说结论:今天这波 AI 热榜,最重要的不是“谁最火”,而是“风向变了” * 2. GoogleCloudPlatform / generative-ai:平台生态正在成为真正的护城河 * 3. MiroFish:群体智能和多智能体,开始从概念走向更具体的产品叙事

Spring AI系列之RAG(检索增强生成)从原理到实战指南

Spring AI系列之RAG(检索增强生成)从原理到实战指南

Spring AI系列之RAG(检索增强生成)从原理到实战指南 在LLM(大语言模型)时代,如何让AI既拥有通用能力又具备专业知识?RAG技术给出了完美答案。本文将基于Spring AI生态,深入剖析RAG的核心原理、实现细节与优化策略。 一、为什么需要RAG? 在深入了解RAG之前,我们需要先认识传统LLM的局限性: 缺陷类型具体表现RAG解决方案知识截止模型知识有截止日期,无法获取最新信息实时检索外部知识库幻觉问题自信地生成看似合理但实际错误的内容基于检索到的真实信息生成上下文限制长文本处理能力有限只检索最相关的上下文片段领域专业度通用模型缺乏垂直领域深度知识外挂专业领域知识库 比喻理解:如果将LLM比作一个"高中毕业生",那么: * Fine-tuning(微调) = 让他花7年时间去医学院学习,然后成为医生 * RAG = 给他配备了一群专业主任医师作为顾问,遇到问题时先咨询专家再作答 二、RAG核心架构解析 2.1 整体工作流程 RAG的工作流程可以分为两大阶段:离线索引(Indexing) 和 在线检索生成(Retrieval & Gene

2026全球最强十大AI大模型

1. GPT-5.2 定位:深度推理之王。 优势: *  极致推理:在数学、物理、逻辑谜题及复杂代码架构设计上仍保持全球第一,尤其是其“Thinking”模式,能处理极度复杂的链式推理任务。 缺点: * 成本高昂:API调用价格昂贵,不适合大规模低成本应用。 2.Gemini 3 Pro (Google) 定位:原生多模态霸主,长上下文王者。 优势: * 超长上下文:支持数百万Token的上下文窗口,能一次性处理整本书、长达数小时的视频或大型代码库。 * 多模态融合:真正的“原生”多模态,对图像、音频、视频的理解能力远超其他模型,能直接分析视频中的细微动作和语音语调。 * 谷歌生态:与Google Workspace、Search深度集成,实时信息检索能力极强。 缺点: * 幻觉问题:在处理极度冷门的知识时,偶尔会出现“自信地胡说八道”的情况。