📄 nand_cmd.c
字号:
#define __NAND_CMD
#include "Nand_CMD.h"
#undef __NAND_CMD
//********************** Global Variable **********************
//*************************************************************
/*设置块使用标记*/
void SetBlockUse(ushort startblk, ushort endblk, ushort bmpNo)
{
ushort i;
for(i = startblk;i <= endblk;i++)
blockuse[i] = bmpNo+1;
}
/*寻找一个可以存放得下当前画面的nandflash地址*/
int findRightAddr(ushort bmpNo, ulong lens)
{
ushort i,startblock;
int rightAddr;
uchar find;
startblock = 0;//开始检测的块
find = 0;
for(i = BmpStartBlock;i < BLOCKS;i++)
{
if((blockuse[i] == 0xff) || (blockuse[i] == (bmpNo+1)))//当前块没有使用或存放的是当前画面
{
if(startblock == 0) startblock = i;
if(find == 1 && blockuse[i] == 0xff)
break; //如果已找到合适地址并当前块未使用
blockuse[i] = 0xff; //设置为未使用
//未使用的块或原来画面使用的块够空间
if((i - startblock + 1)*BLOCK_BYTES >= lens && find == 0)
{
find = 1;
SetBlockUse(startblock,i,bmpNo); //设置块使用标记
rightAddr = startblock*BLOCK_BYTES; //合适存放当前画面的nandflash地址
}
}
else
{
if(find == 1) break;
startblock = 0;
}
}
return rightAddr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 把BMP从内存拷贝到NandFlash.
// 描述:
//
// [参数表]
//
// 返回:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int CopyBmpToNandFlash (ushort bmpNo, ulong lens, ulong bitlens)
{
char buf[128];
if(lens > 0) lens = ((lens - 1)/BLOCK_BYTES + 1)*BLOCK_BYTES;// 长度以块对齐
bmpLens[bmpNo] = lens; //长度
bitbmpLens[bmpNo] = bitlens;
bmpAddr[bmpNo] = findRightAddr(bmpNo,lens);//找到一个合适存放当前画面的NandFlash地址
sprintf(buf,"bmpNo = %d,write Addr = %x,write len = %x",bmpNo,bmpAddr[bmpNo],bmpLens[bmpNo]);
if (NandErase(bmpAddr[bmpNo], bmpLens[bmpNo]) == 0 )//擦除nandflash
{
return NandWriteData(bmpAddr[bmpNo],BMP_TMPRAM_ADDR,bmpLens[bmpNo]);//写nandflash
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -