STM32 汉字库+ascii字库 存放到 flash中

#ifndef __FONTUPD_H__

#define __FONTUPD_H__

#include "sys.h"

 

//字库信息结构体定义33字节

__packed typedef struct

{

u8 fontok; //字库存在标志,0XAA,字库正常;其他,字库不存在

u32 ugbkaddr; //unigbk的地址

u32 ugbksize; //unigbk的大小

u32 f12addr; //gbk12地址

u32 gbk12size; //gbk12的大小

u32 f16addr; //gbk16地址

u32 gbk16size; //gbk16的大小

u32 f24addr; //gbk24地址

u32 gkb24size; //gbk24的大小

}_font_info;

extern _font_info ftinfo; //汉字库信息结构体

 

//字库信息结构体定义 25字节

//第1个字节用于标记字库是否存在.后续分别保存起始地址和文件大小

__packed typedef struct

{

u8 fontflag; //字库存在标志,0XAA,字库正常;其他,字库不存在

u32 asc1206_addr; //asc1206的地址

u32 asc1206_size; //asc1206的大小

u32 asc1608_addr; //asc1608地址

u32 asc1608_size; //asc1608的大小

u32 asc2412_addr; //asc2412地址

u32 asc2412_size; //asc2412的大小

} _ascii_font;

extern _ascii_font ascii_font; //ascii字库信息结构体

 

 

u8 updata_HZ_fontx(u8 *fxpath,u8 fx); //更新指定字库

u8 update_HZ_font(u8* src); //更新全部字库

u8 HZ_font_init(void); //初始化字库

 

u8 updata_ascii_fontx(u8 *fxpath,u8 fx); //更新指定字库

u8 update_ascii_font(u8* src); //更新全部字库

u8 ascii_font_init(void); //初始化字库

 

u8 font_init(void);

void updateHZfont(void);

void updateasciifont(void);

#endif

 

 

 

#include "fontupd.h"

#include "malloc.h"

#include "ff.h"

#include "w25qxx.h"

#include "string.h"

#include "delay.h"

#include "usart.h"

 

 

/* ascii字库在flash中的地址及大小(字节)

fontflagaddr=15831040 ascii_font_size=25

asc1206_addr=15831065 asc1206_size=1140

asc1608_addr=15832205 asc1608_size=1520

asc2412_addr=15833725 asc2412_size=3420

*/

 

//W25Q128FVFIG容量有128Mbit = 16MB

//前面12M被fatfs占用了,从12M地址以后存放字库结构体、UNIGBK.bin、和三个字库

//地址: (1024*12)*1024 字节处,大小约 3.09M,不能动!

//15.10M以后,存放ASCII三个字库

//首地址: 1024*1024*15 + 1024*100 =15831040字节处 字库总大小25+ 6080字节,也不能动 !

//15.20M以后剩余0.8M字节空间,用户可以使用。

 

//汉字库区域占用的总扇区数大小(3个字库+unigbk表+字库信息=3238700字节,3238700/512=791)

//ascii字库区域占用的总扇区数大小 //(字库信息结构体+字库 = 25+ 6080字节,占12个W25QXX扇区)

 

#define ASCII_FONT_SECSIZE 12 //ascii字库占用扇区

#define ASCIIFONTINFOADDR 1024*1024*15 + 1024*100 //ascii字库起始地址

#define FONTSECSIZE 791 //汉字库占用扇区

#define FONTINFOADDR 1024*1024*12 //汉字库起始地址

_font_info ftinfo; //用来保存字库基本信息,地址,大小等

_ascii_font ascii_font; //用来保存字库基本信息,地址,大小等

 

//汉字库存放在磁盘中的路径

u8*const GBK24_PATH="/SYSTEM/FONT/GBK24.FON"; //GBK24的存放位置

u8*const GBK16_PATH="/SYSTEM/FONT/GBK16.FON"; //GBK16的存放位置

u8*const GBK12_PATH="/SYSTEM/FONT/GBK12.FON"; //GBK12的存放位置

u8*const UNIGBK_PATH="/SYSTEM/FONT/UNIGBK.BIN"; //UNIGBK.BIN的存放位置

//ascii字库存放在磁盘中的路径

u8*const ASC1206_PATH="/SYSTEM/FONT/ASC1206.dat"; //asc1206的存放位置

u8*const ASC1608_PATH="/SYSTEM/FONT/ASC1608.dat"; //asc1608的存放位置

u8*const ASC2412_PATH="/SYSTEM/FONT/ASC2412.dat"; //asc2412的存放位置

 

 

 

//更新某一个

//fxpath:路径

//fx:更新的内容 0,ungbk;1,gbk12;2,gbk16;3,gbk24;

//返回值:0,成功;其他,失败.

u8 updata_HZ_fontx(u8 *fxpath,u8 fx)

{

u32 flashaddr=0;

FIL * fftemp;

u8 *tempbuf;

u8 res;

u16 bread;

u32 offx=0;

u8 rval=0;

fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //分配内存

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值