tiejian 发表于 2009-2-23 23:53:14

用ATmega8写MzL05-12864 液晶驱动,flash只能存几个16*16汉字的字模,程序才4K不到,为什么?

用ATmega8写MzL05-12864 液晶驱动,flash只能存几个16*16汉字的字模,程序才4K不到,flash不是有8K吗?我想存100个汉字进去,难道还要我加存储器,没搞错啊!字库只要大点程序就运行错误,现在只能存10个字的,我驱动是与字数无关的,字模数组是存在程序存储的.

andyjuly 发表于 2009-2-24 08:00:05

你不会是存到RAM里去了吧?

yangsen 发表于 2009-2-24 08:38:54

估计是用的GCC,然后声明字模数据称const了。

tiejian 发表于 2009-2-27 07:51:10

2楼说我不错,我是声明字模数据称const了,这样子有什么不对吗,我这前是学51的,AVR是刚学的.

aicey 发表于 2009-2-27 08:57:10

呵呵,GCC先看一下它的文档,pgm部分

tiejian 发表于 2009-2-28 17:10:49

我现在用AtmanAvr这个软件也还是这样子,我没有声明字模数据在const

taishandadi 发表于 2009-3-6 11:15:37

这个gcc和keil c不一样,gcc符合标准。

tiejian 发表于 2009-3-7 11:48:31

问题搞清楚了,只要定义字模数组在FLASH里就可以了,然后就是调用的问题了,我试过了好多种方法都不行,都有是在网是找的,读到的数据和我存的不一样,为什么?还有就是ATmega8的FLASH不能存100个汉字的字模,是我算错了.

machao 发表于 2009-3-7 14:18:49

注意:M8的FLASH为8K字节(4K字)。
如果你的程序本身不到4K字节的话,那么可以放100个字的字模(32*100=3200字节)。

tiejian 发表于 2009-3-13 20:22:16

在GCC里找到了读FLASH的函数了,现在我把读写的都表上来,其实在芯艺的<<AVR单片机GCC程序设计>>里面就有,我最近弄AVR就是一直参考他的这本书的,太有帮助了,真是太感谢他了!

flash 中的变量
在 flash 空间声明变量,GCC 规定使用关键字 __attribute__((progmem))。为了应用上方便,在 <progmem.h>文件中定义了 flash 空间的数据类型,可以直接使用他们定义 flash 变量。表 5-1 列出了这些数据类型。

表 5-1 flash 空间的数据类型


--------------------------------------------------------------------------------

类型 定义
prog_void void __attribute__((progmem))
prog_char char __attribute__((progmem))
prog_uchar unsigned char __attribute__((progmem))
prog_intint __attribute__((progmem))
prog_longlong __attribute__((progmem))
prog_long_longlong long __attribute__((progmem))
PGM_Pprog_char const*
PGM_VOID_Pprog_void const*

--------------------------------------------------------------------------------


flash 空间的变量定义。



const prog_uchar LINE[] = {1,2,3,4};

AtmanAvr C 定义了宏 FLASH , flash 空间的变量也可以如下定义:

FLASH char str[] = {"string in flash"};


读FLASH
pgm_read_byte
#include <pgmspace.h>

pgm_read_byte(unsigned short addr);

返回值
8-bit 数据

参数
addr 16-bit ROM 地址

注释
从程序存储空间 addr 读取一字节。


FLASH double d = 123.456;

code_asf 发表于 2010-6-28 15:26:50

学习了。感谢

liangws201 发表于 2012-5-25 21:28:25

这个学习了。

一往无前 发表于 2014-8-30 10:21:27

请问楼主你用的什么编程软件 是winAVR?
页: [1]
查看完整版本: 用ATmega8写MzL05-12864 液晶驱动,flash只能存几个16*16汉字的字模,程序才4K不到,为什么?