OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4219|回复: 4

ALIENTEK MINISTM32 实验24 汉字显示实验

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-11-17
在线时间
0 小时
发表于 2014-2-11 22:07:32 | 显示全部楼层 |阅读模式
这个实验中的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;
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-12 09:00:35 | 显示全部楼层
回复【楼主位】闪客小子:
---------------------------------
帮顶。。。
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-12 11:28:19 | 显示全部楼层
回复【楼主位】闪客小子:
---------------------------------
指针还是不会用啊.
tempsys是2个元素的数组,u32,一个是4字节,2个就是8字节.
SPI_Flash_Write((u8*)tempsys,FONTINFOADDR+8,8);
就是强制将tempsys转换为U8*指针,只想tempsys的首地址.
这样连续写8个字节,就是tempsys的所有内容了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-11-17
在线时间
0 小时
 楼主| 发表于 2014-2-14 11:28:24 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢了,原子哥
回复 支持 反对

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2014-3-17
在线时间
106 小时
发表于 2014-10-27 14:56:29 | 显示全部楼层
学习了,指针还得学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 22:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表