音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

zlg_ffs程序問題

作者:dasha21cn 欄目:ARM技術(shù)
zlg_ffs程序問題

        static uint8 NFFormatA(FFSDisk *Index)
{
    uint32 i, TEMP;
    unsigned int j, k;
    const FlashDriver *Drive;
    uint8 *bufa;

    Drive = Index->Drive;
    TEMP = Drive->BlockPreDisk;
    /* 設(shè)置壞塊表 */
    Drive->BlockErase(Drive->Index, 0);
    bufa = Drive->BufA;

    j = Drive->BytsPerSec;
    do
    {
        *bufa++ = 0xff;
    } while ( --j != 0);
    
    bufa = Drive->BufA;
    for (i = 1; i < Drive->BlockPreDisk; i++)
    {
        
        if ((Drive->BlockCheck(Drive->Index, i)) != TRUE)
        {
            bufa[(i / 8) % (Drive->BytsPerSec)] &= ~(1 << (i % 8)); //這個(gè)語句完成什么功能阿
        }
        if ((i % (Drive->BytsPerSec * 8)) == 0)   //就是這一句,Drive->BytsPerSec =512,而i始終小于 512*8,那么這個(gè)判斷語句總是為假,下面的語句永遠(yuǎn)不會(huì)得到執(zhí)行。請(qǐng)問這樣寫的目的在那里呢。
        {
            bufa = Drive->BufA;
            Drive->SectorWrite(Drive->Index, bufa, i / (Drive->BytsPerSec * 8));

            j = Drive->BytsPerSec;
            do
            {
                *bufa++ = 0xff;
            } while (--j != 0);
            bufa = Drive->BufA;
        }
    }
    /* 設(shè)置LOGO */
    Drive->ExSectorWrite(Drive->Index, (uint8 *)LOGO, 0);
    Drive->ExSectorWrite(Drive->Index, (uint8 *)LOGO, Drive->SecsPreBlock - 1);

    /* 初始化扇區(qū) */
    
    k = 0;
    bufa = Drive->BufA;
    Drive->SectorRead(Drive->Index, bufa, 0);
    for (i = 1; i < Drive->BlockPreDisk; i++)
    {
        if ((i % (Drive->BytsPerSec * 8)) == 0)
        {
            k++;
            Drive->SectorRead(Drive->Index, bufa, k);
        }
        if ((bufa[i % (Drive->BytsPerSec)] & (1 << (i % 8))) != 0)
        {
            FFSBlockErase(Index, i);
            Drive->SectorRead(Drive->Index, bufa, k);
        }
    }

    /* 初始化第0扇區(qū) */
    
    k = 0;
    bufa = Drive->BufA;
    Drive->SectorRead(Drive->Index, bufa, 0);
    for (i = 1; i < Drive->BlockPreDisk; i++)
    {
        if ((i % (Drive->BytsPerSec * 8)) == 0)
        {
            k++;
            Drive->SectorRead(Drive->Index, bufa, k);
        }
        if ((bufa[(i / 8) % (Drive->BytsPerSec)] & (1 << (i % 8))) != 0)
        {
            TEMP = (Drive->SecsPreBlock) * i;
            Drive->ExSectorRead(Drive->Index, bufa, TEMP);
            bufa[0] = 0x01;
            bufa[1] = 0x00;
            bufa[2] = 0x00;
            bufa[3] = 0x00;
            if (Drive->ExSectorWrite(Drive->Index, bufa, TEMP) ==FALSE)
            {
                FFSSetBadBlock(Drive->Index, TEMP / Drive->SecsPreBlock);
                break;
            }
            if (Drive->ExSectorCheck(Drive->Index, bufa, TEMP) ==FALSE)
            {
                FFSSetBadBlock(Drive->Index, TEMP / Drive->SecsPreBlock);
                break;
            }
            break;
        }
    }
    return TRUE;
}


2樓: >>參與討論

壞塊表是用第0塊表示的,一位對(duì)應(yīng)一個(gè)塊,比如 0 扇區(qū)對(duì)應(yīng)塊0~(512*8-1),1扇區(qū)對(duì)應(yīng)塊(512*8 ~ (512*16 -1))。一個(gè)扇區(qū)表示512*8塊=128M.

小于128M時(shí), bufa[(i / 8) % (Drive->BytsPerSec)] &= ~(1 << (i % 8));用來設(shè)置壞塊表。等于128M的整數(shù)倍(即  if ((i % (Drive->BytsPerSec * 8)) == 0) ,i從1開始的),先把上一扇區(qū)已設(shè)置好的壞塊表寫入Drive->SectorWrite(Drive->Index, bufa, i / (Drive->BytsPerSec * 8));再?gòu)男略O(shè)置下一扇區(qū)壞塊表。

3樓: >>參與討論

抱歉,一個(gè)扇區(qū)表示512*8塊=64M
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)教周工:
easyarm2200上能跑uclinux嗎?
誰知道為什么ads1.2的AXD debuer
2104串口如果不使用中斷,發(fā)送時(shí)產(chǎn)生接收中斷,會(huì)影響到發(fā)送嗎?
ZLG、zlgarm、eleven11和hotpower諸位大俠看過來
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)