EasyFlash
EasyFlash copied to clipboard
ef_log.c 的 log_seq_read方法 似乎会读取失败
`static EfErrCode log_seq_read(uint32_t addr, uint32_t log, size_t size) { EfErrCode result = EF_NO_ERR; size_t read_size = 0, read_size_temp = 0; while (size) { / move to sector data address / if ((addr + read_size) % EF_ERASE_MIN_SIZE == 0) { addr += LOG_SECTOR_HEADER_SIZE; } /此处,假如需要读取扇区末位的log,而这一条log数据 恰好跨越2个扇区。 这扇区的log前部分数据恰好又不能整除4的时候,会在方法ef_port_read中断言 %4不等于0./ / calculate current sector last data size */ read_size_temp = EF_ERASE_MIN_SIZE - (addr % EF_ERASE_MIN_SIZE); if (size < read_size_temp) { read_size_temp = size; } result = ef_port_read(addr + read_size, log + read_size / 4, read_size_temp); if (result != EF_NO_ERR) { return result; } read_size += read_size_temp; size -= read_size_temp; }
return result;
}`
简单讲,就是static EfErrCode log_seq_read 这个函数,缺少对ef_port_read(addr + read_size, log + read_size / 4, read_size_temp); 方法中 参数 read_size_temp 整除4的判断
我在想可以可以把 ef_port_read 里的 4 字节对齐拿掉,这个限制太严格了,驱动层其实是有办法规避这个问题的。