搜索
bottom↓
回复: 13

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

[复制链接]

出0入0汤圆

发表于 2009-2-23 23:53:14 | 显示全部楼层 |阅读模式
用ATmega8写MzL05-12864 液晶驱动,flash只能存几个16*16汉字的字模,程序才4K不到,flash不是有8K吗?我想存100个汉字进去,难道还要我加存储器,没搞错啊!字库只要大点程序就运行错误,现在只能存10个字的,我驱动是与字数无关的,字模数组是存在程序存储的.

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2009-2-24 08:00:05 | 显示全部楼层
你不会是存到RAM里去了吧?

出0入0汤圆

发表于 2009-2-24 08:38:54 | 显示全部楼层
估计是用的GCC,然后声明字模数据称const了。

出0入0汤圆

 楼主| 发表于 2009-2-27 07:51:10 | 显示全部楼层
2楼说我不错,我是声明字模数据称const了,这样子有什么不对吗,我这前是学51的,AVR是刚学的.

出0入0汤圆

发表于 2009-2-27 08:57:10 | 显示全部楼层
呵呵,GCC先看一下它的文档,pgm部分

出0入0汤圆

 楼主| 发表于 2009-2-28 17:10:49 | 显示全部楼层
我现在用AtmanAvr这个软件也还是这样子,我没有声明字模数据在const

出75入4汤圆

发表于 2009-3-6 11:15:37 | 显示全部楼层
这个gcc和keil c不一样,gcc符合标准。

出0入0汤圆

 楼主| 发表于 2009-3-7 11:48:31 | 显示全部楼层
问题搞清楚了,只要定义字模数组在FLASH里就可以了,然后就是调用的问题了,我试过了好多种方法都不行,都有是在网是找的,读到的数据和我存的不一样,为什么?还有就是ATmega8的FLASH不能存100个汉字的字模,是我算错了.

出0入0汤圆

发表于 2009-3-7 14:18:49 | 显示全部楼层
注意:M8的FLASH为8K字节(4K字)。
如果你的程序本身不到4K字节的话,那么可以放100个字的字模(32*100=3200字节)。

出0入0汤圆

 楼主| 发表于 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_int  int __attribute__((progmem))
prog_long  long __attribute__((progmem))
prog_long_long  long long __attribute__((progmem))
PGM_P  prog_char const*
PGM_VOID_P  prog_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;

出0入0汤圆

发表于 2010-6-28 15:26:50 | 显示全部楼层
学习了。感谢

出0入0汤圆

发表于 2012-5-25 21:28:25 | 显示全部楼层
这个学习了。

出0入0汤圆

发表于 2014-8-30 10:21:27 | 显示全部楼层
请问楼主你用的什么编程软件 是winAVR?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 16:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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