首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从外部存储器运行ARM代码?

如何从外部存储器运行ARM代码?
EN

Stack Overflow用户
提问于 2010-04-13 02:08:16
回答 6查看 4.6K关注 0票数 8

我正在使用一个LPC2132 ARM芯片来开发一个程序。然而,我的程序已经比芯片上的空间大了。

如何将我的芯片连接到某种类型的外部存储芯片,以容纳额外的可执行代码?这个是可能的吗?如果没有,当芯片空间耗尽时,人们通常会做什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-13 06:11:40

马克的回答很好。一个问题--您是否正在耗尽RAM、闪存,或者两者都耗尽?解决方案/答案可能取决于...

几年前,我发现自己遇到了类似的情况( LPC2148上的空间(闪存和内存)耗尽)。在引脚兼容部件中,这是最大的闪存和最大的RAM。所以这是一个不幸的情况,“用你所拥有的来凑合”。正如Mark所说,选择了错误的芯片(实际上,需求和功能的增长超出了芯片最初的预期……我相信其他人都没有经历过这种情况;-)

无论如何,我发现自己陷入了一场“字节之战”。以下是我记得做过的事情(请注意,我从客户那里继承了很多代码...)

在可能的情况下,

  • +RAM,使用使用Thumb的任何常量(参见be
  • +ROM‘s comments)
  • +ROM use -up possible
  • +ROM -ROM-factor& common functionality (特别是.将频繁使用的函数-如宏-转换为任何从一个地方调用的函数-将其直接放入行内,而不是放在function
  • +ROM,+RAM中。将所有浮点用法更改为fixed-point
  • +ROM,+RAM消除不使用的变量+常量(使用lint & linker map to find/eliminate/verify)
  • +ROM尝试将开关替换为//,和vice-versa
  • +ROM确保您的链接器被配置为消除“死的”(未使用的) code
  • +ROM返工字符串+常量,以便相同的“东西”仅在一个place
  • +ROM中定义(倒吸一口气,叹息)将数据隐藏函数替换为宏(如果可以,也可以使用内联) --注意抢占、竞争条件、互斥、etc...
  • +ROM,+内存-消除所有调试/临时代码-通常有I/O引脚切换/打印/等等...不是在

中有条件编译出来的

天啊,还有一大堆呢,不过我得赶去开会。我所记得的是,这是一个进程,一次几十个或几百个字节,最终产生了一些相当大的节省。我最终从闪存和RAM中恢复了大约20%,这足以完成这个项目。我可能花了大约两周的时间来清理这些东西,但节省的成本是值得的。

我会试着回来并发布更多的战术,我现在就是不能。根据记录,我曾经遇到过这样的情况:我必须在运行时根据需要(算法、表等)从串行闪存加载/交换RAM中的代码。这太可怕了。首先,尽可能地压缩你当前的代码。这在某种程度上也是一种智力练习,它迫使您深入了解&了解您的编译器到底在做什么。

最后一点:在整个项目中编写良好的紧凑代码,但在必要和业务案例证明其合理性的情况下,在时执行这种优化。

票数 10
EN

Stack Overflow用户

发布于 2010-04-13 02:24:47

查看此处提供的该部件的数据表:

http://www.keil.com/dd/docs/datashts/philips/lpc2131_32_34_36_38.pdf

它似乎没有用于内存映射、外部闪存或sdram的接口,也没有MMU。

它确实有SPI端口,可以用来连接SD卡、EEPROM或串行闪存进行片外存储,但这些端口不是内存映射,您必须处理输出中的移动代码段,因为该芯片上的ram非常有限,这将是困难的。

将数据移动到外部存储中并只将代码存储在片上ROM中可能是“足够的”,这将简化您的挑战,但代价是增加访问数据的延迟。您还可以考虑使用thumb指令集,它以一些速度为代价来减少代码大小,并使编译器针对代码密度而不是速度进行优化。

如果没有,当芯片空间耗尽时,人们通常会做什么?

不幸的是,这里的答案是您为您的应用程序选择了错误的芯片,并且/或者需要重新考虑您的应用程序是如何架构的,以使其适合此芯片。

编辑:

它看起来也有一些几乎与引脚兼容的部分,具有更多的资源。LPC2138有512kB的闪存和32kB的ram (与您的64/16相比)。在两者之间也有几种尺寸可供选择。

快速看一下引脚输出看起来唯一的区别是板上的第二个ADC与其他一些引脚复用。显然,充分了解这一点,但看起来你可以只换出更高端的部分,而不需要修改电路板的其余部分。

票数 8
EN

Stack Overflow用户

发布于 2010-04-13 02:25:48

如果你必须连接外部存储器(这意味着需要更换硬件),为什么不使用内存更大的芯片呢?事实上,一些芯片将完全引脚兼容,并具有更多的闪存,因此您可以避免重新设计(仅替换芯片)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2624248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档