EasyFlash icon indicating copy to clipboard operation
EasyFlash copied to clipboard

ef_log.c 的 log_seq_read方法 似乎会读取失败

Open qinhao4832 opened this issue 7 years ago • 2 comments

`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;

}`

qinhao4832 avatar Oct 19 '18 08:10 qinhao4832

简单讲,就是static EfErrCode log_seq_read 这个函数,缺少对ef_port_read(addr + read_size, log + read_size / 4, read_size_temp); 方法中 参数 read_size_temp 整除4的判断

qinhao4832 avatar Oct 19 '18 08:10 qinhao4832

我在想可以可以把 ef_port_read 里的 4 字节对齐拿掉,这个限制太严格了,驱动层其实是有办法规避这个问题的。

armink avatar Oct 19 '18 09:10 armink