kkk215215 发表于 2007-11-16 19:29:00

16K的程序,为什么也能烧进S52?S52内部FLASH不是只有8KB吗?

16K的程序,为什么也能烧进S52?S52内部FLASH不是只有8KB吗?
论坛里有51的专版,麻烦站长移到51论坛。点太快了

highnose 发表于 2007-11-16 19:41:50

16K 的HEX文件 写进去肯定没问题,如果是BIN文件,铁定写不下!

kkk215215 发表于 2007-11-16 19:43:24

为什么会这样?难道HEX格式的可以压缩?

Edesigner 发表于 2007-11-16 19:55:48

把上半部份烧进去了,但下半部份丢失。RZ问题,低级智慧。

kkk215215 发表于 2007-11-16 20:04:25

http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_181140.jpg
16K的程序,到这里就成这样了。
回3楼:是整个程序,不是一半。麻烦你搞清楚

Edesigner 发表于 2007-11-16 20:09:56

楼主比我想象中更RZ,8K大小的程序以HEX方式保存,文件属性肯定大于8K。

kkk215215 发表于 2007-11-16 21:28:59

不知所云~

kkk215215 发表于 2007-11-16 21:34:07

我看Edesigner只是会耍嘴皮子
前面说:把上半部份烧进去了,但下半部份丢失。   //丢失?应该就是没烧进去吧
后面说:8K大小的程序以HEX方式保存,文件属性肯定大于8K   //既然肯定大于8K,那怎么会只烧一半呢,还下半部份丢失
天啊,还有更RZ的。有空来丽水,我招呼招呼你啊

ppa2001 发表于 2007-11-16 21:42:53

在MCU里数据以BIN文件存放,所以生成的HEX文件大小并不等于BIN文件大小,一般你把HXE文件压缩下的大小大概就是BIN文件的大小了~

bozai 发表于 2007-11-16 21:50:16

我一直有个想法:
                请阿莫把类似我签名中的问题整理成一篇文档,然后放在网站显目的地方,这样可以帮助无数新手在入门时少走弯路路。



不知楼主是否知道什么是机器码,什么是编码,什么是文件,什么是程序。
不知道你观察过没有,建一个word文档在里面输入一个字母后的文件是多大。(如果有,那怎么没反应过来呢?)
楼主这个问题在坛子里我见到应该有几十次了,所以之前搜一下也很容易找到。

kkk215215 发表于 2007-11-16 21:58:18

多谢8楼和9楼~
我用的是KEIL C编译的,是个USB鼠标的程序
多谢楼上2位。我是觉得纳闷,所以就问问。

not_at_all 发表于 2007-11-16 22:04:58

请问楼主所说的16K程序,指的是HEX文件大小还是编译器说整个程序代码为16K?
HEX文件大小为16K,实际写进单片机的代码一定小于16K。
其它如文件系统或文件格式暂且放下不说,就从内容上说,HEX文件除了单片机代码外,还包含校验码等内容。

我们没必要作无谓的口舌之争,大家看看一下内容才在作讨论吧!希望大家有进一步的见解!
相关内容如下;
HEX文件的格式说明

Hex文件的INTEL格式:这是Intel公司提出的按地址排列的数据信息,数据宽度为字节,
所有数据使用16进制数字表示.
这是一个例子:
:10008000AF5F67F0602703E0322CFA92007780C361
:1000900089001C6B7EA7CA9200FE10D2AA00477D81
:0B00A00080FA92006F3600C3A00076CB
:00000001FF
第一行,":"符号表明记录的开始. 后面的两个字符表明记录的长度,这里是10h.
后面的四个字符给出调入的地址,这里是0080h. 后面的两个字符表明记录的类型;
0 数据记录 1 记录文件结束 2 扩展段地址记录 3 开始段地址记录 4 扩展线性地址记录 5
开始线性地址记录后面则是真正的数据记录, 最后两位是校验和检查,它加上前面所有的数据和为0.
最后一行特殊,总是写成这个样子.
扩展Intel Hex的格式(最大1M): 由于普通的Intel的Hex记录文件只能记录64K的地址范围,
所以大于64K的地址数据要靠扩展Intel Hex格式的文件来记录.对于扩展形式Hex文件,
在每一个64K段的开始加上扩展的段地址规定,下面的数据地址均在这个段内,除非出现新的段地址定义.
一个段地址 定义的格式如下:
起始符 长度 起始地址 扩展段标示 扩展段序号 无用 累加和
: 02 0000 02 3000 EC
段地址的标识符是第四组数据02,表示扩展地址段的定义,再后面的以为HEX数表示段的数目,
上面的定义为3,表示段地址是3,所以下面的数据地址是3 + XX(XX是64K段内的地址)

chengjia535 发表于 2007-11-16 22:13:52

支持9楼

hyz_avr 发表于 2007-11-16 23:13:25

5476/8192

你的程序只有5476字节   

8K肯定放得下啊...

至于为什么文件有16K..举个最简单的.你文件名要占用空间吧(当然还有一些其它的),但这并不需要写入S52..所以真正写入单片机的只有5476而已....

bozai 发表于 2007-11-16 23:19:20

【13楼】 hyz_avr:
         别误导人,恰恰你说错了,文件名不占空间。文件名不会记录到文件的大小的,如果你懂fat的话就不会这么说了。不信你试试看看把名字改长一点文件大小会不会变。

如果说结构 11楼说的很清楚了

Edesigner 发表于 2007-11-17 00:00:26

阿莫对这些低技术含量的贴无兴趣

kkk215215 发表于 2007-11-17 10:21:26

多谢各位朋友的解释~(除了Edesigner,就没回答到点子上过,请你不要再回我的帖子。你自己不感兴趣就不感兴趣嘛,干吗非要扯上站长)
回11楼:16K是指编译出来的HEX文件大小
我是菜鸟,请大家多多指教~3Q

hyz_avr 发表于 2007-11-17 10:30:32

【14楼】 bozai

   例子是举错了,文件名是不存在文件里的..

这个应该是对的吧..

5476/8192

程序只有5476字节.

ilikemcu 发表于 2007-11-17 11:06:59

keil c 我也用,编译时可以直接看到程序代码占用字节数的,不用那么麻烦吧?

Edesigner 发表于 2007-11-17 11:25:06

http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_181294.gif

winter 发表于 2007-11-17 11:33:45

.hex 文件的大小不是实际要烧代码的大小,具体的大小要在keil看,比如图中这个,实际code只有2517个字节,但.HEX文件有7.41K这么大

http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_181296.jpg

ATmega32 发表于 2007-11-17 12:03:05

搞笑,一个word文件,就一个字母也还有几十K呢。

adszmc 发表于 2010-2-1 17:42:04

回复【7楼】kkk215215
-----------------------------------------------------------------------

你丽水那的啊?老乡莫。。。。难得    看到留个QQ 165353682

fengye2009 发表于 2010-3-20 22:42:23

通过keil编译后的信息看是最准确的,在windows中查看文件的属性不准确。

XA144F 发表于 2010-3-20 23:38:03

我用IAR给CC2430-F128编写一个Coordinator程序,结果是280KB,不一样写进去了啊。

gshuang1 发表于 2010-3-24 11:50:20

哎,好BC,杯具啊啊啊啊啊啊啊。程序大小看编译器显示结果为准的,你去看文件大小,真是无语。用了那么多年电脑还不知道WINDOWS是怎么回事的,楼主是个杯具

5555555555 发表于 2010-3-24 12:28:29

老乡,我也是丽水龙泉的,现在温州

xcodes 发表于 2010-3-24 13:27:28

回复【26楼】5555555555
-----------------------------------------------------------------------

温州什么地方的?

908101858 发表于 2013-5-25 09:14:33

bozai讲得实在太好了,原来是这么回事,我还差点买个16K的单片机

ycheng2004 发表于 2013-5-25 10:09:02

有没有写进去,写进去多少,
读出来比较一下不就知道了,

kebaojun305 发表于 2013-5-25 10:26:36

看BIN文件才是准的BIN中的才是真正的机器码
页: [1]
查看完整版本: 16K的程序,为什么也能烧进S52?S52内部FLASH不是只有8KB吗?