|
|||||||||||
| 技術(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ù) |
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樓: | >>參與討論 |
| 作者: 翠 于 2009/3/30 16:51:37 發(fā)布:
壞塊表是用第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樓: | >>參與討論 |
| 作者: 翠 于 2009/3/31 17:07:08 發(fā)布:
抱歉,一個(gè)扇區(qū)表示512*8塊=64M |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |