RT-Thread通过SDIO接口使用SD卡,使用ulog保存日志到sd卡

2023-11-19

 开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的资源包为0.2.2,rt-thread版本为4.0.3。

开发板原理图:引脚分配 PC8: SDIO_D0;PC9: SDIO_D1;PC10:SDIO_D2;PC11:SDIO_D3;PC12:SDIO_CK;PD2:SDIO_CMD。

按照要求配置。

* STEP 1, open sdio driver framework support in the RT-Thread Settings file
 *
 * STEP 2, define macro related to the sdio
 *                 such as    BSP_USING_SDIO
 *
 * STEP 3, copy your sdio init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file
 *                 such as     void HAL_SD_MspInit(SD_HandleTypeDef* hsd)
 *
 * STEP 4, modify your stm32xxxx_hal_config.h file to support sdio peripherals. define macro related to the peripherals
 *                 such as     #define HAL_SD_MODULE_ENABLED
 *
 * STEP 5, config your device file system or another applications

STEP 1,在RT-Thread Settings中打开SDIO驱动,STEP 5,在RT-Thread Settings中选择Fatfs进行配置(DFS会自动打开)默认配置,参数暂时不修改。 

d88744eb5ecd9a410a1c3c1e83d05b1d.png

判断是否挂载成功,没有成功需要先挂载。挂载不成功的话需要格式化SD卡重新挂载。

if(rt_device_find("sd0") != RT_NULL)
{
            if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)//挂在成功
            {
            }
            else
           {
           }
}
int bsp_sdcard_test(void)
{
    int fd, size;
    char s[] = "hello elmfatfs!", buffer[80];
    //----------------------------------------------------


    rt_thread_mdelay(100);      //等待sd_mount线程挂载文件系统,可使用IPC信号量完成同步,提高实时性


    LOG_I("Write string %s to test.txt.\n", s);


    /* 以创建和读写模式打开 /text.txt 文件,如果该文件不存在则创建该文件 */
    fd = open("/text.txt", O_WRONLY | O_CREAT);
    if (fd>= 0)
    {
        write(fd, s, sizeof(s));
        close(fd);
        LOG_I("Write done.\n");
    }


      /* 以只读模式打开 /text.txt 文件 */
    fd = open("/text.txt", O_RDONLY);
    if (fd>= 0)
    {
        size = read(fd, buffer, sizeof(buffer));
        close(fd);
        LOG_I("Read from file test.txt : %s \n", buffer);
        if (size < 0)
            return -RT_ERROR;
    }
    return 0;
}

配置ulog,使能ulog,默认配置,使能ISR日志,添加ulog_file软件包(基于文件系统的 ulog 插件 (自 RT-Thread V4.1.0 以后,本软件包已废弃,代码已移动至 RT-Thread 内部,位于 ulog/backend 目录下))。 

009950d8a1b4102c14bcbe70904a6f6c.png

98bd9a8d74290d9c0c5764e35e16a159.png

无需修改,直接编译,正常。sd卡挂载完成后,进行ulog_file_backend_init(),初始化即可。使用效果,添加#include <ulog.h> 头文件,直接使用LOG_I("log file ok\n");测试,在终端中,使用指令cat /logs/ulog.log可以看到日志信息。如果想使用日志标签,在#include <ulog.h> 头文件之前添加宏定义,如下:

#define LOG_TAG     "sd0"     // 该模块对应的标签。不定义时,默认:NO_TAG
#define LOG_LVL     LOG_LVL_DBG   // 该模块对应的日志输出级别。不定义时,默认:调试级别
#include <ulog.h>                 // 必须在 LOG_TAG 与 LOG_LVL 下面

如果需要使用时间信息,最好加上rtc功能。使用效果如下:

cat /logs/ulog.log
02-16 09:56:37.430 I/sd0: log file ok
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RT-Thread通过SDIO接口使用SD卡,使用ulog保存日志到sd卡 的相关文章

  • 监控程序运行状态,并根据状态启动或重启进程

    监控程序运行状态 并根据状态启动或重启进程 需求 设计思路 实现 需求 根据运行环境要求 我们所做的程序常常会在无人监管的情况下运行几个月之久 所以为了保证程序的正常运行 决定添加一个附属的监控程序 监控程序要求如下 当检测到主程序未启动时
  • @RequestMapping、@PostMapping、@GetMapping的区别

    GetMapping 用于将HTTP GET请求映射到特定处理程序方法的注释 具体来说 GetMapping是一个作为快捷方式的组合注释 RequestMapping method RequestMethod GET PostMapping

随机推荐

  • QT_下拉选项框_Combo Box_使用

    添加选项 第一种 UI界面静态添加 如下 第二种 代码添加 如下 1 在mainwindow h头文件中添加创建用函数 2 定义函数 void MainWindow add combobox void ui gt comboBox gt a
  • JavaCollection集合

    5 Collection集合 5 1 Collection集合概述 是单列集合的顶层接口 它表示一组对象 这些对象也称Collection元素 JDK不提供此接口的直接实现 它提供更具体的子接口 Set 和 List 实现 package
  • 取消计算机系统密钥,BitLocker驱动器被加密怎么恢复密钥 忘了密码取消删除方法...

    由于最近电脑蓝屏 我需要U盘制作启动盘 结果U盘插入到我电脑 我发现此U盘被我以前用BitLocker加密过了 BitLocker密码我也忘记了 我只好去我以前旧电脑去找 BitLocker 驱动器加密恢复密钥 还好我旧电脑以前保存过了 我
  • WordPress(6)网站侧边栏倒计时进度小工具

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 效果图 在这里插入图片描述 一 添加位置 二 主题style css文件中添加美化 1 引入库 2 添加自定义的HTML模块 效果图 提示 以下是本篇文章正文内容
  • 重要-作为Android开发者必须了解的Gradle知识

    https www jianshu com p c31513f5f550
  • 【NOI 2015】程序自动分析

    题目 传送门 题目描述 在实现程序自动分析的过程中 常常需要判定一些约束条件是否能被同时满足 考虑一个约束满足问题的简化版本 假设 x 1 x 2
  • windows10和安装linux双系统安装教程(超简单)

    windows10和安装linux双系统安装教程 超简单 一共分三步 第一步了解自己电脑的BIOS 第二步安装windows10系统 第三步在windows10中安装ubuntu系统 第一步了解自己电脑的BIOS UEFI 是新式BIOS
  • 解决C++ unordered_map“nvalid use of incomplete type ‘struct std::hash“ 问题

    问题 G 使用unordered map时候 编译报错 invalid use of incomplete type struct std hash lt 放在G 6 5交叉编译环境是OK的 但是放在ubuntu14 04报错 解决 代码
  • uni-app开发微信小程序,在onShow()中获取onLoad(option)中的option页面路径值

    onShow 获取当前小程序的页面栈 let pages getCurrentPages 数组中索引最大的页面 当前页面 let currentPage pages pages length 1 打印出当前页面中的 options cons
  • DAY1:leetcode704二分查找 27移除元素

    目录 一 二分查找 注意区间与循环中的边界点取值 二 移除元素 双指针写法 一 二分查找 注意区间与循环中的边界点取值 class Solution public int search vector
  • 实验十四:Wireshark数据抓包分析之ARP协议

    实验十四 Wireshark数据抓包分析之ARP协议 目录 一 实验目的及要求 二 实验原理 1 什么是ARP 2 ARP工作流程 3 ARP缓存表 三 实验环境 四 实验步骤及内容 实验步骤一 1 使用netsh绑定IP和MAC地址 2
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 一 创建产品 1 1在onenet上创建产品 1 2创建设备 查看onenet接入协议 二 设备安全认证 1 鉴权参数 2 Token算法 3 sign算法 示例如下 4 参数编码 5
  • Mybatis与Spring的集成

    目录 一 Mybatis与spring集成 1 导入pom依赖 2 创建spring配置文件applicationContext 3 注解式开发 二 Aop整合pagehelper插件 4 Spring Test junit完美组合 一 M
  • 哈希表设计思想及实现

    哈希表设计思想及实现 定义 哈希表在 算法4 这本书中是这么介绍的 哈希表其实又叫散列表 是算法在时间和空间上做出权衡的经典例子 如果一个表所有的键都是小整数 我们就可以用一个数组来实现无序的符号表 将键作为数组的索引而数组中i出存储的值就
  • Python打印各种图形

    一 打印直角三角形 for i in range 1 6 print i end n 二 打印矩形 num 5 for i in range 1 6 print 5 for n in range 5 for i in range 5 pri
  • SpringBoot打成的jar和普通的jar有什么区别?

    SpringBoot项目最终打包成的jar是可执行jar 这种jar可一天通过java jar xxx jar命令来运行 这种jar不可以作为普通jar被其他项目依赖 即使依赖了也无法使用其中的类 SoringBoot项目打包的jar无法被
  • Mybaits源码学习(七):动态参数

    一 前文回顾 在前文中我们分析了Mybatis是如何替我们实现了我们所编写的Mapper接口 采用JDK动态代理 在获取Mapper的时候创建Mapper的实现类 本文将继续学习Mybatis中其他的知识 今天索要研究的是Mybatis是如
  • 阿里云mysql数据库修改密码问题小记。

    场景描述 一台阿里云服务器 上面有装mysql数据库 但是不知道数据库的密码 怎么办 改密码呗 下面一系列故事就围绕改密码展开来了 整个过程 1 一顿操作猛如虎 感觉自己不是新手 得有追求 得看看系统的版本 等一系列的参数 其实然并卵 2
  • 全国失信被执行人黑名单信息查询API接口

    接口地址 https api hackeus cn api shixin 请求协议 HTTP HTTPS 请求方式 GET POST 返回格式 JSON 请求示例 https api hackeus cn api shixin api ke
  • RT-Thread通过SDIO接口使用SD卡,使用ulog保存日志到sd卡

    开发环境 野火的stm32f407 rt thread studio版本是版本 2 2 6 stm32f4的资源包为0 2 2 rt thread版本为4 0 3 开发板原理图 引脚分配 PC8 SDIO D0 PC9 SDIO D1 PC