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

电器工程 闪光 毫秒 内存
2022-01-17 21:41:14

我需要决定为项目选择闪存大小和 RAM。我比较喜欢用的微控制器是TI MSP430系列。由于其低功耗和超值线系列成本。但是,对于决定收集需求,我是一个完全的新手。我的大部分编程经验都是在基于桌面的系统上进行的,通常程序大小、RAM 和处理器速度对于常见的算法任务来说并不是什么大问题。

我有以下问题:

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

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

4个回答

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

正如你所说,你是一个新手,所以我建议你使用最大的微控制器,然后尝试做这个项目。在此之后,您可以可视化您使用了多少代码,然后根据使用的内容对其进行缩放。

就 msp430 而言,它是一个很好的架构,非常好的工具 mspgcc 和 mspgcc4 和 llvm 就这点而言。binutils 无需打补丁。您可以以低于 5 美元的价格购买一些启动板(最终您会将某些东西变砖或将其短路并熔化,有一个备用的,尤其是这个价格)...

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

专业人士是如何做到的。几乎所有你能想象的方式:

一些公司的任务是从高处降下来的,除了退出之外,你无能为力。而且您可能永远不知道为什么选择该平台。

有时承包商/最喜欢的客户决定平台,有时你可以教育/谈判,有时不能。

有些人只是有一个最喜欢的,对未知的恐惧,无论如何。同样的原因有些人只买一个品牌的汽车,因为我爸爸和他爸爸在那之前做过,这可能就是全部原因。

有些人专注于工具。这里又是品牌忠实的人,他们将自己限制在他们最喜欢的编译器公司和他们支持的任何目标,或者最喜欢的开源工具和支持的东西上。最喜欢的嵌入式操作系统和支持的对象限制。

在某些情况下,它与工具有关,但以不同的方式,随着时间的推移,您可能已经在与供应商(例如 arm 或 xilinx 或摩托罗拉)签订的年度支持合同中投入了大量资金,并且您可能喜欢他们的支持不想改变,或者你认识的魔鬼比你不认识的魔鬼更好。或者可能是因为公司中的其他 5 个活动项目都使用了这个东西,而且我们已经有了一份支持合同,并且将年复一年地继续支付那一年的费用,你必须选择其中一个供应商的解决方案。

有时是为了节省几分钱。这部分比那部分便宜 1.5%,让它与这部分一起工作,不要关心 NRE,想想在体积上的制造节省。

有时它是关于负面的。一位供应商可能以一种或另一种方式搞砸了您的公司。未能满足广告的零件供应导致您的产品延迟或取消。诱饵和开关骗局(50,000 美元的软件费用不包括解锁许可证所需的加密狗 1200 美元的费用,这是一项额外费用。哦,这是浮动许可证的每位用户)。一旦您签署 NDA 以查看程序员参考手册或参考设计指南,您就会发现他们的工程技术有多可怕,您可能会选择将他们所有的产品终身列入黑名单。过去的历史与可怕的技术支持。任何数量的原因都可能导致您永远不允许他们的销售人员进入前门,或者让您不再查看他们的网站。

有时它与性能、接口等有关。例如,您有一个有线或需要上拉的接口,单片机品牌 XYZ 3 美元,有一组 I/O 引脚可供使用不需要其他外部硬件,品牌 ABC 有一个 3 美元的部件,需要一个外部晶体管和电阻器才能使其工作在最低限度。您的 msp430 示例,说它是关于功耗的,A 部分可能只需要用户使用一节 AAA 电池并运行数月,B 部分可能需要两节 AAA 电池并运行数周。

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

我个人的建议是灵活。大多数形式或时尚的微控制器品牌/系列都可以在评估板上以低于 50 美元的价格购买。Sparkfun、olimex 或直接从供应商处购买(ti 代表 msp430 或 Stellaris 等)。尝试一个或多个,感受一下共同点和不同点,工具,加载程序,拆砖的难度等等。你至少可以从中得到两件事,一是当你被迫走上一条路时从高层或客户开始,您可以开始运行,其次是当轮到您选择平台时,您会更好地了解那里的内容和不存在的内容,并且可以根据问题选择正确的(加载的词)平台得到解决。

即使你不出去或不能出去在硬件上花那么多钱,大多数都有可以下载的工具(免费),在微芯片等情况下,你现在可以获得 C 编译器(曾经是高科技)但是必须订阅(放弃您的电子邮件地址)。gcc 喜欢或讨厌它会在你的未来,桌面或嵌入式,弄脏你的手并学习将它用作交叉编译器。也试试 llvm,它会存在一段时间并给 gcc 一些激烈的竞争。反正写或者找一些模拟器,mame有很多,gdb有一些,等等。我在github写了一个叫thumbulator,只有ARM thumb模式,类似于cortex-m3,除了我不支持thumb2(仍然可以学到很多并在仅切换到硬件之前在两者上运行程序)。我启动了一个 msp430 仿真器,但有点停滞不前。指令集是如此之小,以至于大部分工作都是一个晚上或周六的项目。PIC 也是如此,一个漫长的下午,你有一个指令集模拟器来练习嵌入式。如果不出意外,您可以编写程序编译和链接,以了解如何执行此操作以及程序最终有多大,如何调整程序以生成更紧凑的代码等。

就 C 与汇编程序而言,一些指令集对 C 友好,而另一些则不是。有些编译器是中等的,有些非常糟糕,只有少数是非常好的(通常使用一次或每年花费几千美元)。与任何地方的性能一样,如果你想真正推动它,可能需要高级语言(比如说 C)和汇编程序的混合。因此,技能不是用汇编程序编写整个应用程序,而是确定哪些代码导致您无法满足时序/性能,然后知道如何通过 C、编译器选项、选择正确的编译器或编写汇编程序来解决这个问题。

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

如果您想在每单位价格上节省 10-20%,并想购买更便宜/更慢的微控制器或振荡器,或者 32Kb 闪存部分而不是 64KB 闪存部分,并且可以通过销售量来支付开发成本,并且也许一长串其他东西,你可能会选择用汇编程序编写整个东西,速度快,功耗低,成本低,客户满意。

根据你目前的背景,也许你不应该担心在所有汇编程序中编写,也许你不应该担心嵌入微控制器的电气工程方面,阅读原理图,知道什么是集电极开路、三态、推挽、pwm、adc、dac 和一长串其他术语以及如何使用它们。bit banging i2c、spi、mdio、dallas one wire 等。使用示波器作为软件调试器。即使示波器今天可以为您突出显示某些内容(额外费用项目),您应该能够关注 i2c 和 spi 以及其他一些没有突出显示的协议。

我还建议对于您使用的每个平台,都不要使用其他人的沙箱(例如 Arduino ide/编程环境)。将处理器从复位状态写入您的 main() 程序的引导代码,尽可能多地了解如何加载/编程闪存到可能涉及编写您自己的加载程序的程度,即使货架上的加载程序是那里。这完全是关于个人教育的,你知道的越多,越能从你的口袋里掏出来,使用你对你的职业生涯的更多控制,你的薪水数字末尾的零就越多。

无论你做什么,都不要,尝试学习 x86 作为你在桌面上的第一个汇编程序,选择几乎任何其他东西并交叉编译和模拟,ARM、THUMB、MSP430、PIC、AVR,甚至 6502、8051。x86 是一个可怕的指令集并因此以多种方式变形和成形,微编码,非微编码,多核,等等。将 x86 保留为高级语言和庞大的操作系统。将它用于您的文本编辑器和编译器,并针对其他目标。

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

我认为获得“感觉”您的要求的最佳方法,在这种情况下,就内存而言,是获取一些 MCU 样本,对其进行编程并查看正在使用多少内存。事实上,这取决于所使用的编译器。如果这是您第一次对 MCU 进行编程,请不要过多考虑规格。只需选择一个具有大量内存、大量外围设备等的产品。这样您就可以从一个 MCU 中学到很多东西。当您使用该 MCU 制作第一个项目时,您将对后续项目所需的内存有更好的概念。

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

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

在 PC 上实现核心算法并计算目标代码的大小和 RAM 使用量。这将为您提供一个可以使用的大致数字。

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

没有直接的方法可以将代码行与编译代码大小进行比较。但是,您可以在代码密度方面比较处理器架构。