代码大小不会耗尽内存,但代码运行异常

5个职位/0个新职位
最后一篇文章
夏季20100514
离线
最后一次见到:4年1个月前
上师
已加入:2014-12-30 05:01
代码大小不会耗尽内存,但代码运行异常

你好,我最近在做项目DA14580\u BEACON\u 3.40.6,我发现了一些奇怪的事情。我自己添加了一些代码,比如外部中断引脚、加密处理程序等等。当CFG\u SPI\u FLASH未定义时,代码运行良好,所有结果都是我期望得到的结果。但是当我定义CFG\u SPI\u FLASH时,代码运行异常,我看不到其中的逻辑,而且代码编译成功。
所以,我的问题是,代码大小是否真的超出了散乱文件中定义的限制?

当#define CFG_SPI_FLASH时编译结果
程序大小:Code=25428 RO data=1384 RW data=108 ZI data=7388

当#undef CFG_SPI_FLASH时编译结果
程序大小:代码=22552 RO数据=1300 RW数据=108 ZI数据=7300

夏季20100514
离线
最后一次见到:4年1个月前
上师
已加入:2014-12-30 05:01
我真的需要帮助,所以

我真的需要一些帮助,所以如果有任何建议,请表示您的好意。

布莱恩
离线
最后一次见到:5年11个月前
专家 硕士
已加入:2014-10-16 18:10
当我的

当我的代码太大时,我会出现编译错误。如果实际代码太多,我会得到一系列错误,如我的帖子所示:
http://support.dialog.com/getting-not-enough-room-error-32。。。
如果我的数据数组太大,我会得到另一组错误。这些错误更为明显,这意味着我们已经耗尽了8K(0x2000)的保留RAM和额外的0x1000字节的“普通”RAM。由于您没有得到构建错误(实际上它们是在链接时发生的),这表明还存在其他问题。

我知道我已经使它看起来像DA14580有更多的内存比它通过改变分散文件只是这样的链接将完成,我会得到一个地图。当链接器由于内存限制而失败时,您将无法获得映射,因此无法看到事物的布局。另一方面,代码大小限制案例中的最后一个错误
\out\full\U刺绣_系统内存.axf:错误:L6407E:聚合大小为0x300字节的节无法放入任何选择器。
表示我缺少0x300字节,需要将代码缩减这么多。减少数组大小在这里没有帮助。

我还注意到了其他一些奇怪的行为,在我的例子中,可能还有我在这个论坛上读到的其他一些行为,通常会导致硬故障或整个系统死亡,就像堆栈溢出一样。查看是否有一个数据数组正好位于为map文件中的某些系统堆分配的空间前面。我有几个案例,在这种情况下,我看到问题出现(通常是硬故障)。因为一个人无法控制放置,所以我唯一能做的就是玩代码,希望链接器能以不同的方式布局项目。在一种情况下,将数组从104字节更改为100字节会导致链接器将数组从非保留内存堆中移出。然后一切都很顺利。104时,系统出现硬故障。对数组的唯一调用是memset(array,0,BUF\u SIZE)。地图上写着布夫的大小是正确的。注意,这都是经验;我没有解释,也没有收到任何来自对话的反馈。

夏季20100514
离线
最后一次见到:4年1个月前
上师
已加入:2014-12-30 05:01
首先,谢谢你的支持

首先,谢谢你详细的解释,你是个好人。其次,我发现原因是periph_init();没有像3.40.2项目那样定期调用,因此,我的外部pin中断不能像以前那样正常配置。是的,不是内存限制,而是3.40.6和3.40.2版本之间发生的一些更改导致了我的问题。希望这能对你有所帮助。

夏季20100514
离线
最后一次见到:4年1个月前
上师
已加入:2014-12-30 05:01
最后,我找到了真正的答案

最后,我找出了periph_init();没有像3.40.2项目中那样定期调用的真正原因。这是因为SPI闪存禁用睡眠模式5秒,但我评论了关机定时器,所以整个系统将不再进入睡眠模式!