SlicingBlockDevice example that showcases how to slice a larger block device into sub units.
Fork of ChainingBlockDevice_ex_2 by
Diff: main.cpp
- Revision:
- 3:62c01cd06ff7
- Parent:
- 2:70419b9d778a
--- a/main.cpp Tue Oct 24 23:32:54 2017 +0000 +++ b/main.cpp Wed Oct 25 20:18:23 2017 +0000 @@ -1,37 +1,44 @@ #include "mbed.h" #include "HeapBlockDevice.h" -#include "ChainingBlockDevice.h" +#include "SlicingBlockDevice.h" -#define BLOCKSIZE 512 -char buffer1[512]; -char buffer2[512]; +#define BLOCK 512 +#define NUMSLICES 3 + +char buff[BLOCK]; 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(); + // Create a block device with 64 blocks of size 512 + HeapBlockDevice mem(64*BLOCK, BLOCK); + + SlicingBlockDevice slices[NUMSLICES] = { + // Create a block device that maps to the first 32 blocks + SlicingBlockDevice(&mem, 0 *BLOCK, 32*BLOCK), - // 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); + // Create a block device that maps to the middle 32 blocks + SlicingBlockDevice(&mem, 16*BLOCK, -16*BLOCK), + + // Create a block device that maps to the last 32 blocks + SlicingBlockDevice(&mem, 32*BLOCK) + }; + + for (int i = 0; i < NUMSLICES; i++) { + // Initialize and erase the slice to prepar for programming + slices[i].init(); + slices[i].erase(0, 32*BLOCK); + + // Construct the message for the block and write to the slice + sprintf((char *)&buff, "test: %d", i); + slices[i].program(&buff, 0, BLOCK); + } + + for (int i = 0; i < NUMSLICES; i++) { + // Read back the programmed blocks through the underlying block device + mem.read(&buff, (i * 16 * BLOCK), BLOCK); + printf("%s --> ", buff); + + // Read back the programmed blocks through the sliced block device. + slices[i].read(&buff,0, BLOCK); + printf("%s\r\n", buff); + } } \ No newline at end of file