37

我有几年做桌面和网络编程的经验。我想继续做一些嵌入式系统编程。问了最初的问题后,我想知道我应该从哪个硬件/软件 IDE 开始......

还是……没关系?

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

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

我的目标是了解“IO 端口如何工作、内存限制/要求,包括可能的分页、中断服务程序”。 是学习一个我稍后会使用的更好,还是应该将高级概念延续到大多数微控制器?

谢谢!

更新:这个开发工具包如何开始?评论?建议?

4

14 回答 14

19

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

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

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

此外,如果您对实时操作系统 (RTOS) 开发感兴趣,请查看FreeRTOS 。它是开源的,包含一个很好的介绍 RTOS 是什么以及他们是如何实现的。事实上,他们的演练示例甚至针对 AVR。


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

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

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


其他链接:


低成本 Cortex-M3 板:


新的 Arduino 使用 ARM Cortex-M3 而不是 AVR 微控制器。

于 2010-01-26T03:25:31.950 回答
5

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

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

于 2010-01-26T02:44:24.033 回答
4

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

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

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

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

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

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

于 2010-01-26T22:45:49.000 回答
2

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

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

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

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

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

于 2010-01-28T14:39:19.467 回答
2

德州仪器 (TI) 以非常低的价格发布了一个非常有趣的开发套件:eZ430-Chronos 开发工具包含一个 MSP430,带有显示屏和运动手表中的各种传感器,包括一个 USB 调试编程器和一个 USB 无线电接入点,售价 50 美元

还有一个包含大量信息的wiki。

我已经为 eZ430-Chronos 套件创建了一个 stackexchange 提案

于 2010-07-14T11:54:40.137 回答
2

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

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

于 2019-07-08T10:57:37.147 回答
1

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

某处有更好的 IC 和电路板;我对嵌入式微控制器领域不太熟悉,但我对使用另一个软件工具链的糟糕 IDE 没有太多耐心,我必须弄清楚如何解决所有错误。

于 2010-01-26T04:48:31.957 回答
1

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

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

  1. 架构相当简单
  2. 提供良好的开发工具包,附带教程
  3. 资源丰富的粉丝论坛

其他带有开发套件的微控制器也可能不错——例如MSP430——尽管它们可能没有这样的粉丝论坛。使用开发工具包是一个很好的方法,因为它们旨在快速启动和运行微型计算机,并促进有效的学习。他们可能有面向快速入门的教程

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

我不喜欢 PIC,至少 PIC16,因为它们的架构。它对 C 语言不是很友好。记忆库是痛苦的。

于 2010-01-27T00:18:24.973 回答
1

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

我已经开始使用其中之一(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 控制器功能强大得多,但使用和学习要简单得多。

于 2010-02-04T11:30:05.127 回答
1

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

于 2010-02-15T20:29:48.983 回答
1

我只用过其中一种。

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

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

于 2010-03-19T14:45:25.080 回答
0

您可能会考虑使用RoBoard。现在,就微控制器而言,这块板可能不是您想要的,但它确实具有能够运行 Windows 或 DOS 的优势,因此您可以使用 Microsoft .NET 甚至 C/C++ 开发工具来摆弄周围有伺服器或传感器之类的东西,甚至,搞什么,建造一个机器人!它实际上有点有趣。

还有配备 ATmega640 处理器的Axon II

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

对不起,机器人技术的重点,只是我感兴趣的东西,并认为它也可以帮助你。

于 2010-01-26T03:51:22.203 回答
0

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

  • IO 端口如何工作
  • 内存限制/要求
  • 中断服务程序

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

于 2010-02-12T12:22:42.307 回答
0

BBC 微型位

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

这个便宜的小板(约 20 磅)被 ARM 控股公司用作教育设备,并向英国学生免费赠送了 100 万台。

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

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

于 2019-01-06T10:15:59.783 回答