Memory 如何从外部内存运行ARM代码?

Memory 如何从外部内存运行ARM代码?,memory,embedded,arm,Memory,Embedded,Arm,我正在使用LPC2132 ARM芯片开发一个程序。然而,我的程序已经超过了芯片上的空间 我如何将我的芯片连接到某种外部存储器芯片上以保存额外的可执行代码?这可能吗?如果没有,当芯片空间用完时,人们通常会做什么?您必须开发某种热插拔模块代码,并为外部模块连接某种内存芯片。查看此处提供的该部分数据表: 它似乎没有内存映射外部闪存或sdram的接口,也没有MMU 它确实有SPI端口,可用于连接SD卡、EEPROM或串行闪存进行片外存储,但这些端口不是内存映射的,您必须在out中处理移动的代码段,考虑

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


我如何将我的芯片连接到某种外部存储器芯片上以保存额外的可执行代码?这可能吗?如果没有,当芯片空间用完时,人们通常会做什么?

您必须开发某种热插拔模块代码,并为外部模块连接某种内存芯片。

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

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

它确实有SPI端口,可用于连接SD卡、EEPROM或串行闪存进行片外存储,但这些端口不是内存映射的,您必须在out中处理移动的代码段,考虑到该芯片上的ram非常有限,这将很困难

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

如果不是,人们通常做什么 当芯片空间用完时

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

编辑:

看起来也有一些几乎与pin兼容的部件具有更多的资源。LPC2138有512kB的闪存和32kB的ram(与您的64/16相比)。在这两种尺寸之间还有两种尺寸


快速看一眼引脚输出,唯一的区别似乎是板上的第二个ADC与其他一些引脚多路复用。显然,仔细研究一下这一点,但看起来您可以在不修改电路板其余部分的情况下更换到更高端的部件。

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

马克的答案是好的。一个问题——你是缺少内存还是闪存,或者两者都缺?解决方案/答案可能取决于

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

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

  • [+RAM,-ROM]制作任何可能的常量
  • [+ROM]尽可能使用拇指(参见马克的评论)
  • [+ROM]尽可能使用查找表
  • [+ROM]重新考虑和组合常用功能(特别是将大量使用的函数(如宏)转换为子例程)
  • [+ROM]任何从一个位置调用的函数-将其直接放入行中,而不是函数中
  • [+ROM,+RAM]将所有浮点用法更改为定点
  • [+ROM,+RAM]消除未使用的变量+常量(使用lint和链接器映射查找/消除/验证)
  • [+ROM]尝试用/if/else替换开关,反之亦然
  • [+ROM]确保您的链接器配置为消除“死”(未使用)代码
  • [+ROM]重新处理字符串+常量,以便只在一个地方定义相同的“事物”
  • [+ROM](喘息,叹息)用宏替换数据隐藏函数(或者如果可以的话使用内联)——注意抢占、竞争条件、互斥等
  • [+ROM,+RAM]-消除所有调试/temp代码-通常有I/O引脚切换/打印/etc…它们不是有条件编译出来的
还有很多,但我必须赶去参加一个会议。我所记得的是,这是一个过程,一次数十和数百字节,最终产生了相当大的节省。我最终从闪存和RAM中恢复了大约20%,这足以完成项目。我花了大约2周的时间来清理这些东西,但是节约成本是值得的

我将尝试回来并发布更多的策略,但我现在不能。作为记录,我曾经遇到过这样的情况:我必须在运行时根据需要从串行闪存加载/交换RAM中的代码(算法、表等)这太糟糕了。首先,尽可能地收紧你当前的代码。这也是一个有点智力的练习,它迫使你了解你的编译器到底在做什么

最后一点:在整个项目中编写好的紧凑的代码,但在必要的时候以及在商业案例证明合理的时候,在最后进行这种优化。

如果不是,人们通常做什么 当芯片空间用完时

他们要做的第一件事是优化他们的应用程序。我不是说运行编译器优化程序(尽管这可能是解决方案的一部分),但应用Dan建议的技术。看看您的数据结构和算法的空间效率,通常在空间和执行速度之间存在权衡,但您可能不需要