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