找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 486|回复: 14
收起左侧

程序大小超过flash也能烧录吗

  [复制链接]
ID:705846 发表于 2024-7-22 22:25 | 显示全部楼层 |阅读模式
我用15W408AS, 规格书上说明是8K flash, 但我的hex文件15K了,烧录正常,这个是怎么回事,哪位帮忙普及一下知识。谢谢。
回复

使用道具 举报

ID:69038 发表于 2024-7-22 23:30 | 显示全部楼层
最终写入的文件是BIN的,如果是hex文件,会大好多。
回复

使用道具 举报

ID:517951 发表于 2024-7-23 07:36 | 显示全部楼层
8K空间确能烧进去15K hex, 能不能正常跑程序,是个问题.
回复

使用道具 举报

ID:88256 发表于 2024-7-23 08:10 | 显示全部楼层
hex文件大小有15K,但烧写进单片机的却不会有那么大,因为hex格式的文件里面有地址、验证码等,如果是bin格式的就一样大了。想了解更多可以搜索hex、bin的文件格式。至于能够烧写进去,要么是设定的问题,要么是软件的问题,没有进行报错(确实超过的情况下),这时候烧写,是后面的覆盖前面的内容,程序运行就不正常了。
回复

使用道具 举报

ID:118322 发表于 2024-7-23 08:40 | 显示全部楼层
要看编译后的code是多大,hex文件虽然有15K,但是code有可能只有7K多。
回复

使用道具 举报

ID:879348 发表于 2024-7-23 08:54 | 显示全部楼层
hex大小不等于程序大小
回复

使用道具 举报

ID:829223 发表于 2024-7-23 08:55 | 显示全部楼层
如果超过了,在烧录程序时会有提示
回复

使用道具 举报

ID:341045 发表于 2024-7-23 09:17 | 显示全部楼层
进入STC-ISP, 点打开程序文件装入HEX文件, 右大框下面有代码长度就是实际占用空间, 不好理解就点保存数据, 输入文件名后会以BIN方式保存, 这个文件大小就是实际占用空间大小. HEX会是实际空间的2点多倍
回复

使用道具 举报

ID:401564 发表于 2024-7-23 09:35 | 显示全部楼层
这个要看在Keil编译后的提示,里面会有code的大小
新版本的下载不知道,几年前的某个版本code超过了,会有提示,但还是可以下载的,只是没法运行而已,烧录是成功的
程序大小是看code长度,不是看HEX这个文件本身的大小
回复

使用道具 举报

ID:57657 发表于 2024-7-23 10:19 | 显示全部楼层
某程序编译后编译器提示19字节,编译器会将bin编码成hex格式为90字节。
单片机烧录软件打开hex格式后,首先将hex解码成bin数据,解码出的19字节才是被写入单片机的数据。
回复

使用道具 举报

ID:277550 发表于 2024-7-23 10:34 | 显示全部楼层

hex文件是文本格式,每行有命令、地址、数据、校验等。。。。。实际的二进制数据和bin文件一致的。
回复

使用道具 举报

ID:705846 发表于 2024-7-23 11:25 | 显示全部楼层
Y_G_G 发表于 2024-7-23 09:35
这个要看在Keil编译后的提示,里面会有code的大小
新版本的下载不知道,几年前的某个版本code超过了,会有提 ...

程序可以正常使用,转成bin文件占用空间8KB

1234.JPG
回复

使用道具 举报

ID:57657 发表于 2024-7-23 21:08 | 显示全部楼层
samxon 发表于 2024-7-23 11:25
程序可以正常使用,转成bin文件占用空间8KB

硬盘格式化时簇大小为4kb,文件4kb以内占4kb,超过4kb且8kb以内占8kb,大于8kb小于等于12kb的占12kb,以此类推...
回复

使用道具 举报

ID:401564 发表于 2024-7-23 21:56 | 显示全部楼层
samxon 发表于 2024-7-23 11:25
程序可以正常使用,转成bin文件占用空间8KB

51hei截图20240723215406.png 看左下,那个就是代码的长度,这个是16进制的或者是在Keil中编译后,看这个,这个是10进制的 51hei截图20240723215533.png

如果代码长度超过了单片机的程序空间,下载器会有提示的
回复

使用道具 举报

ID:1129742 发表于 2024-7-28 20:26 | 显示全部楼层
在单片机上烧录程序时,程序大小通常受限于芯片内部的闪存(Flash)容量。通常情况下,如果程序大小超过芯片的Flash容量,是不能正常烧录的,因为存储空间不够。然而,在你提到的情况中,使用15W408AS芯片(假设是一种8K Flash容量的单片机)却能正常烧录一个15K的hex文件,这可能有以下几个原因:

1. 不同的存储单位
Flash容量与hex文件大小的单位不同:Flash的容量通常以字节(Bytes)为单位,而hex文件的大小可能包括更多的信息,不仅仅是纯代码数据。hex文件中包含了程序的二进制代码(机器码),但也可能包含其他信息,如校验和、地址等,这些额外的信息并不会被烧录到芯片中,只是在烧录过程中用于验证和定位。
2. 压缩和优化
编译器优化:编译器在生成hex文件时可能会进行优化,将程序代码压缩到更小的尺寸。因此,hex文件的大小不一定直接反映程序在Flash中的占用空间。
3. 程序空间与数据空间的区分
Flash与其他存储器:某些单片机具有不同类型的存储空间,如代码存储区(Flash)和数据存储区(如RAM、EEPROM)。hex文件的某些部分可能属于数据区,而不占用代码存储区的空间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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