文章目录
1 代码结构分层1.1 定义基本数据类型和错误码1.2 定义设备类结构和定义操作接口结构1.3 添加驱动实例1 代码结构分层
我们需要将代码结构进行分层,有如下好处:
有组织的安排代码编写的文件。分层结构能简化代码开发。
主要分为如下三层:
三层结构的具体功能:
在此之前我们需要了解下块设备的原理:
代码组织结构如下图:
1.1 定义基本数据类型和错误码
在xtypes.h文件中实现:
/*** 本源码配套的课程为 - 从0到1动手写FAT32文件系统。每个例程对应一个课时,尽可能注释。* 作者:李述铜* 课程网址:* 版权声明:本源码非开源,二次开发,或其它商用前请联系作者。*/#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文件系统。每个例程对应一个课时,尽可能注释。* 作者:李述铜* 课程网址:* 版权声明:本源码非开源,二次开发,或其它商用前请联系作者。*/#ifndef XDISK_H#defineXDISK_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文件系统。每个例程对应一个课时,尽可能注释。* 作者:李述铜* 课程网址:* 版权声明:本源码非开源,二次开发,或其它商用前请联系作者。*/#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,};
参考资料:
自己动手从0到1学写FAT32文件系统