keil 中 data区域的问题

LinuxStriver 2013-09-05 09:23:26
今天遇到一个很奇怪的问题,在keil中,在STC12C5A60S2下,写了很多函数,当在主函数中没有调用某些函数时,编译时:data=132,当加上某个函数调用时:data=65;对此,本人很不理解,请大神解答!
...全文
406 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qllaoda 2013-09-14
  • 打赏
  • 举报
回复
KEIL会做RAM的覆盖分析优化,这样可以减少RAM的消耗,而没有被调用的函数还是会被保留,而且不参与优化分析,所以这些函数占用的RAM无法被优化,导致RAM消耗反而更大。这个跟data区没有关系,任何区域的变量都是如此。
qgq8312 2013-09-07
  • 打赏
  • 举报
回复
你加的函数是不是内部占用了很大的RAM,导致溢出了?
rszqy 2013-09-06
  • 打赏
  • 举报
回复
C51会把没有调用的函数当作中断函数,而且会给中断函数里的的局部变量预留空间,就像全局变量一样给分配了内存,所以出现这种情况就没什么奇怪了.
lbing7 2013-09-06
  • 打赏
  • 举报
回复
这种不奇怪,只是和编译器对资源的分配策略有关
dceacho 2013-09-05
  • 打赏
  • 举报
回复
对于一些没用到的函数,其消耗的资源(RAM)keil出于安全考虑(可能是这个原因)是仍然保留的,所以如果很多函数写了但没用则会消耗掉大量的RAM,相反,你在无关紧要的地方随便调用一下就能大幅度消减RAM消耗. 在ARM的MDK中one ELF section per function已经可以解决这个问题
To_be_sky 2013-09-05
  • 打赏
  • 举报
回复
keil编译时有几个data。要先搞清楚每个data的意思。 你说的data是不是用到的变量数?
青松2 2013-09-05
  • 打赏
  • 举报
回复
自动优化掉了?

27,510

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧