要是差距不太大的话,注释掉一部分warning的提示没有用到代码。
Warning的代码会被编译器自动优化掉吗? 默认情况下,Warning L16的代码段会被linker加到flash里面,虽然没用到。 嵌入式之路 发表于 2024-4-5 11:23
Warning的代码会被编译器自动优化掉吗?
一般不会 加个FATFS够呛了 社区闲人 发表于 2024-4-3 12:21
1. 使用Keil的优化级别9将代码优化,可以进一步节省程序空间
2. 使用"REMOVEUNUSED"。
把target options ...
{:4_250:}{:4_250:}{:4_250:},我之前胡乱设置的,改成9后编译空间占用明显减少 社区闲人 发表于 2024-4-3 12:21
1. 使用Keil的优化级别9将代码优化,可以进一步节省程序空间
2. 使用"REMOVEUNUSED"。
把target options ...
有些变量就要加 volatile 关键字。 社区闲人 发表于 2024-4-3 12:21
1. 使用Keil的优化级别9将代码优化,可以进一步节省程序空间
2. 使用"REMOVEUNUSED"。
把target options ...
我今天才学会这一招,赞一个!
Keil默认设置太保守了,不调用的函数竟然也会被链接进最终的二进制文件里…… 关于楼主提到的
【文件大小超出程序区范围,超出部分已被自动移到EEPROM区】
“提示将程序放到了eeprom里,这样程序能正常运行吗?”
答案是:
大部分STC51单片机都是能正常运行的!但是STC89C52等型号不行
以STC89C52RC为例,标称8KB flash,6KB eeprom
flash和eeporm均位于8051处理器的CODE地址空间中,该空间为16位空间,最大支持64KB寻址。8051处理器的程序代码必须放在CODE区里运行
flash的地址为CODE空间的 0x0000~0x1FFF
eeprom的地址为CODE空间的 0x2000~0x37FF (以6KB版本为例)
这两段地址是完全连续的。所以如果8KB不够,那么多余的代码自动分割至eeprom区,也是完全可以正常运行的!
然而STC89C52型号(这是个过渡型号,目前已经停产,在产的是STC89C52RC)
flash的地址为CODE空间的 0x0000~0x1FFF(但是最后7字节是芯片ID)
eeprom的地址为CODE空间的 0x2000~0x37FF (以6KB版本为例)
所以可用的空间是0x0000~0x1FF8和0x2000~0x37FF,中间有7个字节是断开的,不能连续访问!!!所以不能简单做分割处理:【超出部分自动移到EEPROM区】
另外需要明确一个概念。STC单片机内的所谓的EEPROM,和24c02这种真正的EEPROM器件具有如下异同:
相同点:
可以用单片机程序控制擦写
断电不丢失
不同点:
STC单片机内的EEPROM实际是一段flash区,只是通过特殊的设计,使其可以通过程序控制擦写。其中,擦除需要以页为单位(512字节必须同时全部被擦),写以字节为单位(1字节)
24c02采用了真正的EEPROM器件架构,允许单字节独立改写
值得注意的是:IAP的STC单片机,全部flash区都允许通过程序控制擦写!实现了所有flash区,既是flash,又是eeprom!
我记得之前一位大佬说,为了让空间够用,特意学了汇编
a496298685 发表于 2024-10-31 22:54
关于楼主提到的
【文件大小超出程序区范围,超出部分已被自动移到EEPROM区】
谢谢你的解释,又学习到了新知识.谢谢恢复作者.
页:
1
[2]