打印
[技术问答]

NUC501代码长度问题怎么解决?

[复制链接]
2300|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 | 只看该作者
是不是你的软件没有**呢

使用特权

评论回复
5
tianxialongfei|  楼主 | 2016-1-4 21:15 | 只看该作者
不是的,上面报的是执行域(RAM)的长度只有32K,但是我的CODE已经超了...原来我是直接换大RAM的MCU,但是501没有更大RAM的型号了,所以现在就不知道怎么解决了,而且目前也没有IO口来外挂RAM这些!

使用特权

评论回复
6
tianxialongfei|  楼主 | 2016-1-4 21:18 | 只看该作者
我尝试过修改.scf的执行域的大小但是修改后不能启动,有没有对这个比较清楚的呢?请指点一下,万分感谢

使用特权

评论回复
7
mwang| | 2016-1-5 11:24 | 只看该作者
NUC501这颗ARM7太老了,我帮不上什么忙
为什么会选这颗料?用的人真不多。

使用特权

评论回复
8
lovecat2015| | 2016-1-5 20:30 | 只看该作者
是不是可以选择microlib啊?

使用特权

评论回复
9
mintspring| | 2016-1-5 20:40 | 只看该作者
代码空间不足,需要优化程序结构才行。

使用特权

评论回复
10
dongnanxibei| | 2016-1-5 22:40 | 只看该作者
我知道你这个问题,是没有回**完成,就算你真的放不下,编译时候是不会出错的。编译失败是因为软件禁止你编译生成大文件,也就是说,你的是试用版本的,去下载个注册机吧。去二姨家的论坛搜搜看。

使用特权

评论回复
11
zhuotuzi| | 2016-1-5 22:58 | 只看该作者
下载个注册机激活一下再试试看,激活后可以用到2020年的。

使用特权

评论回复
12
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).

但是程序跑不起来;也仿真不了,就不知道挂在哪了!
求有调试过这个东西的兄弟指点一下! 谢谢

使用特权

评论回复
13
mwang| | 2016-1-6 09:47 | 只看该作者
tianxialongfei 发表于 2016-1-6 08:58
@mwang  因为要用到低成本带音频解码的MCU,所以就选了这颗;

修改了这个

大概思路就是,把少部分函数放在ram里跑、性能要求不高的函数扔在spi flash里跑

使用特权

评论回复
14
tianxialongfei|  楼主 | 2016-1-6 16:35 | 只看该作者
那应该怎么做呢? 怎么让程序在SPI那里跑?   我对加载这一块不是很熟悉

使用特权

评论回复
15
芙蓉洞| | 2016-1-10 16:18 | 只看该作者
可以用microlib吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

23

帖子

0

粉丝