📄 progflash.c
字号:
//ProgFlash.c
//可以用于烧写sst29le010 sst29le020
//烧写原理(按照以下顺序):
//(1)打开文件
//(2)将文件中的数据存入DSP的RAM,每一次只取一帧
//(3)烧写存储器的一帧,烧写完毕后再取一帧数据,直到文件读取完毕
#include "ProgFlash.h"
UINT* pFlashData;//存放数据的起始地点
BOOL m_bAlreadyOpen=0;//还没有打开
extern BYTE FlashBuffer1[BUFFERSIZE];//sst29lv010 sst29lv020每一帧的大小
extern UINT FLASH_START;
UINT BufferNum=0;//一帧数据的存储进度
long FileNum=0;//文件的提取进度
long FileSize=0;//文件长度
FILE *fp1;
extern void BurnOneFrame(void);
void LoadFile(void)
{
FileSize=0;
if ((fp1=fopen("f:\\tiaozhanbei\\CCSwork\\TEST_0\\Debug\\test0.bin","rb"))==NULL)//e:\\tiaozhanbei\\CCSwork\\TEST_0\\Debug\\test0.bin e:\\CCSwork\\TEST_0\\Debug\\test0.bin
{//D:\\DTS\\Debug\\xxx.bin//f:\\tiaozhanbei\\CCSwork\\TEST_0\\Debug\\test0.bin
printf("can't open %s\n", "TEST0.bin");
}
else
{
m_bAlreadyOpen=1;//文件已经打开
//下面用于计算文件的长度
CountFileSize(fp1,&FileSize);
FileSize=0x10000;//本次已经知道文件的长度
FLASH_START=0x8000;
FileNum=0x8000; //文件的提取进度
}
}
void CountFileSize(FILE* fp,long* FileSize)
{
/* fgetc(fp);
while(!feof(fp))//如果遇到文件结尾feof(fp)函数返回非0值
{
(*FileSize)++;
fgetc(fp);
}*/
fseek(fp,0,2);//这种方式更快
*FileSize = ftell(fp);
}
//fseek(FILE *fp,long offset,int origin);
//文件开始位置 SEEK_SET 0
//当前位置 SEEK_CUR 1
//文件尾 SEEK_END 2
void LoadFlashBuffer(FILE* fp)
{
for(BufferNum=0;BufferNum<BUFFERSIZE;BufferNum++)
{
FlashBuffer1[BufferNum]=fgetc(fp);
}
BurnOneFrame();
}
void BurnFlash(void)//烧写flash存储器
{
int i;
if(m_bAlreadyOpen==1)//如果文件已经打开
{
for(i=0;i<BUFFERSIZE;i++)
FlashBuffer1[i]=0;
//for(i=0;i<FileNum;i++)
// FlashBuffer1[0]=fgetc(fp1);
i=fseek(fp1,0x8000,0);
while(FileSize>FileNum)//文件还没有取完
{
LoadFlashBuffer(fp1);
FLASH_START+=0x80;
FileNum+=BUFFERSIZE;
}
fclose(fp1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -