HeapBlockDevice
HeapBlockDevice 类层次结构
HeapBlockDevice 类提供了一种模拟块设备以进行软件开发或测试的方法。创建的块是非易失性的;他们不会在电力循环中持续存在。
HeapBlockDevices 在两个构造函数之一中具有以下可配置参数:
详细的构造函数
- size - 块设备的大小(以字节为单位)。
- read_size - 最小读取大小,以字节为单位。
- program_size - 最小编程大小,以字节为单位。
- erase_size - 最小擦除大小,以字节为单位。
或者,您可以创建一个 HeapBlockDevice,它将读取,编程和擦除大小设置为相同的大小,而不是要求在所有值都受公共块大小约束时重复每个参数。
缩短构造函数
- size - 块设备的大小(以字节为单位)。
- block - 块大小(字节)。您可以使用此选项将最小读取,编程和擦除大小配置为此值。默认值为 512 字节。
您可以在类引用中查看有关可配置设置和函数的更多信息。
HeapBlockDevice 类参考
公共成员函数 | |
HeapBlockDevice (bd_size_t size, bd_size_t block=512) | |
HeapBlockDevice (bd_size_t size, bd_size_t read, bd_size_t program, bd_size_t erase) | |
virtual int | init () |
virtual int | deinit () |
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 bd_size_t | size () const |
公共成员函数继承自 BlockDevice | |
virtual | ~BlockDevice () |
virtual int | sync () |
virtual int | trim (bd_addr_t addr, bd_size_t size) |
virtual int | get_erase_value () const |
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 |
HeapBlockDevice 示例
创建一个 HeapBlockDevice,对其进行编程,读回块并清理。
#include "mbed.h"
#include "HeapBlockDevice.h"
#define BLOCK_SIZE 512
HeapBlockDevice bd(2048, BLOCK_SIZE); // 2048 bytes with a block size of 512 bytes
uint8_t block[BLOCK_SIZE] = "Hello World!\n";
int main() {
bd.init();
bd.erase(0, BLOCK_SIZE);
bd.program(block, 0, BLOCK_SIZE);
bd.read(block, 0, BLOCK_SIZE);
printf("%s", block);
bd.deinit();
}
与 MBRBlockDevice 一起使用的 HeapBlockDevice 展示了分区。
#include "mbed.h"
#include "HeapBlockDevice.h"
#include "MBRBlockDevice.h"
int main(void) {
// Create a block device with 64 blocks of size 512
HeapBlockDevice mem(64*512, 512);
// Partition into two partitions with ~half the blocks
MBRBlockDevice::partition(&mem, 1, 0x83, 0*512, 32*512);
MBRBlockDevice::partition(&mem, 2, 0x83, 32*512);
// Create a block device that maps to the first 32 blocks (excluding MBR block)
MBRBlockDevice part1(&mem, 1);
// Create a block device that maps to the last 32 blocks
MBRBlockDevice part2(&mem, 2);
}