我是靠谱客的博主 聪慧彩虹,最近开发中收集的这篇文章主要介绍c语言 将结构体放在flash,如何将 结构体 的 数据 定义在flash里面,并如何读出来,求各位达人帮助……...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如题,本人不太熟悉GCC,特别是定义在flash和eeprom的数据,所以在做液晶的字库时遇到问题,讲解下思路:用查表的方式,定义一个结构体来装载字符的内码和字符数据。程序如下:

/*******************************************字库定义******************************/

// ------------------  汉字字模的数据结构定义 ------------------------ //

struct  typFNT_GB32                 // 汉字字模数据结构

{

unsigned char  Index[3];               // 汉字内码索引

unsigned char   Msk[128];                        // 点阵码数据

};

/

// 汉字字模表                                                          //

// 汉字库: 宋体32.dot,横向取模左高位,数据排列:从左到右从上到下         //

/

struct  typFNT_GB32 codeGB_32[] PROGMEM={                                 // 数据表

/*--  文字:  彩  --*/

/*--  宋体22;  此字体下对应的点阵为:宽x高=30x29   --*/

/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/

{{"彩"},{0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x1F,0xC0,0xC0,0x03,0xFF,0xC1,0xE0,

0x3F,0xE0,0x03,0xE0,0x00,0xE3,0xC7,0xC0,0x18,0xF3,0xCF,0x00,0x1E,0x7B,0x9E,0x00,

0x0F,0x7F,0x3C,0x00,0x07,0x37,0xF0,0x00,0x07,0x6E,0xC0,0x60,0x02,0x7C,0x00,0xF0,

0x00,0x70,0x81,0xF0,0x3F,0xFF,0xC3,0xC0,0x3F,0xFF,0xEF,0x80,0x01,0xF0,0x1E,0x00,

0x01,0xF8,0x78,0x00,0x03,0xFC,0xF0,0x70,0x03,0xFF,0x80,0xF8,0x07,0xF7,0x81,0xF8,

0x07,0x77,0x83,0xE0,0x0E,0x73,0x87,0xC0,0x1C,0x71,0x8F,0x00,0x38,0x70,0x3E,0x00,

0x30,0x70,0xF8,0x00,0x60,0x73,0xE0,0x00,0x00,0x7F,0x80,0x00,0x00,0x7C,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},

};

/******************************读取字库送显***************************************/

void PutGB3232(unsigned short x, unsigned short  y, unsigned char c[2], unsigned int fColor,unsigned int bColor,uint8 b_en)

{

unsigned int i,j,k;

LCD_SetPos(x,  x+32-1,y, y+32-1);

for (k=0;k<50;k++) { //15标示自建汉字库中的个数,循环查询内码

if ((pgm_read_byte(codeGB_32[k].Index[0])==c[0])&&(pgm_read_byte(codeGB_32[k].Index[1])==c[1])){

for(i=0;i<128;i++) {

unsigned short m=pgm_read_byte(codeGB_32[k].Msk);

for(j=0;j<8;j++) {

if((m&0x80)==0x80) {

Write_Data_U16(fColor);

}

else if(b_en) {

Write_Data_U16(bColor);

}

m<<=1;

}

}

}

}

}

我试着把数据定义在内存里面,就是把 PROGMEM 和 pgm_read_byte 去掉,液晶能正常的显示汉字,

但是当我把字库定义在flash里面的时候,就读不出数据了,我知道问题出现在结构体的定义和数据的读取那里,但是我不知道怎么改,求各位帮帮忙解决下好吗,小弟万分感激!!!

最后

以上就是聪慧彩虹为你收集整理的c语言 将结构体放在flash,如何将 结构体 的 数据 定义在flash里面,并如何读出来,求各位达人帮助……...的全部内容,希望文章能够帮你解决c语言 将结构体放在flash,如何将 结构体 的 数据 定义在flash里面,并如何读出来,求各位达人帮助……...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部