本帖最后由 AVRx007 于 2009-12-15 09:37 编辑
现在手上的一个工程,代码用的差不多(63K多,还没写完),优化却好像没有起作用
程序空间 64KB
前面 40KB是 MaskROM,厂家已经固化了代码在里面,用 *.LIN 锁定了地址, 通过*.LIB *.h来被调用
*.LIN 里面指定了 部分 BIT,DATA,IDATA,XDATA,CODE 的编译位置,用定位MaskROM部分代码
后面 24KB是 SRAM(CODE接法),开机由MaskROM的引导代码自动从外部FLASH读程序。
厂家的LIB有一部分锁定在MaskROM,有一部分会编译到SRAM。 里面还用了间接跳转表
我只能修改这24KB的部分空间
却发现
我写了部分函数,即使未调用这个函数,没有提示却直接编译了进去
厂家LIB里面也有很多未调用函数,照样编译进去了,定位MaskROM的无所谓,不过自由分配到SRAM的就好浪费
查看*.LIN 里面用了 NOOVERLAY ,所以会直接编译 未调用函数
如果去掉 NOOVERLAY,无法编译
1 间接跳转的
*** WARNING L13: RECURSIVE CALL TO SEGMENT
2 未调用函数的 (好多个)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
*** FATAL ERROR L232: APPLICATION CONTAINS TOO MANY RECURSIONS
Target not created
有什么方法能指定 前40KB 全部编译,而 后24KB 优化编译(起码能去掉 未调用函数)?
或者说
除了 *.LIN 锁定的函数/变量(位于 MaskROM 区) 不用优化之外 ,其他位置的就优化( 位于SRAM区) |