SD reader: optimized stack and binary size

core0-buffer
pca006132 2020-06-18 11:33:18 +08:00
parent 2b1b0dc49f
commit a55a6291a4
2 changed files with 9 additions and 4 deletions

View File

@ -14,7 +14,7 @@ num-traits = { version = "0.2", default-features = false }
num-derive = "0.3"
cslice = "0.3"
log = "0.4"
core_io = { version = "0.1", features = ["alloc", "collections"] }
core_io = { version = "0.1", features = ["collections"] }
byteorder = { version = "1.3", default-features = false }
void = { version = "1", default-features = false }
futures = { version = "0.3", default-features = false, features = ["async-await"] }
@ -24,4 +24,4 @@ libsupport_zynq = { git = "https://git.m-labs.hk/M-Labs/zc706.git" }
libcortex_a9 = { git = "https://git.m-labs.hk/M-Labs/zc706.git" }
libasync = { git = "https://git.m-labs.hk/M-Labs/zc706.git" }
dyld = { path = "../libdyld" }
fatfs = { version = "0.3", features = ["core_io", "alloc"], default-features = false }
fatfs = { version = "0.3", features = ["core_io"], default-features = false }

View File

@ -2,6 +2,7 @@ use core_io::{BufRead, Error, ErrorKind, Read, Result as IoResult, Seek, SeekFro
use fatfs;
use libboard_zynq::sdio::{sd_card::SdCard, CmdTransferError};
use log::debug;
use alloc::vec::Vec;
fn cmd_error_to_io_error(_: CmdTransferError) -> Error {
Error::new(ErrorKind::Other, "Command transfer error")
@ -19,7 +20,7 @@ pub struct SdReader {
/// Internal SdCard handle.
sd: SdCard,
/// Read buffer with the size of 1 block.
buffer: [u8; BLOCK_SIZE],
buffer: Vec<u8>,
/// Address for the next byte.
byte_addr: u32,
/// Internal index for the next byte.
@ -47,9 +48,13 @@ pub enum PartitionEntry {
impl SdReader {
/// Create SdReader from SdCard
pub fn new(sd: SdCard) -> SdReader {
let mut vec: Vec<u8> = Vec::with_capacity(BLOCK_SIZE);
unsafe {
vec.set_len(vec.capacity());
}
SdReader {
sd,
buffer: [0; BLOCK_SIZE],
buffer: vec,
byte_addr: 0,
index: BLOCK_SIZE,
dirty: false,