도와주세요!!
안녕하세요. 플래쉬 메모리 소스를 보다가 질문이 생겨 문의드립니다.
nand.c에 보면 아래와 같은 함수가 있습니다.
int NAND_ScanBadBlock( TNandInfo *NandDev )
{
int ScanBlock, IndexBlock;
int ReplaceBlock, VirIndex;
ScanBlock = USED_BOOT_BLOCK_COUNT; //NandDev->TotalSize/NandDev->EraseSize;
NandDev->BadBlockCount = 0;
for( IndexBlock = 0; IndexBlock < ScanBlock; IndexBlock++ )
{
if( NAND_CheckBadBlock( NandDev, IndexBlock ) == FALSE )
{
NandDev->BadBlockCount++;
}
}
// 배드블럭을 제거한 가상블럭을 정열한다.
ReplaceBlock = 0;
VirIndex = 0;
for( IndexBlock = 0; IndexBlock < ScanBlock; IndexBlock++ )
{
if ( 'X' == NandDev->BadBlock[IndexBlock] )
{
ReplaceBlock ++;
continue;
}
if ( ReplaceBlock < ScanBlock )
{
NandDev->VirBlock[VirIndex++] = ReplaceBlock++;
}
else
{
NandDev->VirBlock[VirIndex++] = ScanBlock-1;
}
}
return NandDev->BadBlockCount;
}
궁금한 것은 마지막 for loop문의 내용입니다.
BadBlock에 'x'가 없을 경우 다음의 두가지 궁금증이 생겨납니다.
1. 소스 구조상 항상 ReplaceBlock < ScanBlock이 아닌가요? else로는 빠질 수가 없을 듯 합니다.
2. VirBlock[VirIndex++] = ReplaceBlock++을 하는 이유가 무엇이고 의미가 무엇인지 잘 모르겠습니다.