这个实验中的fontupd.c中的updata_fontx函数的SPI_Flash_Write((u8*)tempsys,FONTINFOADDR,8);这个函数不能理解,tempsys是32位的,在这里自动转换成了u8*,不就成了8位吗,按照C语言里的解释tempsys的低八位才发了出去呀,然后发完数组的两个元素就没有了(tempsys[2]),后面6个发的是什么数据呀?
下面是函数原型,求解,万分感谢,
//更新某一个//fxpath:路径
//fx:更新的内容 0,ungbk;1 ,gbk16;
//返回值:0,成功;其他,失败.
u8 updata_fontx(u8 *fxpath,u8 fx)
{
u32 flashaddr=0;
u32 tempsys[2]; //临时记录文件起始位置和文件大小
FIL * fftemp;
u8 res;
u16 bread;
u32 offx=0;
fftemp=&gbkFile;
if(fftemp==NULL)return 1; //内存分配出错.
res=f_open(fftemp,(const TCHAR*)fxpath,FA_READ);
if(res)//打开文件失败
{
f_close(fftemp);
return 2;//文件丢失
}
if(fftemp==NULL)return 2;
if(fx==0)//更新UNI2GBK.SYS
{
tempsys[0]=ftinfo.ugbkaddr; //UNIGBK存放地址
tempsys[1]=fftemp->fsize; //UNIGBK 大小
SPI_Flash_Write((u8*)tempsys,FONTINFOADDR,8); //记录在地址FONTINFOADDR+1~8处
flashaddr=ftinfo.ugbkaddr;
}else//GBK16
{
SPI_Flash_Read((u8*)tempsys,FONTINFOADDR,8); //读出8个字节
flashaddr=tempsys[0]+tempsys[1];
tempsys[0]=flashaddr; //GBK16的起始地址
tempsys[1]=fftemp->fsize; //GBK16 大小
SPI_Flash_Write((u8*)tempsys,FONTINFOADDR+8,8); //记录在地址FONTINFOADDR+1~8+16处
}
while(res==FR_OK)//死循环执行
{
res=f_read(fftemp,temp,1024,(UINT *)&bread);
if(res!=FR_OK)break; //执行错误
SPI_Flash_Write(temp,offx+flashaddr,1024);//从0开始写入1024个数据
offx+=bread;
fupd_prog(fftemp->fsize,offx); //进度显示
if(bread!=1024)break; //读完了.
}
return res;
} |