我正在使用LPC2132 ARM芯片来开发程序。但是,我的程序已经超出了芯片上的空间。

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

最佳答案

马克的答案很不错。一个问题-您是否缺少RAM或闪存,或两者都没有?解决方案/答案可能取决于...

几年前,我发现自己处于类似的情况(LPC2148的空间不足(闪存和RAM)不足。在引脚兼容的部件中,这是最大的闪存和最大的RAM。因此,不幸的是,“就像Mark所说的,选择了错误的芯片(实际上,要求和功能超出了芯片原本应做的工作……我敢肯定,没有其他人会经历过) ;-))

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

  • [+ RAM,-ROM] 使任何可以成为
  • 的常量
  • [+ ROM] 尽可能使用Thumb(请参阅Mark的评论)
  • [+ ROM] 在可能的情况下使用查找表
  • [+ ROM] 重构并组合通用功能(尤其是将频繁使用的类似于函数的宏转换为子例程)
  • [+ ROM] 是从一个地方调用的函数的任何内容-将其直接内联而不是放在函数
  • [+ ROM,+ RAM] 将所有浮点用法更改为定点
  • [+ ROM,+ RAM] 消除未使用的变量+常量(使用lint和链接器映射来查找/消除/验证)
  • [+ ROM] 尝试用w/if/else替换开关,反之亦然
  • [+ ROM] 确保已将链接器配置为消除“死”(未使用)代码
  • [+ ROM] 重做字符串+常量,以便仅在一个位置定义相同的“事物”
  • [+ ROM] (叹息,叹气)替换带有宏的数据隐藏功能(或如果可能的话,可以是内联的)–小心先占,竞争条件,互斥等...
  • [+ ROM,+ RAM] -消除所有调试/临时代码-通常有I/O引脚切换/打印/等...没有被有条件地编译出

  • 伙计还有很多,但我必须参加 session 。我只记得是一次进步,一次数十和数百个字节,最终节省了一些可观的费用。我最终从闪存和RAM中恢复了大约20%,这足以完成该项目。我大概花了2个星期来清理这些东西,但是节省成本是值得的。

    我将尝试返回并发布更多策略,但我现在不能。作为记录,我遇到过这样的情况,我必须在运行时根据需要(例如算法,表等)从串行闪存中将代码加载到RAM中和从其中加载代码,这太糟糕了。首先,尝试尽可能收紧当前代码。这也是一种智力上的练习,它迫使您深入了解并了解编译器的实际作用。

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

    关于memory - 如何从外部存储器运行ARM代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2624248/

    10-09 08:56