|

楼主 |
发表于 2024-8-29 17:08:09
|
显示全部楼层
sector->status.store = (sector_store_status_t) get_status(sec_hdr.status_table.store, SECTOR_STORE_STATUS_NUM);
sector->status.dirty = (sector_dirty_status_t) get_status(sec_hdr.status_table.dirty, SECTOR_DIRTY_STATUS_NUM);
static size_t get_status(uint8_t status_table[], size_t status_num)
{
size_t i = 0, status_num_bak = --status_num;
while (status_num --) {
/* get the first 0 position from end address to start address */
if ((status_table[status_num / 8] & (0x80 >> (status_num % 8))) == 0x00) {
break;
}
i++;
}
return status_num_bak - i;
}
sec_hdr.status_table.store是使用一个字节的4bit来表示扇区的状态,然后通过get_status()转换为枚举传给sector->status.store。
不理解get_status()函数,其中status_num两次自减操作是什么意思?还有为什么 sec_hdr.status_table.store 和 sector->status.store 为什么用两种方式来表示扇区状态? |
|