硬汉嵌入式论坛

 找回密码
 立即注册
查看: 708|回复: 4
收起左侧

[其它] 关于easyflash源码的疑问

[复制链接]

5

主题

17

回帖

32

积分

新手上路

积分
32
发表于 2024-8-29 17:01:59 | 显示全部楼层 |阅读模式
最近在想移植easyflash协议栈,在研究easyflash源码的时候遇到疑惑,有老哥研究过相关源码的求解惑一下
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 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 为什么用两种方式来表示扇区状态?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-8-29 18:17:33 | 显示全部楼层
帮顶下,这个没有研究过。
回复

使用道具 举报

9

主题

33

回帖

60

积分

初级会员

积分
60
发表于 2024-9-23 15:50:01 | 显示全部楼层
没看过源码,不过可以推断下,SECTOR_DIRTY_STATUS_NUM这个是个数(如200个),第一次自减表示 0 - 199 (即总共200个的循环次数),第二次自减法是循环迭代?
回复

使用道具 举报

95

主题

529

回帖

829

积分

金牌会员

积分
829
发表于 2024-9-24 15:04:19 | 显示全部楼层
我只会移植。。。
源码没研究过。

他后来不是还有一个flashDB,我用过这个。
共产主义一定胜利!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-28 23:01 , Processed in 0.235767 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表