您如何确定微控制器需要多少闪存/ RAM?


24

假设您正在启动具有某些已知功能的嵌入式项目。选择微控制器时,如何选择所需的RAM

您是否使用开发板并先对项目进行编码,然后查看已使用了多少内存,然后选择适合该内存的合适微控制器?

您是否只是选择功能强大的微控制器作为原型,然后在拥有可用的产品后缩小规模?

您是否只是选择一种您肯定会够用的东西,如果空间不足,只是升级到更高的内存密度,否则,您只需保留现有的微控制器?

什么被认为是好的做法?


在我看来,从信息理论的角度来看,应该有可能根据任务说明将RAM需求估计在一个数量级(二维推理方式)之内。嗯...
Lyndon White

如果使用库,则可以研究它们的内存占用量。使用您自己的代码,您必须具有经验。将新项目与旧项目进行比较,并确定您希望它更大或更小。
jwsc

Answers:


20

就个人项目而言,我倾向于使用家族中功能最强大的微控制器,并具有适当的占地面积。然后,我开发PCB,编写一些代码并产生一个原型。

这样做的好处是,我非常了解少数微控制器,因此我可以快速制作原型,而无需阅读整个数据表。我也有他们的分线板和代码模板。

如果能够正常工作,而且我的收益不菲,那么我会购买最便宜的微控制器,该微控制器具有正确的外围设备和足够的内存,可以存储我以前编写的代码。如果内部寄存器发生变化(在PIC上发生),或者任何一个微控制器都具有额外的外设而需要禁用这些外设才能使代码正常工作,这可能会很烦人。

但是,出于生产目的,这将使您从每个单元中节省大量钱。


对于我的个人项目,我倾向于使用类似的方法。我也一样,这种方法也潜入办公室。它没有错,它可以工作,但是有更好的方法等。感谢输入!
efox29 2014年

在“真实”环境中肯定会有更好的方法,让我们等待其他答案!
大卫

绝对地。在一个大型沙箱中进行开发,然后缩减。您节省的时间将超过您在每个微控制器上开发所花费的额外4美元。这不仅适用于业余爱好,而且实际上更重要。图12中的人在等着换一个更大的控制器,而不是一个!
Scott Seidman 2014年

13

当然,对于单个自制原型,从所有兼容的微型显微镜中功能最强大的显微镜开始,然后逐步缩小,可能是一个不错的建议。

但是,如果您想赢得报价,则必须先告诉客户一个价格,然后才能花钱实施任何事情。

因此,好的做法是开始编程之前写下某种规格。你知道什么,你想做的事,你应该写下来怎么你要做到这一点。

这种“方法”还包括考虑软件设计,回答以下问题:

  • 您需要操作系统吗?哪一个?需要什么资源?
  • 您想要一个分层的体系结构吗?这需要接口,这可能会消耗RAM
  • 哪些库已经可用并且对您有用/有用,以及它们需要多少内存(好的库文档至少根据一个参考构建来回答这一问题)?
  • 您必须为自己的驱动程序和应用程序实现什么结构和变量?

对所有这些值求和可以得出一个粗略的估计。您可以信赖的程度取决于您的分析的详细程度,还取决于您的经验:-)
增加至少30..50%的估计利润率肯定是个好主意。

产品完成后,您将使用约80..90%的RAM,您可以确定选择正确-至少在RAM方面。


2
回复:“正在使用80..90%RAM”。标准做法是确保您仅在CPU和内存中最多使用50%的利用率,以适应将来的升级和错误修复。
Dunk 2014年

1
@Dunk:取决于业务。在汽车领域,通常接受SOP的所有资源(CPU,RAM,闪存)的80%。例如,在廉价的消费电子产品中,甚至可能更多:在只有2-3年使用寿命的系统中进行升级的可能性有多大?
麦克风2014年

@Dunk:我可能是错的,但是听起来您已经习惯了具有动态内存以及随之而来的所有不确定因素的桌面风格软件。绝大多数嵌入式应用程序都是静态分配所有内容的。保证没有内存泄漏。然后,您可以精确地使用100%,并且只要不进行修改就永远可以罚款。当然,仅当您的工作RAM与堆栈分开时,或者您确切知道该堆栈在任何时候的行为方式时,这才起作用。留出一些空间是个好主意,但是对于我所做的事情,10-20%就足够了。
AaronD 2014年

嵌入式软件中最大的问题是流氓指针,缓冲区溢出,被零除之类的事情。某些MCU可以在硬件中引发异常,类似于中断,但是我所使用的一切都将愉快地进行下去,就好像什么都没有发生。会有某种结果,但这可能不是您所期望的,因此您必须进行检查。有些事情,例如算术上溢/下溢,很容易检查和立即解决;直到流氓工作了多年的函数决定崩溃之前,其他事物(例如流氓指针)可能会完全被忽略。
AaronD 2014年

3
您想要达到80%还是50%的目标取决于您的客户。有了固定的规格并且仅需要修复错误,80%即可。规格不可靠,预期的特征蠕变以及足够大的余量,可能会导致您支付更多的余量。我们曾经最终购买了所需数量两倍的微控制器,然后选择了能够超频以提供我们所需性能的微控制器,这比重新设计功能更强大的芯片的PCB便宜得多。
Mark Booth 2014年

3

如果只有可能,可以先对嵌入式系统进行编码,然后再构建硬件。这将使每个人的生活更加轻松。不幸的是,这也意味着您的截止日期已经过去了。通常,必须在完成软件之前就设计好硬件,因为硬件零件的交货时间通常很长。

因此,嵌入式软件开发人员通常将需要估计其程序的内存和CPU需求。您的第一步应该是尝试说服硬件专家为您提供功能最强大的微控制器/ CPU,并提供尽可能多的RAM。这很少起作用,因为它们有自己的需求目标,但是偶尔您会很幸运。

如果这不起作用,那么您接下来要做的是高级软件设计,并将模块分解为功能。然后,您需要估算系统中每个模块的每个功能的代码行。然后,您可以使用公式将代码行转换为代码存储的估算值。您还将调查任何异常的内存需求(例如大型数组),并添加一些估计值以适应这一需求。然后在总数的基础上增加一些百分比,以弥补您错过的任何事情。然后加倍以满足典型的50%利用率要求。

是的,这需要时间。是的,有必要跳过所有的麻烦,因为在构建硬件之后,更改硬件确实非常困难。


我们在哪里可以找到将代码行转换为代码存储器的公式?
EasyOhm 2014年

那取决于您使用哪种语言和编译器。如果使用汇编程序,则一行大约等于一个内存字(无论芯片的字长是多少)。如果您使用C,则可能每行大约3-5个单词;如果您使用C ++或更复杂的东西,则可能还会更多。最好的办法是编译一些用该语言编写的程序,并将代码行与代码存储器进行比较以获得平均值。
达卡龙2014年

2

通常,微控制器供应商在其设备中放置了一系列适合典型应用的存储器。因此,如果在小型设备中只需要几个I / O引脚和一个SPI,那么您将不可能找到带有500 KB闪存和64 KB RAM的产品。对于更接近SoC封装的大型设备,即使最小的设备也几乎可以确定是足够大的,除非您打算进行一些严肃的数字运算,例如图像处理。

在专业环境中,选择合适的微控制器的关键是使用历史数据。您将记录已开发的其他项目,并知道实现每个功能所需的内存和其他芯片资源。您将知道该产品将要做什么,因此具有良好的功能列表,并且可以快速而准确地计算出微控制器将需要提供的资源。试图从前期设计规范中猜测资源需求(在项目开始时,在系统信息最少的情况下开发),在最佳时机是不可靠的,只有经验丰富的工程师才能建立起来,在自己的头脑中保存历史数据的数据库,使用这种方法将有任何成功。

许多公司在软件和电子设计上都采用了“敏捷”方法,其中涉及构建小型功能板(例如RS-485板,ADC板等)以及托管微控制器的通用平台板的“库”。 ,类似于使用开发套件和插件的方式。然后,可以通过选择并连接功能所需的一组电路板,快速(数小时内)对产品进行原型设计。该软件类似地由库模块组装而成,可以快速移植和测试。一旦知道了代码中特定于硬件的部分的大小,通常通常就需要选择包含该部分的最小部分。上面提到的例外,其中设备的功能涉及大数据或非常复杂的算法。这种方法可以提供准确,

(敏捷方法的另一个优点是它允许软件和电子开发并行进行,电子设计是集成功能板集并同时执行相关的EMC和其他困难工作的一种练习。应用程序软件正在原型组装件上开发。仍然需要一些移植和集成,但是要在可用的软件和电子产品都可用时完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.