【问题标题】:Does it matter which microcontroller to use for 1st time embed system programmer?第一次使用嵌入式系统程序员使用哪个微控制器重要吗?
【发布时间】:2011-01-09 09:04:48
【问题描述】:

我在桌面和网络编程方面有几年的经验。我想继续做一些嵌入式系统编程。问了initial question之后,不知该从哪个硬件/软件IDE入手...

或者……没关系?

哪个开发平台最容易学习和编程(考虑 IDE 可用性)?

如果出现问题,哪个最容易调试?

我的目标是了解"how IO ports work, memory limitations/requirements incl. possibly paging, interrupt service routines." 是学习一个我以后会使用的更好,还是应该将高级概念应用于大多数微控制器?

谢谢!

更新:首先this dev kit 怎么样?评论?建议?

【问题讨论】:

  • 建议“嵌入”而不是编程——这个网站上几乎所有的问题都是关于编程的
  • Arduino 不是微控制器,它是带有 Atmel AVR 微控制器的开发板品牌。 Atmel 不是微控制器,它是一家产品包括多种微控制器架构的公司,包括 AVR、AVR32 和 ARM。同样,飞思卡尔是一家拥有多种不同架构的公司,包括 ARM、PowerPC 和 ColdFire。所以你的两个建议没有指定架构,一个是重复的。
  • @Clifford,谢谢,我刚刚修改了我的 Q。Arduino 本身并不是一个微控制器,但据我了解,它有一些抽象,使得对 mcu 进行编程比直接使用 Atmel AVR mcu 更容易?由于..引导加载程序?
  • @Henry 我看不出 EKI-LM3S3748 有什么问题。它使用 FTDI 驱动程序通过 USB 模拟 JTAG。因此,您不必购买程序员。 109 美元对你所得到的东西来说似乎是一个合理的价格。另外,请务必阅读“Cortex-M3 低成本工具选择指南”(请参阅​​我的答案以获取链接)。
  • 非常感谢法官,您的亚马逊愿望清单在哪里? :)

标签: embedded microcontroller arduino codewarrior avr-studio4


【解决方案1】:

鉴于您已经有编程经验,您可能需要考虑获得一个 Arduino 并清除固件以使用 AVR Studio + WinAVR 做自己的事情。 Arduino 为您了解它的电子方面提供了一个很好的起点。取出 Arduino 引导加载程序可以让您更好地访问 Atmel 的内部结构。

为了实现您设定的目标,我还建议您通过 x86 编程更深入地探索台式计算机。例如,您可以构建一个 x86 操作系统内核。

【讨论】:

  • 清除固件 = de-Arduino?酷,从来没想过。您首先在 x86 中学习这些概念的建议是因为.. 开发周期更短且更易于调试?请给我更多关于如何学习 C 内核编程以及我以后如何将这些知识应用于微控制器编程的详细信息。我认为它们是完全不同的主题......谢谢。
  • 主要是因为 x86 的文档非常完善。也更容易看到你在做什么。再加上你已经有了一个。许多与微控制器相关的概念性内容也适用于台式计算机上的低级内容。你可以在这里阅读一些细节:osdever.net/bkerndev/index.php?the_id=90,这里有一个食谱风格的教程:jamesmolloy.co.uk/tutorial_html/index.html
  • 感谢您的建议,但我想我应该直接使用 C 语言对 mcu 进行编程。您会推荐哪种 AVR 开发套件?想尝试 AVR Studio / WinAVR 控制一些 LED / 控制、扬声器、电机或任何有趣的东西。谢谢。
  • 如果您了解一些基本的电子产品,甚至不需要 AVR 开发套件,那么在面包板上进行设置非常容易。然后找个程序员就够了。
【解决方案2】:

就个人而言,我推荐基于ARM Cortex-M3 的微控制器。更高功率的ARM 内核非常受欢迎,这些低功耗版本很可能在仍然充斥着专有 8/16 位内核的空间中起飞。这是有关该主题的最新文章:The ARM Cortex-M3 and the convergence of the MCU market

Arduino 非常受爱好者欢迎。 Atmel 的外设库在处理器类型中相当普遍。因此,它将平滑从 AVRARM 的后续转换。

我并不是说 ARM 比 AVR 或任何其他内核更好。为商业产品选择 MCU 通常取决于外围设备和价格,其次是现有代码库和开发工具。此外,微控制器通常比台式电脑简单得多。所以,掌握了窍门后,从一个到另一个移动真的没有那么难。

另外,如果您对实时操作系统 (RTOS) 开发感兴趣,请关注 FreeRTOS。它是开源的,包含一个很好的介绍 RTOS 是什么以及他们是如何实现的。事实上,他们的walk-through example 甚至针对 AVR。


嵌入式系统的开发工具可能非常昂贵。但是,对于 ARM 和 AVR 等更开放的内核,通常有开源替代方案。例如,查看WinARMWinAVR 项目。

这些工具链基于 GCC,因此在非 Windows 平台上也可用(并且更易于使用恕我直言)。如果您熟悉使用 GCC,那么您就会知道从 EMACSvi(我最喜欢的)到 Eclipse,有大量的“IDE”可以满足您的口味。

商业产品可以让您在设置时省去很多麻烦。但是,选择哪一种在很大程度上取决于您的目标硬件和预算。此外,一些硬件支持直接 USB 调试,而另一些可能需要昂贵的JTAG 适配器。


其他链接:


低成本 Cortex-M3 板:


New Arduino to utilize an ARM Cortex-M3 instead of an AVR microcontroller.

【讨论】:

  • 感谢您提供的链接,这确实很有趣,但我担心基于 ARM 的微控制器的成本。 beagleboard.org 似乎是个好主意,但是所有基于 ARM 的微控制器/处理器是否都与相同的代码 ARM 代码兼容?谢谢。
  • beagle 板使用 ARM Cortex-A8,它与 ARM Cortex-M3完全不同。 A8 的频率为 500+ MHz,具有 MMU、FPU,beagle 板具有几百兆的 RAM 和用于 GB 闪存的 SD 卡插槽,旨在运行类似 linux 的操作系统。 M3 的频率仅为 72MHz,具有数十 kB 的 RAM 和 100 kB 的闪存,是一个“真正的”嵌入式系统,您需要了解其性能限制。
  • @Henry 如果您坚持使用可移植的 C 代码并且不计算供应商特定的外围设备,那么基于 ARM 的代码是兼容的。但是,ARM 汇编语言有 3 种变体。有原始的 32 位版本和通常可选的 16 位“Thumb”变体。 Cortex-M0/3 只有新的 Thumb2,就执行速度与代码大小而言,它应该在中间满足。
  • 是否有适用于 ARM Cortex-M3 的开发套件? ARM Cortex-M3 与类似性能的 Atmel 芯片相比要多少钱?谢谢。
  • @dopplefish 我在 STM32 和 SAM3U 目标上使用 FreeRTOS 的体验非常好,但我习惯于在没有操作系统的情况下运行。建议将 Linux 用于 AVR 或 Cortex-M3 并不是很实用。
【解决方案3】:

您可能会considerRoBoard。现在,就微控制器而言,该板可能不是您正在寻找的,但它确实具有能够运行 Windows 或 DOS 的优势,因此您可以使用 Microsoft .NET 甚至 C/C++ 开发工具来摆弄诸如伺服器或传感器之类的东西,甚至,搞什么,构建一个机器人!其实挺好玩的。

还有Axon II,它有ATmega640 处理器。

无论哪种方式,这两个板都应该可以帮助您实现目标。

抱歉,我只关注机器人技术,只是我感兴趣并认为它也可能对您有所帮助。

【讨论】:

  • RoBoard 只是一台小型单板计算机。他不会探索嵌入式系统开发本身。
  • @Trent - 这就是为什么我说这可能不是他想要的,但是,就像我说他仍然能够控制伺服系统、传感器等......另外他可以运行 Windows XP 嵌入式...
【解决方案4】:

无论您做什么,请确保您获得了良好的开发环境。我不喜欢 Microchip 的开发工具,尽管我喜欢他们的微控制器(我被 MPLAB + ICD 烧了太多次,太多麻烦和功能障碍)。 TI 的 2800 系列 DSP 非常好,并且有一个基于 Eclipse 的 C++ 开发环境,您只需不到 100 美元即可进入(获得基于“controlCARD”的实验套件之一,如用于28335 的套件)——调试器通讯联系真的很牢固; IDE 很好,虽然我偶尔会崩溃。

有些地方有更好的 IC 和电路板;我对嵌入式微控制器领域不太熟悉,但我对糟糕的 IDE 没有太多耐心,因为我必须弄清楚如何解决所有错误。

【讨论】:

  • 我会同意的。好的开发工具可以改变世界,并且可以说比选择微控制器更重要。
  • 是的,这就是为什么我用 IC 旁边的 IDE 来问这个问题... :)
  • PIC ICD 情况的旁注,如果您打算完全弄乱电路甚至让电子设备暴露在外,请拿起一个备用的 PIC 编程器,我已经烧了一堆,它们对高压/短路的保护很差。
【解决方案5】:

ARM 是使用最广泛的嵌入式架构,涵盖了来自多个供应商的大量设备和广泛的成本。也就是说,ARM7、9、11 和 Cortex 设备(尤其是 Cortex)之间存在显着差异。但是,如果您的目标是专业地进入嵌入式系统,那么 ARM 经验将为您提供很好的帮助。

8 位架构通常更易于使用,但通常在内存容量和核心速度方面非常有限。此外,由于它们易于使用,因此 8 位技能相对容易获得,因此对于潜在雇主而言,它的吸引力较小,因为它很容易在内部或经验不足(因此成本较低)的员工实现。

但是,如果这是一种爱好而不是职业,那么零件、电路板和工具的低成本以及易用性可能会使 8 位具有吸引力。我建议 AVR 仅仅是因为它受到免费的 avr-gcc 工具链的支持。另一个开源 C 编译器 SDCC 支持一些 8 位目标。我相信 Zilog 会免费提供他们的 Z8 编译器,但您可能需要为调试硬件付费(尽管这相对便宜)。许多商业工具供应商提供其工具的代码大小限制版本用于评估和非商业用途,但请注意,大多数调试器需要专业硬件,这可能很昂贵,尽管在某些情况下,如果您只需要基本功能和低速。

无论你做什么,看看www.embedded.com。如果你选择 ARM,我已经在商业项目上成功使用过 WinARM,虽然它不是为舒适而构建的! here 提供了一份很好的 ARM 资源列表。对于 AVR,请务必查看 www.avrfreaks.net

我只推荐 Microchip PIC 部件(至少是低端的)用于外围组合非常适合应用的高成本敏感项目;不适用于学习嵌入式系统。 PIC 与其说是架构,不如说是一个品牌,PIC12、16、18、24 和 PIC32 的各种范围彼此非常不同,因此学习一个并不一定能让你更好地使用另一个 - 通常你甚至需要购买新工具!也就是说,如果您想同时获得一些简单的 DSP 体验,基于 PIC24 架构的 dsPIC 可能是一个不错的选择。

在所有情况下都要检查编译器的可用性(尤其是在需要 C++ 支持的情况下)和成本以及调试器硬件要求,因为这些通常是您的开发套件中最昂贵的部分,而电路板和部件通常是最便宜的昂贵的部分。

【讨论】:

  • AVR 是否用于商业产品?还是它主要由业余爱好者使用?
  • ARM Cortex-M3 有什么好的 ide/工具链?我需要硬件调试器才能启动吗?他们在做什么?谢谢。
  • 没有一家芯片供应商只能为业余爱好者市场服务。 AVR 广泛用于商业产品。
  • AVR 和 PIC 在 8 位 uC 市场的市场占有率普遍处于领先地位,因此两者都在商业上广泛使用。早在 2008 年,Microchip 确实提出要收购 Atmel,尽管 atmel 说“不可能”。
  • 包括 AVR 在内的各种 8 位设备广泛用于商业产品,但这些设备往往是简单、低端或深度嵌入的设备,如玩具、加热控制器、家用电器等。所以你可能不知道它们,但它们可能构成了绝大多数应用程序。 Atmel 声称他们拥有“8 位闪存微控制器”市场的 30%。 Microchip 和 Atmel 曾多次声称自己是第一。但无论哪种方式,与低端 PIC 相比,AVR 都是更好的技术设计,其指令集更适合 C 代码生成。
【解决方案6】:

有些人推荐 ARM。我会推荐它,不是作为第一个学习平台,而是作为第二个平台。 ARM 作为一个学习嵌入式底层细节的平台有点复杂,因为它的启动代码和初始化要求比许多其他 micros 更复杂。但 ARM 是嵌入式市场的大玩家,非常值得学习。所以我推荐它作为第二个学习平台。

Atmel AVR 非常适合学习许多嵌入式基础知识,主要原因有 3 个:

  1. 架构相当简单
  2. development kits available, with tutorials
  3. Fan forum 资源丰富

其他带有development kits 的微博也可能不错——例如MSP430——尽管他们可能没有这样的粉丝论坛。使用开发工具包是一个很好的方法,因为它们旨在快速启动和运行微型计算机,并促进有效的学习。他们可能有tutorials oriented towards quickly getting started

好吧,我想开发工具包及其教程可能会掩盖诸如引导加载程序和启动代码之类的内容,以使您的代码尽快使 LED 闪烁。但这可能是一个很好的开始方式,您可以按照自己的步调探索从“开机”到“代码运行”的一系列事件。

我不喜欢 PIC,至少是 PIC16,due to their architecture。它对 C 语言不是很友好。而且记忆库很痛苦。

【讨论】:

  • 我不想使用 Arduino 编程语言。 Arduino Mega 与 AVR Studio 一起使用容易吗?另外,我如何学习如何控制电动机,或使用 DAC 和 Arduino Mega?功能更丰富的开发套件会更有益吗?谢谢
  • 当然,不需要使用Arduino软件。使用 AVR studio 编写代码,并使用编程软件直接上传到开发板。至于电机或 DAC,我相信会有适合的开发板。谷歌搜索应该会找到一些东西。
【解决方案7】:

这是一个很难回答的问题,因为您的理想答案很大程度上取决于您对学习的兴趣。

如果您的目标只是更深入地了解计算系统的内部工作原理,我几乎建议您放弃嵌入式路线并选择一本关于编写 linux 内核模块的书。写一些简单的东西,从 SMbus 上读取温度传感器或类似的东西。

如果您想进入高级(手机等)嵌入式应用程序开发,请下载 Android SDK,您可以在 eclipse 下用 java 编写代码,甚至还有一个不错的模拟器。

如果您想进入“真正的”微控制器领域并真正了解低级系统编程,我建议您从非常简单的架构开始,例如 AVR 或 PIC,而无需 MMU。

进入中间地带,例如带有 MMU 的 ARM 和某种操作系统(无论是 linux 还是其他操作系统)都会有点令人震惊,因为没有背景是系统编程和硬件接口,我认为过渡会如果你打算做很多事情而不是编写非常简单的应用程序、计算按钮按下或类似的事情,那就要非常粗暴。

【讨论】:

  • 附带问题,AVR 的复杂程度与 Freescale HC08/HC12 相似吗?谢谢。
  • ATmega328 (Arduino) 等 AVR 是一个 8 位 MCU,在设计/功能上与 HC08 相似,都类似于低端 PIC18 或 PIC16 部件。 HC12 是 16 位 MCU,与 PIC24、dsPIC 或 AVR XMEGA 最相似。我相信所有这些 MCU 都是 RISC 设计并使用哈佛架构。值得我第一次介绍 MCU 编程是在 68HC11 内核上学习汇编,这是 HC12 的前身。从那里我转向 PIC,后来转向更复杂的内核。
【解决方案8】:

这很重要,您需要从更简单的系统开始逐渐获得经验。请注意,更简单并不是指功能不那么强大,而是易于使用、易于设置等。在这种情况下,我会推荐以下内容(我对任何产品都没有既得利益,我只是发现它们是最好的):

我已经开始使用其中之一(MBED 开发板)。对我来说最大的卖点是我可以用 C 或 C++ 编写代码,直接连接到 USB 和一个流畅的在线开发环境(根本不需要本地工具安装!)。

http://mbed.org/

在打开盒子五分钟后,我有一个示例闪烁程序(嵌入式世界的“hello world”)运行以下内容:

#include "mbed.h"

DigitalOut myled(LED1);

int main()
{
    while(1)
    {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}

就是这样!以上是完整的程序!

它基于 ARM Cortex M3,速度快且内存充足,适用于嵌入式项目(100mhz、256k 闪存和 32k ram)。在线开发工具有一个非常好的库和大量示例,还有一个非常活跃的论坛。关于将设备连接到 MBED 等方面的大量帮助

尽管我在嵌入式系统(ARM 7/9、Renases M8/16/32、Coldfire、Zilog、PIC 等)方面拥有丰富的经验,但我仍然发现这是一个令人耳目一新的易于掌握的系统,同时具有强大的功能.

最初在基本面包板上玩过它后,我从这些家伙那里买了一块基板:http://www.embeddedartists.com/products/lpcxpresso/xpr_base.php?PHPSESSID=lj20urpsh9isa0c8ddcfmmn207。它有一堆 I/O 设备(包括一个微型 OLED 和一个 3 轴加速度计)。从同一个站点,我还购买了一块 LCPExpresso 处理器板,它比 MBED 便宜、功耗/内存更少,但非常适合小型工作(仍然使 PIC/Atmega 处理器产生问题)。基板同时支持 LCPExpresso 和 MBED。购买 LCPExpress 处理器板还给了我一个附加的 JTAG 调试器和一个离线开发环境(Code Red 的基于 GCC/Eclipse 的开发套件)。这比在线 MBED 开发环境复杂得多,但在您获得 MBED 经验之后是一个合乎逻辑的进步。

参考我最初的观点,MBED 控制器比 LPCExpresso 控制器功能更强大,但使用和学习要简单得多。

【讨论】:

    【解决方案9】:

    我使用 PIC,但如果我今天选择的话,我会考虑使用 Arduino。但从你的目标来看:

    • IO 端口的工作原理
    • 内存限制/要求
    • 中断服务例程

    我想知道你最好的选择是否只是破解 Linux 内核?

    【讨论】:

      【解决方案10】:

      我使用 microchips PIC,这是我开始的,我主要是因为邪恶天才书的 123 个微控制器项目而开始的。我在学校参加了微处理器课程以获得学位,并了解了一些关于中断、时间和事物的知识,这对我的微控制器有很大帮助。我想其他一些程序员等可能会更好/更容易,但是对于 PicKit1 36 美元,我太便宜了,不能再买一个……坦率地说,如果不使用它们,我不知道它们是否更容易/更好,我喜欢我的,我一有机会就推荐它,我花了很长时间才真正真正看到它,但我终于能够用 ICSP 对另一个芯片进行板外编程。我不知道其他程序员是怎么做的,但对我来说,这是最好的 5 线接口,而且你已经被编程了。不能用棍子打败它......

      【讨论】:

        【解决方案11】:

        我只用过其中一个。

        飞思卡尔是一款不错的芯片。多年来,我一直在为一些小项目使用 HC-something 芯片。唯一需要注意的是,我不会触摸嵌入 10 英尺杆的 CodeWarrier。你可以找到一些免费的 C 编译器和汇编器(我不记得我使用的最后一个的名称),它们可以很好地完成这项工作。 Codewarrior 庞大而令人困惑,无论我对芯片架构和 C 编程了解多少,似乎总是只会让事情变得更难。如果您过去在 Mac 上使用过 Codewarrior,并且认为 CW 非常简洁,那么,它根本不是那样的。 CW 嵌入式看起来有点相似,但它工作方式非常不同,而且不是很好。

        命令行编译器一般很好。能够花大价钱的专业人士获得昂贵的开发环境,我相信他们会让事情变得更好,但没有它仍然比 1990 年为台式 PC 编写汇编代码要好得多,而且不知何故我们设法做到了. :-)

        【讨论】:

        • 根据我的经验,专业人士希望他们可以抛弃带有垃圾编辑器和文件损坏的大笔 IDE,并获得一些真正的工具来与“命令行编译器”一起使用。 :)
        【解决方案12】:

        Texas Instruments 以非常低的价格发布了一个非常有趣的开发套件:eZ430-Chronos Development Tool 包含一个 MSP430,运动手表中带有显示器和各种传感器,包括一个 USB 调试编程器和一个 USB 无线电接入点 for 50$

        还有a wiki containing很多很多信息。

        我已经 created a stackexchange proposal 购买了 eZ430-Chronos 套件。

        【讨论】:

          【解决方案13】:

          BBC 微比特

          https://en.wikipedia.org/wiki/Micro_Bit

          这个便宜的小板子(~20 pounds) 被 ARM Holdings 作为教育设备装箱,并向英国学生免费赠送了 100 万台。

          它包含一个 ARM Cortex-M0,这是所有 ARM 内核中最小的。

          我推荐它作为第一个微控制器板,因为它具有广泛的可用性、低成本、简单性,并且它向您介绍了 ARM 架构,它有许多更高级的板也可用于更严重的应用程序。

          【讨论】:

            【解决方案14】:

            不,如果您想学习如何对嵌入式设备进行编程,这并不重要。但是你需要知道从哪里开始以及下一步去哪里的流程。因为那里有很多微控制器,你不知道选择哪一个。所以最好在开始之前有一个路线图。

            在我看来,您应该从 - 任何 AVR 板(atmega 328P- arduino 板或 AVR 板)开始 那么你应该去ARM微控制器 - 首先做ARM CORTEX TDMI 然后是 ARM cortex M3 板。因此,这将为您提供一个整体视图,之后您可以根据您正在从事的项目类型和您的要求选择任何板。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-10-07
              • 2012-07-03
              • 2010-10-30
              • 1970-01-01
              • 2020-05-18
              • 2010-10-27
              • 1970-01-01
              相关资源
              最近更新 更多