代码结构分层
文章目錄
- 1 代碼結構分層
- 1.1 定義基本數據類型和錯誤碼
- 1.2 定義設備類結構和定義操作接口結構
- 1.3 添加驅動實例
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;#endif1.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;#endif1.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, };參考資料:
總結
- 上一篇: 股票型基金买入卖出技巧 关注这几点就可
- 下一篇: Qt中多线程与界面组件的通信