欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

代码结构分层

程序员文章站 2024-02-23 22:38:34
...

1 代码结构分层

我们需要将代码结构进行分层,有如下好处:

  1. 有组织的安排代码编写的文件。
  2. 分层结构能简化代码开发。

主要分为如下三层:
代码结构分层
三层结构的具体功能:
代码结构分层
在此之前我们需要了解下块设备的原理:
代码结构分层
代码组织结构如下图:
代码结构分层

1.1 定义基本数据类型和错误码

在xtypes.h文件中实现:

/**
 * 本源码配套的课程为 - 从0到1动手写FAT32文件系统。每个例程对应一个课时,尽可能注释。
 * 作者:李述铜
 * 课程网址:http://01ketang.cc
 * 版权声明:本源码非开源,二次开发,或其它商用前请联系作者。
 */
#ifndef XTYPES_H
#define XTYPES_H

#include <stdint.h>

typedef uint8_t u8_t;
typedef uint16_t u16_t;
typedef uint32_t u32_t;
typedef uint64_t u64_t;

typedef enum _xfat_err_t {
    FS_ERR_OK = 0,
}xfat_err_t;

#endif


1.2 定义设备类结构和定义操作接口结构

主要在xdisk.h中实现:

 /**
 * 本源码配套的课程为 - 从0到1动手写FAT32文件系统。每个例程对应一个课时,尽可能注释。
 * 作者:李述铜
 * 课程网址:http://01ketang.cc
 * 版权声明:本源码非开源,二次开发,或其它商用前请联系作者。
 */
#ifndef XDISK_H
#define	XDISK_H

#include "xtypes.h"

// 相关前置声明
struct _xdisk_t;

/**
 * 磁盘驱动接口
 */
typedef struct _xdisk_driver_t {
    xfat_err_t (*open) (struct _xdisk_t * disk, void * init_data);
    xfat_err_t (*close) (struct _xdisk_t * disk);
    xfat_err_t (*read_sector) (struct _xdisk_t *disk, u8_t *buffer, u32_t start_sector, u32_t count);
    xfat_err_t (*write_sector) (struct _xdisk_t *disk, u8_t *buffer, u32_t start_sector, u32_t count);
}xdisk_driver_t;

/**
 * 存储设备类型
 */
typedef struct _xdisk_t {
	u32_t sector_size;              // 块大小
	u32_t total_sector;             // 总的块数量
    xdisk_driver_t * driver;        // 驱动接口
}xdisk_t;

#endif


1.3 添加驱动实例

主要在driver.c中实现:

/**
 * 本源码配套的课程为 - 从0到1动手写FAT32文件系统。每个例程对应一个课时,尽可能注释。
 * 作者:李述铜
 * 课程网址:http://01ketang.cc
 * 版权声明:本源码非开源,二次开发,或其它商用前请联系作者。
 */
#include "xdisk.h"
#include "xfat.h"

/**
 * 初始化磁盘设备
 * @param disk 初始化的设备
 * @param name 设备的名称
 * @return
 */
static xfat_err_t xdisk_hw_open(xdisk_t *disk, void * init_data) {
}

/**
 * 关闭存储设备
 * @param disk
 * @return
 */
static xfat_err_t xdisk_hw_close(xdisk_t * disk) {
}

/**
 * 从设备中读取指定扇区数量的数据
 * @param disk 读取的磁盘
 * @param buffer 读取数据存储的缓冲区
 * @param start_sector 读取的起始扇区
 * @param count 读取的扇区数量
 * @return
 */
static xfat_err_t xdisk_hw_read_sector(xdisk_t *disk, u8_t *buffer, u32_t start_sector, u32_t count) {
}

/**
 * 向设备中写指定的扇区数量的数据
 * @param disk 写入的存储设备
 * @param buffer 数据源缓冲区
 * @param start_sector 写入的起始扇区
 * @param count 写入的扇区数
 * @return
 */
static xfat_err_t xdisk_hw_write_sector(xdisk_t *disk, u8_t *buffer, u32_t start_sector, u32_t count) {
}

/**
 * 虚拟磁盘驱动结构
 */
xdisk_driver_t vdisk_driver = {
    .open = xdisk_hw_open,
    .close = xdisk_hw_close,
    .read_sector = xdisk_hw_read_sector,
    .write_sector = xdisk_hw_write_sector,
};

参考资料:

  1. 自己动手从0到1学写FAT32文件系统
相关标签: 所学所思所想