代码大小没有内存不足,但代码奇怪地运行

5个帖子/ 0新
最后一篇
SUMMER20100514.
离线
最后一次露面:4年8月前
格鲁鲁
加入:2014-12-30 05:01
代码大小没有内存不足,但代码奇怪地运行

嗨,我最近正在研究项目da14580_beacon_3.40.6,我发现了一些奇怪的事情。我自己添加了一些代码,例如外部中断引脚,加密处理程序等。当CFG_SPI_FLASH未定义时,代码运行良好,所有结果都是我期望的。但是,当我定义cfg_spi_flash时,代码奇怪地运行,我无法看到它中的逻辑,以及更好的,代码成功编译。
所以,我的问题是,代码大小无限制的问题是在分散文件中定义的吗?

#define cfg_spi_flash编译结果
程序尺寸:码= 25428 RO-DATA = 1384 RW-DATA = 108 ZI-DATA = 7388

#undef cfg_spi_flash编译结果
程序尺寸:代码= 22552 RO-DATA = 1300 RW-DATA = 108 ZI-DATA = 7300

SUMMER20100514.
离线
最后一次露面:4年8月前
格鲁鲁
加入:2014-12-30 05:01
我真的需要一些帮助,所以

我真的需要一些帮助,所以如果有任何建议,请展示你的善意。

布莱恩
离线
最后一次露面:6年5个月前
专家 掌握
加入:2014-10-16 18:10
我的时候得到编译错误

当我的代码太大时,我会得到编译错误。如果实际代码太多,我将获得一系列出现的错误,如我帖子所示:
http://support.dialog-semicondiondiond.com/getting-not-enough-Room-Error-32 ...
如果我的数据阵列太大,我会得到另一组错误。这些错误更为明显,这意味着一个人已经用尽了似乎是8k(0x2000)的保留RAM,并且在其顶部的“普通”RAM的附加0x1000字节的额外0x1000字节。由于您没有构建错误(实际上它们在链接时发生),它表明还有其他事情。

我知道我已经让它看起来像da14580更多的内存,它通过改变分散文件只是这样的,所以链接将完成,我会得到一张地图。当链接器因内存限制而失败时,您没有地图,所以您看不出会如何布局。另一方面,代码大小限制案例上的最后一次错误
\ out \ full_emb_sysram.axf:错误:l6407e:聚合大小0x300字节的部分无法拟合.ANY选择器。
表示我是0x300字节短,并且需要通过这么多缩小我的代码。减少数组大小在此处无济于事。

我还注意到了一些其他奇怪的行为,在我的情况下,也许我在这个论坛上阅读了其他一些人通常会导致硬盘或全系统死亡,如堆栈溢出。看看您的一个数据阵列是否位于为地图文件中为某些系统堆分配的空间前面。我有几个案例在我看到的情况下出现问题,就是这种情况(通常是Hardfault)。由于一个人无法控制放置,所以我唯一可以做的是与代码一起玩,并希望链接器将不同地布局不同。在一个案例中,将数组从104更改为100个字节导致链接器将阵列从非固定存储器堆移动到远离不保留存储器堆。然后一切都像魅力一样工作。在104时,系统硬断层。阵列上唯一的呼叫是Memset(数组,0,buf_size)。该地图表示Buf_size是正确的。注意,这都是通过经验; I have no explanation and have not received any feedback yet from Dialog.

SUMMER20100514.
离线
最后一次露面:4年8月前
格鲁鲁
加入:2014-12-30 05:01
首先,谢谢你的

首先,感谢您的详细解释,您是一个好人。其次,我发现原因是periph_init();由于它在3.40.2项目中,因此不呼叫,因此,我的外部引脚中断不能正常配置。是的,它不是内存限制,但在3.40.6和3.40.2版本之间发生的一些变化导致我的问题。希望能帮助您到某种程度。

SUMMER20100514.
离线
最后一次露面:4年8月前
格鲁鲁
加入:2014-12-30 05:01
最后,我发现了真实的

最后,我发现Periph_init()的真正原因;没有定期称为3.40.2项目。这是因为SPI Flash禁用5S的睡眠模式,但我评论了Poweroff定时器,因此整个系统不再睡眠模式了!