1. 创建并挂载FileX文件系统

任务目标

在嵌入式平台上完成 FileX 文件系统的初始化,创建媒体控制块并挂载到存储设备(本例使用 RAM 模拟磁盘),最终实现文件的创建、写入与读取验证。

环境依赖

需要 ThreadX 实时操作系统内核(提供 TX_API 与调度环境)以及 FileX 组件(fx_api.h)。本例使用 RAM 盘作为存储介质,无需额外硬件驱动,便于独立验证。

核心实现

#include "tx_api.h"
#include "fx_api.h"

/* 媒体控制块与RAM磁盘存储区 */
FX_MEDIA ram_disk;
UCHAR ram_disk_memory[512 * 64];  /* 64个扇区,每扇区512字节 */

/* 文件控制块与缓冲区 */
FX_FILE my_file;
UCHAR file_buffer[128];

/* 定义入口函数 */
void filex_demo_entry(ULONG arg)
{
    UINT status;
    ULONG actual_bytes;

    /* 1. 初始化FileX */
    fx_system_initialize();

    /* 2. 创建并挂载RAM媒体 */
    status = fx_media_create(&ram_disk, "RAM_DISK",
                             ram_disk_memory, sizeof(ram_disk_memory),
                             512, 64, FX_NULL, FX_NULL, FX_NULL, FX_NULL, FX_NULL);
    if (status != FX_SUCCESS) return;

    status = fx_media_open(&ram_disk, "RAM_DISK",
                           fx_media_ram_driver_open, FX_NULL,
                           ram_disk_memory, sizeof(ram_disk_memory));
    if (status != FX_SUCCESS) return;

    /* 3. 创建文件并写入数据 */
    status = fx_file_create(&ram_disk, "test.txt");
    if (status != FX_SUCCESS && status != FX_ALREADY_CREATED) return;

    status = fx_file_open(&ram_disk, &my_file, "test.txt", FX_OPEN_FOR_WRITE);
    if (status != FX_SUCCESS) return;

    status = fx_file_write(&my_file, "Hello FileX!", 12);
    if (status != FX_SUCCESS) return;

    status = fx_file_close(&my_file);
    if (status != FX_SUCCESS) return;

    /* 4. 读取文件验证 */
    status = fx_file_open(&ram_disk, &my_file, "test.txt", FX_OPEN_FOR_READ);
    if (status != FX_SUCCESS) return;

    status = fx_file_read(&my_file, file_buffer, sizeof(file_buffer), &actual_bytes);
    if (status != FX_SUCCESS) return;

    fx_file_close(&my_file);

    /* 5. 卸载媒体 */
    fx_media_close(&ram_disk);

    /* 验证读取内容 */
    if (actual_bytes == 12 && tx_byte_compare(file_buffer, "Hello FileX!", 12) == TX_TRUE)
    {
        /* 文件系统挂载与读写验证通过 */
    }
}

编译与运行

将上述代码与 ThreadX、FileX 库一同编译链接。在嵌入式平台或模拟环境中,创建线程并调用 filex_demo_entry 作为线程入口函数。需确保 tx_byte_compare 可用(ThreadX 提供),或自行实现等价比较函数。

验证方法

程序执行后,观察以下判定条件:

  • fx_media_create 与 fx_media_open 均返回 FX_SUCCESS,表明媒体控制块创建成功且已挂载到 RAM 盘。
  • 文件创建、写入、关闭、重新打开读取均返回 FX_SUCCESS。
  • 读取到的字节数 actual_bytes 等于 12,且缓冲区内容与写入字符串一致。
  • 若以上条件全部满足,则文件系统挂载与基本访问验证通过;否则根据返回的错误码定位问题(如 FX_MEDIA_NOT_OPEN 表示挂载失败)。

预期输出

代码逻辑确定,若所有操作成功,读取的 actual_bytes 值应为 12,缓冲区内容应为 "Hello FileX!"。此结果由代码与输入直接推出,非实测数据。