• 如何给R128在FreeRTOS下配置/data目录


    在调试音频、usb等模块时,会发现SDK的根目录下没有/data该目录,导致无法存储所需要的文件,这就是因为/data目录没有配置好的原因。

    1、选上配置

    首先需要选上的配置:
    运行mrtos_menuconfig,选上COMPONENT_LITTLEFS

    -> System components
        -> thirdparty components
            [*] LittleFS Filesystem
    
    • 1
    • 2
    • 3

    选上littlefs只是支持了这个功能,另外还需要对分区进行配置。

    2、确认分区表

    通过命令cconfigs,跳转到方案配置目录,找到文件sys_partition.fex

    这里需要注意,目录下可能会有多个分区文件,带着不同后缀的,比如说nor,xip等等的,因此需要确认用的是哪一个分区表,以免修改不生效

    在方案已经编译完成之后,运行

    pack
    
    • 1

    命令对方案进行打包,通过打包时打印出来的log信息,可以提取到用的是哪一个分区表,如下:

    在这里插入图片描述

    如图片,可以确认到打包示例中调用的分区表。

    3、修改分区表

    在分区表中加入以下配置代码:

    [partition]
        name         = UDISK
        downloadfile = "data_udisk.fex"
        user_type    = 0x8100
    
    • 1
    • 2
    • 3
    • 4

    通过上述的代码,在打包固件调用的pack_img.sh脚本中,通过函数

    function make_data_image()
    
    • 1

    会创建对应的分区。

    4、挂载目录

    分区已经建好的话,剩下就是通过littlefs将区分挂载到目录下了。

    在方案的main.c函数中(这里只是举个例子,在系统启动时挂载目录即可,但是需要注意要在flash初始化完成之后才能挂载)

    在main.c中,添加以下代码:

    littlefs_mount("/dev/UDISK", "/data", true);
    
    • 1

    /dev/UDISK就是分区名字,由分区表产生的。
    /data则是创建目录的名字及路径。

    通过以上步骤,即可为方案新建一个/data目录,可以用于保存一些程序所需要用到的文件。

    5、保存文件到data目录下

    1.在SDK编译环境中存放文件
    可以在编译时,所需要的文件放到UDISK分区。

    存放文件到UDISK分区方法为:

    直接将文件拷贝到编译环境对应的路径下:

    {root_dir}/board/芯片名/方案名/data/UDISK
    
    • 1

    在SDK打包时就会将UDISK目录下的文件全部打包生成udisk的镜像,最终打包到image里。

    在烧录时,就会udisk的镜像烧录到对应的分区里。系统启动,挂载分区之后,就直接可以通过/data目录访问到对应的文件了。

    2.通过代码读写文件
    FreeRTOS SDK中,通过fopen fwrite fread等POSIX接口,即可操作UDISK分区(/data目录)的文件。

    以下做个示例:

    static int save_to_file(void *str, void *start, int length)
    {
            FILE *fp = NULL;
    
            fp = fopen(str, "wb+"); //save more frames
            if (!fp) {
                    printf(" Open %s error\n", (char *)str);
    
                    return -1;
            }
    
            if (fwrite(start, length, 1, fp)) {
                    fclose(fp);
    
                    return 0;
            } else {
                    printf(" Write file fail (%s)\n", strerror(errno));
                    fclose(fp);
    
                    return -1;
            }
    
            return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • str: 路径名,若为/data目录的话,比如说写入一个a.txt,str可以定义为 /data/a.txt
    • start:所需要写入的数据起始地址
    • length:所需要写的数据的长度。
  • 相关阅读:
    使用Flink完成流数据统计
    [oeasy]python0016_编码_encode_编号_字节_计算机
    H3C IPSec IKE野蛮模式
    当下流行的编程语言
    基于arcgis访问postgis的方法
    消息重放攻击以及预防方法
    2022关键之年,国产奶粉「争霸之秋」
    数字化转型新CP | 云原生+边缘计算 实践分享
    Linux驱动设备号分配与自动创建设备节点
    Nginx的网站服务
  • 原文地址:https://blog.csdn.net/weixin_43094346/article/details/133991535