- 论坛徽章:
- 0
|
一段时间移植 direct 以后,就是没基于os的用户态的yaffs2的移植以后,发现此代码问题还是蛮多。
1)代码里的所有变量都没有初始化,最要命的是static int有个变量未初始化就用了 if 判断变量,在一部分编译器上会出现不可预料的结果。
2)有部分明显的BUG
和楼主讨论一下下面这个问题:
摘自楼主的一句话:
yaffs_CheckSpaceForAllocation()函数检查Flash上是否有足够的可用空间,通过检查后
// Check if there's space to allocate...
// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
{
int reservedChunks;
int reservedBlocks = dev->nReservedBlocks;
int checkpointBlocks;
checkpointBlocks = yaffs_CalcCheckpointBlocksRequired(dev) - dev->blocksInCheckpoint;
if(checkpointBlocks < 0)
checkpointBlocks = 0;
reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
return (dev->nFreeChunks > reservedChunks);
}
static int yaffs_CalcCheckpointBlocksRequired(yaffs_Device *dev)
{
if(!dev->nCheckpointBlocksRequired){
/* Not a valid value so recalculate */
int nBytes = 0;
int nBlocks;
int devBlocks = (dev->endBlock - dev->startBlock + 1);
int tnodeSize;
tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
if(tnodeSize < sizeof(yaffs_Tnode))
tnodeSize = sizeof(yaffs_Tnode);
nBytes += sizeof(yaffs_CheckpointValidity);
nBytes += sizeof(yaffs_CheckpointDevice);
nBytes += devBlocks * sizeof(yaffs_BlockInfo);
nBytes += devBlocks * dev->chunkBitmapStride;
nBytes += (sizeof(yaffs_CheckpointObject) + sizeof(__u32)) * (dev->nObjectsCreated - dev->nFreeObjects);
nBytes += (tnodeSize + sizeof(__u32)) * (dev->nTnodesCreated - dev->nFreeTnodes);
nBytes += sizeof(yaffs_CheckpointValidity);
nBytes += sizeof(__u32); /* checksum*/
/* Round up and add 2 blocks to allow for some bad blocks, so add 3 */
nBlocks = (nBytes/(dev->nDataBytesPerChunk * dev->nChunksPerBlock)) + 3;
dev->nCheckpointBlocksRequired = nBlocks;
}
return dev->nCheckpointBlocksRequired;
}
yaffs_CheckSpaceForAllocation这个函数的结果确定为3
因为在 nBlocks = (nBytes/(dev->nDataBytesPerChunk * dev->nChunksPerBlock)) + 3;
dev->nDataBytesPerChunk * dev->nChunksPerBlock) 这个肯定为0
因此,
yaffs_CheckSpaceForAllocation这个函数一点意义都没有,不知道为什么,请问下楼主,这是个BUG吗,我正在检查并修改此代码,能否一起查下 |
|