代码结构分层
程序员文章站
2024-02-23 22:38:34
...
1 代码结构分层
我们需要将代码结构进行分层,有如下好处:
- 有组织的安排代码编写的文件。
- 分层结构能简化代码开发。
主要分为如下三层:
三层结构的具体功能:
在此之前我们需要了解下块设备的原理:
代码组织结构如下图:
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,
};
参考资料: