打印

单片机很实用但很少人会的一个问题

[复制链接]
13643|55
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dosculler|  楼主 | 2011-3-28 18:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dosculler 于 2011-3-28 18:16 编辑

为了缩小烧入单片机的程序大小,很多时候都会选择在程序初始化的时候把数据定义在eeprom里,但如果这个数据很大,如何直接生成eeprom文件烧入单片机?
比如,我详细地说下,我用的是STC宏晶的51单片机,假如我想让第一扇区(有512个字节)写入分别为0~512的值,我该如何编写生成这个eeprom文件,利用STC-ISP的软件第2个步骤“打开eeprom文件”,烧写进入单片机呢??

相关帖子

沙发
holle| | 2011-3-28 20:06 | 只看该作者
可以放在flash里,用程序下到eeprom中,但不能每次都下,不然eeprom很快就完了。
在eeprom中做个标识,下载前先读这个标识,没有标识就烧,有了就不烧。

使用特权

评论回复
板凳
wztxssbkqf| | 2011-3-28 20:13 | 只看该作者
eeprom中的数据是掉电不丢失的,你可以先写个程序把要写入的数据写入EEProm中,然后才下载你要下的程序,就可以读取EEPROM中的数据啦

使用特权

评论回复
地板
chunyang| | 2011-3-29 01:08 | 只看该作者
数据区的内容可单独编写一简单的程序,内容只有除头文件外只有定义为ROM区的一个数组,编译后及可得到一个HEX文件,将之烧录到MCU中即可,也可以用16进制编辑器直接编写生成BIN文件,然后烧录即可。

使用特权

评论回复
5
yewuyi| | 2011-3-29 08:40 | 只看该作者
单片机很实用但很少人会的一个问题
本帖最后由 dosculler 于 2011-3-28 18:16 编辑

为了缩小烧入单片机的程序大小,很多时候都会选择在程序初始化的时候把数据定义在eeprom里,但如果这个数据很大,如何直接生成eeprom文件烧入单片机?
比如,我详细地说下,我用的是STC宏晶的51单片机,假如我想让第一扇区(有512个字节)写入分别为0~512的值,我该如何编写生成这个eeprom文件,利用STC-ISP的软件第2个步骤“打开eeprom文件”,烧写进入单片机呢??



LZ问的好奇怪哦。
1、单片机很实用但很少人会的一个问题
能用单片机做设计的人多的很哦,你为什么说很少人会呢?
2、STC没有EEPROM哦,你可是大大的弄错了啊,你可能说的是FLASH ROM哦。
3、把数据放在FLASH空间里面也不能一定保证可以减小CODE的大小
4、你要向指定FLASH空间存入指定的数据,则首先你需要在程序中定义一个常量数组,数组长度就是你需要的数据表长度,数组元素就是你需要的数据,至于保存到指定空间,则需要你能看懂C编译器是如何连接目标文件的,并且能手工对目标文件进行连接。
另外,考虑到51的开头部分的地址可能是入口和中断向量的,所以,要特别注意哦,别让你的代码是0和1的组合,而不能真正发挥它的灵魂,让它工作起来。。。

使用特权

评论回复
6
dosculler|  楼主 | 2011-3-29 09:47 | 只看该作者
5# yewuyi

我说的很少人会是指这个单独烧进eeprom的做法,单片机肯定是大把大把的人会
STC以前是没有eeprom的,这两年出的产品如11F系统已经内嵌了eeprom,所以在STC-ISP的烧写器上有个选项“打开eeprom文件”,其实我想问的就是这个打开选项如何使用
所以把字节占的容量放到eeprom里,就减少了code的容量占有

使用特权

评论回复
7
dosculler|  楼主 | 2011-3-29 09:49 | 只看该作者
3# wztxssbkqf

是个好办法,不过有没有人知道如何使用STC-ISP烧写软件里的步骤2:“打开eeprom文件”呢,或者是如何直接生成一个eeprom文件呢?
看其软件的意思就是可以直接写一个eeprom文件,通过这个软件烧写进去

使用特权

评论回复
8
yewuyi| | 2011-3-29 10:10 | 只看该作者
5# yewuyi  

我说的很少人会是指这个单独烧进eeprom的做法,单片机肯定是大把大把的人会
STC以前是没有eeprom的,这两年出的产品如11F系统已经内嵌了eeprom,所以在STC-ISP的烧写器上有个选项“打开eeprom文件”, ...
dosculler 发表于 2011-3-29 09:47


真的是EEPROM吗?

使用特权

评论回复
9
coody| | 2011-3-29 11:56 | 只看该作者
我怎么觉得你们一说EEPROM就是指24C01那样的呢? 我一直认为,EEPROM (Electrically-Erasable Programmable Read-Only Memory)意思是“电子擦除式可编程只读存储器”,凡是电可擦写的都是EEPROM。。。

90年代初,我用的EEPROM都是28脚的,32K,那时候,还木看到24Cxx。。。。

使用特权

评论回复
10
rockli| | 2011-3-29 12:17 | 只看该作者
我怎么觉得你们一说EEPROM就是指24C01那样的呢? 我一直认为,EEPROM (Electrically-Erasable Programmable Read-Only Memory)意思是“电子擦除式可编程只读存储器”,凡是电可擦写的都是EEPROM。。。

90年代初 ...
coody 发表于 2011-3-29 11:56


电工一般认为EEPROM是单个字节可擦可写的,如果要整个扇区擦除的,一般定义为flash ROM

使用特权

评论回复
11
yefeng3309| | 2011-3-29 12:23 | 只看该作者
放眼所有具相同功能的单片机,也只有STC敢将这个从FLASH ROM分出来的一个区出叫做EEPROM。

使用特权

评论回复
12
dosculler|  楼主 | 2011-3-29 12:28 | 只看该作者
电工一般认为EEPROM是单个字节可擦可写的,如果要整个扇区擦除的,一般定义为flash ROM
rockli 发表于 2011-3-29 12:17


的确,一般的认知是EEPROM是单个字节可擦写的,但类似宏晶的EEPROM却只能整片扇区来删除,而又具有掉电不断数据的特征,个人觉得不能以这个标准来定义eeprom了

使用特权

评论回复
13
new1988| | 2011-3-29 12:30 | 只看该作者
6# dosculler
谁说的,你去看看那些学习型的遥控,都要往eeropm里面烧写数据的。一些键值,都是预先烧好在eeprom里面的。普通的单片机产品不往EEPROM里面烧写数据,那是因为现在的单片机的flash都有那么大,没必要搞的那么麻烦。而遥控里面的单片机有的甚至是四位机,ROM很小。

使用特权

评论回复
14
liuzhenya| | 2011-3-29 12:35 | 只看该作者
:)

使用特权

评论回复
15
dosculler|  楼主 | 2011-3-29 13:12 | 只看该作者
14# new1988

的确,我就是用到了很多数据要存储在eeprom,
举个例子,单片机是16K的,但我的程序已经有16K,不能再额外写程序定字节,所以就想另外生成个eeprom单独烧进程序单片机里。
正如3楼所说,可以先写个程序文件烧好eeprom,再把自己的程序写进去。但更想的是方便点,直接烧eeprom文件

使用特权

评论回复
16
dosculler|  楼主 | 2011-3-29 13:22 | 只看该作者
放眼所有具相同功能的单片机,也只有STC敢将这个从FLASH ROM分出来的一个区出叫做EEPROM。
yefeng3309 发表于 2011-3-29 12:23


11楼看来对STC单片机有很深的了解,的确宏晶把flash rom分出一个区后叫eeprom,所以一擦除就要整个扇区一起擦,导致eeprom不像eeprom,flash不像flash

使用特权

评论回复
17
new1988| | 2011-3-29 13:26 | 只看该作者
16# dosculler
既然eeprom都是flash画分的,你用eeprom不就跟用falsh一样的?
你16K的代码和16K的数据,加起来不还是要用32Kfalsh的单片机。还不如直接存在flash里面。

使用特权

评论回复
18
yuyetufu| | 2011-3-29 15:46 | 只看该作者
中颖好像也是这样。有一块较小的扇区划出来,叫 类E2PROM。
没用过 STC 11F的,,看楼主的介绍,这E2PROM应该不属于单片机ROM范围内。是ROM外面的,那当然可以减少CODE代码。就像把数据放入外部的24存储器一样,减少占用ROM空间。

使用特权

评论回复
19
aihe| | 2011-3-29 16:36 | 只看该作者


楼主仔细看看STC软件中可以写入的

使用特权

评论回复
20
john_light| | 2011-3-29 17:01 | 只看该作者
STC的技术已经走在世界前列,相当令人振奋!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

329

帖子

1

粉丝