在选择微控制器的闪存大小时需要帮助


9

我需要决定为项目选择Flash大小和RAM。我更喜欢使用的微控制器是TI MSP430系列。由于其低功耗和价值系列的成本。但是,我是决定需求收集的完全新手。我大部分的编程经验是在基于桌面的系统上进行的,在这些系统上,通常的程序大小,RAM和处理器速度对于常见的算法任务并不重要。

我有以下问题:

  1. 关于确定微控制器的RAM和闪存大小是否有任何准则或标准做法?
  2. 多少行代码(C)转换为MCU上多少闪存大小?
  3. 如果Flash大小必须保持最小,汇编语言是否是唯一的出路?

关于项目的微控制器的一般选择,该领域的专业人员如何确定最适合该任务的微控制器?他们搜索什么资源?他们遵循什么准则?

Answers:


7

您所有问题的答案都取决于您想做什么。

如您所说,您是新手,所以我建议您使用最大的微控制器并尝试完成该项目。之后,您可以可视化使用多少代码,然后根据使用的代码进行缩放。


同意 从大的东西开始,然后在必要时减小到可以满足最终要求的最小部分。
W5VO 2011年

“最大”必须符合“您要定位的系列”中的条件。找到所需的外围设备和所需的速度等级,选择架构/系​​列,然后使用该系列中最大的处理器进行开发。不要以512kB的Flash和64kB的RAM开头,因为它是您可以找到的最大的微控制器。在开始担心尺寸之前,将其范围缩小到Cortex-M3,AVR,PIC18和MSP430。我怀疑丹尼尔(Daniel)预料到了这一点,但只是认为需要在某处说明。
凯文·维米尔

7

就msp430而言,它是一个很好的体系结构,mspgcc,mspgcc4和llvm都是不错的工具。没有补丁的binutils。您可以在该价格下以低于$ 5的价格获得一个启动板,再购买一些(最终,您将砌成一些东西或将其短路并融化,以这个价格得到一个备用的,尤其是)...

下载工具,它们都是免费的,编写几行代码,学习如何链接它,看看二进制文件有多大,可以体会到嵌入的感觉,代码行数到rom大小,等等。

专业人士如何做到这一点。您几乎可以想象的所有方式:

一些公司的任务要求很高,除退出之外,您无能为力。您可能永远都不知道为什么选择了该平台。

有时承包商/最喜欢的客户指定平台,有时您可以教育/谈判,有时则没有。

有些人只是喜欢,害怕未知,随便什么。同样的原因,为什么有些人只购买一种品牌的汽车,导致我父亲和他父亲在那之前做过,那可能就是全部原因。

有些人专注于工具。在这里,您还是品牌忠实的伙伴,将他们限制在他们最喜欢的编译器公司及其支持的目标,或者最喜欢的开源工具及其支持的对象上。最喜欢的嵌入式操作系统,并且仅限于支持的目标。

在某些情况下,它与工具有关,但是以不同的方式,随着时间的流逝,您可能已经在与供应商的年度支持合同中投入了大量资金(例如,arm,xilinx或Motorola),并且可能是您喜欢他们的支持不想改变,或者您知道的恶魔比您没有的恶魔更好。或可能是因为公司中其他5个有效项目都在使用此产品,并且我们已经签订了支持合同,并且该合同将继续年复一年地支付,因此您必须选择其中一个供应商解决方案。

有时是关于保存千足虫的。该零件比该零件便宜1.5%,使其可与该零件一起使用,不必在乎NRE,而应考虑制造方面的节省量。

有时是关于负面的。一个供应商可能以一种或另一种方式使您的公司陷入困境。未能达到标明的零件供应量,会导致产品延迟或取消。诱饵和开关诈骗(软件的50,000美元费用不包括解锁许可证所需的1200美元的加密狗费用,这是额外的费用。哦,这是浮动许可证的每位用户)。一旦签署了NDA以查看程序员参考手册或参考设计指南,您就会发现他们的工程技术有多么可怕,并且您可以选择将其所有产品终身列入黑名单。过去的历史和可怕的技术支持。多种原因可能导致您永远不允许他们的销售人员进入前门,或者使您无法再次浏览他们的网站。

有时,它与性能,接口等有关。举例来说,您有一个有线连接的接口,需要上拉,微控制器品牌XYZ,每个零件3美元,有一组可以使用的I / O引脚。不需要其他外部硬件,品牌ABC的零件价格为3美元,需要一个外部晶体管和电阻器以使其最低工作。您以msp430为例,例如,它是关于功耗的,A部分可能只要求用户使用一块AAA电池并运行数月,B部分可能需要两节AAA电池并运行数周。

最罕见的情况是实际进行工程设计,调查所有供应商,进行功耗数学计算,产品每单位价格数学计算,我们需要多少rom以及以什么频率运行芯片,不断地胶合逻辑。通常,某人(老板/客户/高级工程师)会利用自己多年的经验,从臀部射击(通常使用上述一项或多项)来选择路径(通常是一条节省大量时间和金钱的好路径),工程只需完成一次即可对所选平台进行微调。

我个人的建议是保持灵活性。大多数微控制器品牌/家庭以某种形式或方式都可以在评估板上花费不到50美元。Sparkfun,olimex或直接从供应商(对于msp430或stellaris等为ti)。尝试每种方法中的一种或多种,​​以了解共同点和不同点,工具,装载机,松开砖块的难度等。至少您可以从中得到两件事,一是当您被迫沿着一条道路前进时无论是从高位还是从客户那里,您都可以扎根实践,其次是,当轮到您选择平台时,您会更好地了解那里是什么,而不是什么,并且可以根据问题选择合适的(已加载的单词)平台,被解决。

即使您不愿意或不愿意在硬件上花那么多钱,大多数工具还是可以下载(免费)的,在诸如微芯片的情况下,您现在可以使用C编译器(以前是高科技的),但是必须订阅(放弃您的电子邮件地址)。gcc喜欢它还是讨厌它将会在您的未来,台式机或嵌入式系统中使用,请动手学习如何将其用作交叉编译器。也尝试llvm,它将持续一段时间,并且会给gcc带来一些严重的竞争。无论如何,要编写或找到一些仿真器,mame有很多,gdb有一些,等等。我在github上编写了一个称为thumbulator的代码,仅ARM Thumb模式,类似于cortex-m3,但我不支持thumb2(仍然可以学到很多东西)并且只有在切换到硬件之前,程序才能同时在两者上运行)。我启动了一个msp430仿真器,但是有点停滞了。指令集是如此之小,以致于大部分工作是一个晚上或一个星期六的项目。对于PIC来说也是如此,一个漫长的下午,并且您有一个指令集模拟器,可以用来练习嵌入式程序。如果没有别的,您可以编写程序进行编译和链接,以了解如何执行此操作以及程序最终有多大,如何调整程序以产生更紧密的代码等。

就C vs汇编程序而言,有些指令集是C友好的,而有些则不是。有些编译器中等,有些确实很差,只有很少一部分非常好(通常一次或每年要花费数千美元)。与任何地方的性能一样,如果您想真正提高性能,则可能需要混合使用高级语言(仅说C)和汇编器。因此,该技能不是用汇编器编写整个应用程序,而是确定什么代码导致您不符合时序/性能,然后知道如何通过C,编译器选项,选择正确的编译器或编写汇编器来解决该问题。

我建议您了解所有选择使用的平台的汇编程序,如果没有其他嵌入式方面的可读性知识,我建议您经常进行汇编(同时确定性能问题出在哪里)。无论如何,许多平台都需要或需要一些汇编器来启动代码。

如果您想节省10-20%的单价,并且想要购买便宜/慢速的微控制器或振荡器,或者购买32Kb闪存部分而不是64KB闪存部分,并且可以用销售量支付开发成本,并且也许还有很多其他事情,您很可能会选择以汇编程序编写整个事情,这些都是快速,低功耗,低成本,满意的客户。

根据到目前为止的背景,也许您不必担心编写所有汇编器,也不必担心嵌入式微控制器的电气工程,阅读原理图,知道什么是集电极开路,三态,推挽,pwm,adc,dac和a。其他术语的长列表以及如何使用它们。一点点地敲打i2c,spi,mdio,达拉斯单线等。使用示波器作为软件调试器。即使示波器今天可以为您突出显示某些东西(一个额外的费用),您也应该能够关注i2c和spi以及其他一些没有突出显示的协议。

我还建议对于您使用的每个平台,不要使用别人的沙箱(例如Arduino ide /编程环境)。将引导处理器从复位状态进入到您的main()程序中,编写尽可能多的内容,以了解如何对Flash进行加载/编程,甚至可能需要编写自己的加载器,即使在机架式加载器中也是如此。那里。这完全关乎个人教育,您知道的越多,可以掏出自己的腰包,就越能掌控自己的职业生涯,而薪水数字末尾的零就越多。

无论您做什么,都不要尝试将x86作为您在桌面上的第一个汇编程序学习,选择几乎所有其他内容,然后交叉编译和仿真ARM,THUMB,MSP430,PIC,AVR,甚至是6502、8051。x86是一个可怕的指令集合,结果以多种方式变形和成形,微码化,而不是微码化,多核。使x86保持高级语言和庞大的操作系统。将其用于您的文本编辑器和编译器,并定位其他目标。

抱歉,答案很长...希望对您有所帮助。


嗯,如果问题是专业人士如何选择闪光灯的大小。有时编写一些类似于解决方案的代码,进行编译并查看其大小。如果要使用rtos,请取样并调整大小,然后为您要添加的代码添加一个模糊系数。其中很大一部分与估计的个人经验有关。通常,您可能会选择估算然后将其加倍,以防万一,您的老板可能会将您的估算加倍,这样他/她就不会遇到麻烦等等。这会有所帮助,因为一旦实施,您就可以切换到较小的部分,并成为节省开支的英雄。
old_timer 2011年

1
尽管篇幅
太长,

3

确定项目的闪存/ RAM需求的最佳方法是构建原型并进行测量。

在PC上实施核心算法,并计算目标代码的大小和RAM使用率。这将为您提供帮助。

如果您依赖于诸如stdio或内存管理之类的操作系统功能,请别忘了增加预算。

没有直接的方法可以将代码行与已编译的代码大小进行比较。但是,您可以根据代码密度比较处理器体系结构。


3

我认为,对内存有什么“感觉”的最好方法是在内存方面获取一些样本,对其进行编程并查看正在使用多少内存。实际上,这将取决于所使用的编译器。如果您是第一次对MCU进行编程,请不要过多地关注规格。只需选择一个具有大量内存,大量外围设备等的设备即可。这样,您可以从一个MCU中学到很多东西。当您使用该MCU进行第一个项目时,您将拥有更好的内存概念,需要进行更多的项目。

最适合任务的MCU?您需要多少个ADC通道?那DAC呢?在您的应用程序中,更重要的是性能还是低功耗?选择特定的MCU时您必须回答这类问题吗?


3

选择具有所需外围设备集的微控制器。可能会有一系列具有相同/相似外设,但RAM和闪存数量不同的微控制器。从具有最大RAM /闪存的芯片开始。一旦有了可以使用的原型,如果您的程序适合的话,您可以选择便宜的微型产品。


0

真正的专业人员不会孤立地选择微控制器,他们会运行项目以获取最大的利润。根据可能导致选择微控制器的项目标准,这似乎过于昂贵,但恰好与可用的专业知识,工具,库等相匹配。不要做出孤立的决定,要牢记全局,尤其是总和(开发成本+生产成本)!

大多数微控制器制造商提供一系列芯片,闪存大小是各个芯片之间不同的参数之一。“安全”的选择是首先选择具有最大闪存大小的芯片,因此如果应用程序适合较小的芯片,则可以缩小规模。但是应用程序趋于增长以适应所有可用大小(甚至更多)。

IME闪存的大小不再是一个很大的成本因素,即使引脚数也不再是一个因素,RAM大小似乎是最大的成本驱动因素。

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.