嵌入式编程...从零开始

14

我想从零开始学习嵌入式系统编程。经过一段时间的搜索,我发现自己有些困惑。

我可以编写C和C ++程序,但是我不知道从哪里开始进行嵌入式编程。我应该购买某种设备进行练习,使用微处理器模拟器(如果是这样,应该使用哪种?)等等,任何关于开始学习的建议或资源都非常欢迎。


1
你可能想要缩小你的目标范围。一个“嵌入式系统”可以从运行Linux的32位1GHz ARM CPU,1GB RAM,32GB存储器的范围内运行;到一个8位微控制器,带有1KB RAM,根本不运行任何操作系统。尝试更具体地想象你想要创建什么样的东西,然后从那里开始。 - Robᵩ
@DeadMG:从上下文来看很清楚,他的意思是他两种语言都会编程。为了你,我让它更加明确了。 - Clifford
1
请限定问题的范围:您对哪种应用程序感兴趣?您的预算是多少?在嵌入式系统的广泛领域中,除非您缩小范围,否则无法为您提供指导。 - Clifford
我想学习嵌入式的基础知识。因此,我愿意购买一个便宜的板子或设备进行实验 - 用于教育/业余爱好目的。而且@DeadMG,是的,我指的是C和C ++。 - nuno
我有一些带有示例代码(汇编和C)的模拟器,网址为http://www.github.com/dwelch67。特别是thumbulator和amber_samples。此外还有许多低于50美元的开发板示例。stm32f4 discovery约20美元,理论上是一个微控制器,但超越了这个范畴,尤其是评估板的价格。 - old_timer
7个回答

9
在我看来,不要选择Arduino。我一直认为它是为非程序员设计的简化系统。起初,选择一些可以让您运用C语言知识尽可能降低到底层的东西。您想要了解中断向量如何工作、有限的RAM如何限制堆栈以及如何进行调试。
检查Freescale的8位和16位微控制器,特别是HCS08或HCS12。有一些100-200美元和一些低于100美元的开发系统,内置调试接口(背景调试模式)。这些产品性能和存储器也比Arduino更高。CodeWarrior软件免费(有代码大小限制,但在大多数情况下,限制数比这些设备上的flash容量还要高),而且功能完整。我不知道您是否可以使用Arduino设置代码调试断点,但您可以使用这些产品。 CodeWarrior还有另一个好处 - 首先,您需要深入数据手册以了解各种模块的内存映射寄存器如何操作(例如,应该如何清除标志,如何设置模式等),CodeWarrior带有Processor Expert,它将为您生成特定于HCSxx系列衍生物及其特定模块的函数。由于这些产品之间重新使用逻辑并存在一些小差异,因此重用代码是有意义的。 Processor Expert自其10多年前开始以来已经发展了很长的路程。从长远来看,这极大地节省了开发时间,因为这些函数负责编写非常低级别的操作(例如,使用一个C函数调用配置PWM定时器输出引脚以获得xx/yy占空比)。
然后您可以使用一些可在这些产品上运行的操作系统,或者您可以升级到ARM或ePPC。我知道至少有一款搭载Linux和Web服务器的HCS12演示板,您可以在您准备好之前将其抹掉作为您的第一次开发,然后再放回去。Freescale还提供教程、应用说明和文档,除了他们的网站有时很难导航。我想这只是一个庞大生态系统的症状。祝您好运!

1
在我看来,Arduino(设备)是一个相当不错的廉价uC开发平台。只是不要使用Arduino库。 - Akhil P Oommen
有效的观点,然而此回答中推荐的MCU已不再受支持。Freescale在2015年与NXP半导体合并。现在他们都是NXP的一部分。希望能得到最新型号的推荐。 - nullspace

4
有几个嵌入式平台非常受业余爱好者欢迎,而且非常易于使用。其中最流行的可能是Arduino开发板。这些板块价格便宜($20-30)且易于使用,同时有大量优秀的软件资源。Arduino平台的主要网站是http://arduino.cc。您可以在那里找到许多链接,了解其他资源,帮助您入门。
您可能想查看SparkFun,它主要是电子零部件(包括Arduino和其他有用的开发板)和工具的业余级供应商。他们的网站上有很多优秀内容,可帮助您入门硬件和软件。

3

3

嵌入式系统可以分为两类:

  • 那些运行完整操作系统的。如果有已记录的方法获取和启动操作系统,则这些和桌面电脑没有太大区别,除了你需要构建或下载交叉编译器。当然,对于像手机之类的设备,环境赞助商会提供详细的开发环境和调试器。

  • 在称为“裸机”的程序上运行的。它们只加载你的程序和语言运行时。(其中一些非常简单,只运行一个简单的解释器或汇编语言。这有一个优点,不需要复杂的编程来设置集成外设。)

您可能不需要仿真器或其他硬件调试设置,事实上,您甚至可能不需要硬件即可开始开发。如可能,尝试在虚拟机中进行初始开发。

总之,你会得到你所付出的。商业项目提供了许多环境,但这些环境显然不适用于机器人项目等。

有许多平台可提供合理的支持。最新的热潮(由于其惊人的35美元价格)是树莓派,但目前无法立即获取。


2
您有很多选择!我猜您会从模拟器开始(不论您将使用何种嵌入式操作系统,可能您不会使用x86 CPU)。如果您将使用X86 CPU,则不需要任何模拟器,但您可能需要虚拟机。
您在问题中标记了“arm”,因此我猜您想使用ARM处理器(然后您将需要一个模拟器)。从这里开始查找,您将找到嵌入式编程的教程和资源。

ping。您可能可以在为什么ARM芯片有一个名为JavaScript的指令(FJCVTZS)?上找回您的答案。奇怪的最后一段关于ARM设计会议的问题已被删除,因此您的答案现在适合该问题。 - Peter Cordes
@PeterCordes 是的,但已经有另一个答案了,恢复我的答案不会增加太多价值。 - Adriano Repetti
我喜欢你的估算 JS 操作所需成本大约为 ~10 条指令,即使没有它也不是必须的,但我还是很喜欢。 - Peter Cordes

2
我建议尝试使用TI的EZ430系列开发工具。其中一些工具的价格低至20美元,具有基本功能以及扩展功能。您可以轻松购买两个eZ430-F2013,并使它们相互通信或与其他计算机通信。
TI提供了适用于其MSP430的Code Composer Studio,该软件是免费且功能齐全(基于Eclipse),因此编程环境非常用户友好。TI还提供了大量代码示例,涵盖了系统的大部分功能。
使用MSP430,您将编写“裸金属”代码,因此您不仅要编写C代码,还要切换输出和位操作。但是看起来您对学习这种级别的编程很感兴趣,所以这是一个很好的起点。
另一方面,如果您想要嵌入式操作系统(例如Linux),请查看gumstix网站。

2
由于您的问题没有提供有关应用程序类型、性能要求和预算等方面的信息,因此答案可能不是特别明确。然而,鉴于这一点,我建议您选择ARM架构设备,原因很简单,因为这涵盖了从几美元到性能为10余MIPS的小型片上存储器设备,以及价值数百美元、能够运行Linux、WinCE或Android等操作系统的应用处理器板。
无论您喜欢与否,在嵌入式系统领域中,ARM技术已经无处不在;除此之外,其他所有设计和市场份额都是小众。基于Cortex-M3的设备在简单的开发/评估板上是一个很好的起点。但是,如果您没有考虑工具和调试硬件的成本,您可能会感到沮丧。

有没有一些软件工具可以使用,以便我可以尝试一下编程?例如,使用微处理器仿真器的一些教程?或者您建议立即开始使用物理芯片? - nuno
1
尝试让问题提出者缩小问题范围值得加分。我建议问题提出者花些时间考虑嵌入式设备必须要做什么。如果必须要做所有事情,那将是更昂贵的板子之一。如果只是遥测设备或诸如冰箱温度监测之类的简单设备,那可以使用更便宜的板子。 - ldav1s
我同意我的问题范围可能非常通用 - 对此我感到抱歉。我只是想获取一些关于如何开始编写一些简单有趣程序的提示。因此,我想我会从一些简单/便宜的板子或者甚至模拟器开始。 - nuno
您可以下载Keil的uVision ARM-MDK评估版本。它包括一个模拟器,您可以在调试器中运行代码,但是由于没有I/O,它不会特别有趣,而是旨在测试代码并检查执行性能而无需硬件。编程嵌入式系统的唯一“特殊”之处就是直接访问硬件。C代码就是C代码(或C ++),因此模拟器可能不会教您太多您已经知道的东西。 - Clifford
考虑使用这些板子之一,并订购“入门套件”,而不是独立的板子,因为该套件包括一个JTAG调试器板,可以在uVision IDE中对板子进行编程和调试运行的代码(步进、断点、监视点等)。 - Clifford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接