ChainingBlockDevice
ChainingBlockDevice 类层次结构
ChainingBlockDevice 类提供了一种将多个块设备链接在一起的方法。然后,您可以与链接块设备进行交互,就好像它们是大小等于每个子层单元总和的单块设备一样。ChainingBlockDevice 与 SlicingBlockDevice 相反。
请注意,每个块设备的块大小必须是其他设备块大小的倍数(512,1024 等)。
构造函数接收块设备指针数组,并提供一个对象,您可以从中将对象块设备作为单个设备进行访问。
ChainingBlockDevice 类参考
公共成员函数 | |
ChainingBlockDevice (BlockDevice **bds, size_t bd_count) | |
template<size_t Size> | |
ChainingBlockDevice (BlockDevice *(&bds)[Size]) | |
virtual | ~ChainingBlockDevice () |
virtual int | init () |
virtual int | deinit () |
virtual int | sync () |
virtual int | read (void *buffer, bd_addr_t addr, bd_size_t size) |
virtual int | program (const void *buffer, bd_addr_t addr, bd_size_t size) |
virtual int | erase (bd_addr_t addr, bd_size_t size) |
virtual bd_size_t | get_read_size () const |
virtual bd_size_t | get_program_size () const |
virtual bd_size_t | get_erase_size () const |
virtual bd_size_t | get_erase_size (bd_addr_t addr) const |
virtual int | get_erase_value () const |
virtual bd_size_t | size () const |
公共成员函数继承自 BlockDevice | |
virtual | ~BlockDevice () |
virtual int | trim (bd_addr_t addr, bd_size_t size) |
bool | is_valid_read (bd_addr_t addr, bd_size_t size) const |
bool | is_valid_program (bd_addr_t addr, bd_size_t size) const |
bool | is_valid_erase (bd_addr_t addr, bd_size_t size) const |
受保护的属性 | |
BlockDevice ** | _bds |
size_t | _bd_count |
bd_size_t | _read_size |
bd_size_t | _program_size |
bd_size_t | _erase_size |
bd_size_t | _size |
int | _erase_value |
uint32_t | _init_ref_count |
ChainingBlockDevice 示例
此 ChainingBlockDevice 示例跨多个 HeapBlockDevices 创建 FAT 文件系统。
#include "mbed.h"
#include "HeapBlockDevice.h"
#include "ChainingBlockDevice.h"
#include "FATFileSystem.h"
int main(void) {
// Create two smaller block devices with
// 64 and 32 blocks of size 512 bytes
HeapBlockDevice mem1(64*512, 512);
HeapBlockDevice mem2(32*512, 512);
// Create a block device backed by mem1 and mem2
// contains 96 blocks of size 512 bytes
BlockDevice *bds[] = {&mem1, &mem2};
ChainingBlockDevice chainmem(bds);
// Format the new chained block device with a FAT filesystem
FATFileSystem::format(&chainmem);
// Create the FAT filesystem instance, files can now be written to
// the FAT filesystem as if to a single 96 x 512 byte storage device
FATFileSystem fat("fat", &chainmem);
}
此 ChainingBlockDevice 示例显示如何从链接的 HeapBlockDevices 组中编程和读取数据。
#include "mbed.h"
#include "HeapBlockDevice.h"
#include "ChainingBlockDevice.h"
#define BLOCKSIZE 512
char buffer1[512];
char buffer2[512];
int main(void) {
// Create two smaller block devices with
// 64 and 32 blocks of size 512 bytes
HeapBlockDevice mem1(64*BLOCKSIZE, BLOCKSIZE);
HeapBlockDevice mem2(32*BLOCKSIZE, BLOCKSIZE);
// Create a block device backed by mem1 and mem2
// contains 96 blocks of size 512 bytes
BlockDevice *bds[] = {&mem1, &mem2};
ChainingBlockDevice chainmem(bds);
// Initialize the block devices
chainmem.init();
// Erase the block device to prepare for programming. 64 and 32 refer to
// the respective number of blocks in mem1 and mem2
chainmem.erase(0, (BLOCKSIZE * (64 + 32)));
// Program strings to the block device at byte-addressable locations that
// span both sub blocks. The second program will write past the end of the
// first block
chainmem.program("data for block", 0, BLOCKSIZE);
chainmem.program("Some more data", (65 * BLOCKSIZE), BLOCKSIZE);
// Readback the written values
chainmem.read(&buffer1, 0, BLOCKSIZE);
chainmem.read(&buffer2, (65 * BLOCKSIZE), BLOCKSIZE);
printf("Read back: %s, %s\r\n", buffer1, buffer2);
}
相关内容
- SlicingBlockDevice API 参考。
- HeapBlockDevice API 参考。