[技术问答] NUC501代码长度问题怎么解决?

[复制链接]
3086|14
 楼主| tianxialongfei 发表于 2016-1-4 14:48 | 显示全部楼层 |阅读模式
MCU:NUC501(内部只有32K-SRAM)
编译环境:MDK5.10
Program Size: Code=38328 RO-data=124 RW-data=356 ZI-data=1288  
编译出错,大致意思是超过32Kb;
根据datasheet:
由于32KB SRAM空间的限制(代码+ 数据),可扩展XIP空间@ SpiMemory可以用于不需要高速程序执行的应用。客户可以把程序代码单独放入SpiMemory,在其它数据类型和XIP(就地执行)直接在外部内存空间执行

修改过scf文件,但是修改后程序启动不了,现在处于迷茫状态。有没有大神指点一下,或者提供一些资料/方向?感激不尽!谢谢。
mwang 发表于 2016-1-4 16:15 | 显示全部楼层
是类似的报错么:
linking...
.\obj\RTOSDemo.axf: error: L6050U: The code size of this image (56340 bytes) exceeds the maximum allowed for this version of the linker.
Finished: 0 information, 0 warning, 0 error and 1 fatal error messages.

是的话,是由于未**的KEIL不允许编译超过32K的bin文件
不是的话,贴一下报错信息吧
 楼主| tianxialongfei 发表于 2016-1-4 16:19 | 显示全部楼层
.\obj\ROM\Smpl_DrvGPIO.axf: Error: L6220E: Execution region RAM size (38224 bytes) exceeds limit (32768 bytes). Region contains 29 bytes of padding and 112 bytes of veneers (total 141 bytes of linker generated content).
orangebanana 发表于 2016-1-4 20:12 | 显示全部楼层
是不是你的软件没有**呢
 楼主| tianxialongfei 发表于 2016-1-4 21:15 | 显示全部楼层
不是的,上面报的是执行域(RAM)的长度只有32K,但是我的CODE已经超了...原来我是直接换大RAM的MCU,但是501没有更大RAM的型号了,所以现在就不知道怎么解决了,而且目前也没有IO口来外挂RAM这些!
 楼主| tianxialongfei 发表于 2016-1-4 21:18 | 显示全部楼层
我尝试过修改.scf的执行域的大小但是修改后不能启动,有没有对这个比较清楚的呢?请指点一下,万分感谢
mwang 发表于 2016-1-5 11:24 | 显示全部楼层
NUC501这颗ARM7太老了,我帮不上什么忙
为什么会选这颗料?用的人真不多。
lovecat2015 发表于 2016-1-5 20:30 | 显示全部楼层
是不是可以选择microlib啊?
mintspring 发表于 2016-1-5 20:40 | 显示全部楼层
代码空间不足,需要优化程序结构才行。
dongnanxibei 发表于 2016-1-5 22:40 | 显示全部楼层
我知道你这个问题,是没有回**完成,就算你真的放不下,编译时候是不会出错的。编译失败是因为软件禁止你编译生成大文件,也就是说,你的是试用版本的,去下载个注册机吧。去二姨家的论坛搜搜看。
zhuotuzi 发表于 2016-1-5 22:58 | 显示全部楼层
下载个注册机激活一下再试试看,激活后可以用到2020年的。
 楼主| tianxialongfei 发表于 2016-1-6 08:58 | 显示全部楼层
@mwang  因为要用到低成本带音频解码的MCU,所以就选了这颗

修改了这个
SPI_ROM 0x40000000
{
        ROM 0x40000000
        {
                AppInit.o(app_init, +First)
                anon$$obj.o
                Interrupt.o
                SPIM.o
                __*.o
    }
        RAM 0x0 0x8000
        {
        AppInit.o(_vectors, +First)
                * (+RO)
                * (+RW, +ZI)
        }
}
可以编译
linking...
Program Size: Code=35662 RO-data=130 RW-data=332 ZI-data=3084  
After Build - User command #1: fromelf --bin ".\obj\ROM\Smpl_DrvGPIO.axf" --output ".\obj\ROM\Smpl_DrvGPIO.bin"
".\obj\ROM\Smpl_DrvGPIO.axf" - 0 Error(s), 0 Warning(s).
*** Completed Cross-Module-Optimization after 2 iteration(s).

但是程序跑不起来;也仿真不了,就不知道挂在哪了!
求有调试过这个东西的兄弟指点一下! 谢谢
mwang 发表于 2016-1-6 09:47 | 显示全部楼层
tianxialongfei 发表于 2016-1-6 08:58
@mwang  因为要用到低成本带音频解码的MCU,所以就选了这颗;

修改了这个

大概思路就是,把少部分函数放在ram里跑、性能要求不高的函数扔在spi flash里跑
 楼主| tianxialongfei 发表于 2016-1-6 16:35 | 显示全部楼层
那应该怎么做呢? 怎么让程序在SPI那里跑?   我对加载这一块不是很熟悉
芙蓉洞 发表于 2016-1-10 16:18 | 显示全部楼层
可以用microlib吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

25

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部