我有几年的桌面和网络编程经验。我想继续做一些嵌入式系统编程。在询问initial question之后,我想知道我应该从哪个硬件/软件IDE开始......
Arduino + Arduino IDE?
Atmel AVR + AVR Studio 4?
飞思卡尔HCS12或Coldfire + CodeWarrior?
Microchip PIC + MPLAB?
ARM Cortex-M3 + ARM RealView / WinARM
或者......没关系?
哪种开发平台最容易学习和编程(考虑到IDE的可用性)?
如果出现问题,哪一个最容易调试?
我的目标是了解"how IO ports work, memory limitations/requirements incl. possibly paging, interrupt service routines."学习以后会使用的是否更好,或者高级概念应该延续到大多数微控制器?
谢谢!
更新: this dev kit如何开始?评论?建议?
答案 0 :(得分:18)
就个人而言,我建议使用基于ARM Cortex-M3的微控制器。更高功率ARM内核非常受欢迎,这些低功耗版本可以在仍然充斥着专有8/16位内核的空间中起飞。以下是关于此主题的最新文章:The ARM Cortex-M3 and the convergence of the MCU market。
Arduino对于业余爱好者来说非常受欢迎。 Atmel的外围库在处理器类型中相当常见。因此,它可以平滑后来从AVR到ARM的过渡。
我并不是说ARM比AVR或任何其他核心更好。为商业产品选择MCU通常归结为外围设备和价格,其次是现有的代码库和开发工具。此外,微控制器通常比台式PC简单得多。因此,在你掌握它之后,将它从一个移动到另一个并不困难。
另外,如果您对实时操作系统(RTOS)开发感兴趣,请查看FreeRTOS。它是开源的,包含了一个很好的浏览RTOS是什么以及它们是如何实现的。事实上,他们的walk-through example甚至针对AVR。
嵌入式系统的开发工具可能非常昂贵。但是,对于ARM和AVR等更开放的内核,通常有开源替代方案。例如,请参阅WinARM和WinAVR项目。
这些工具链基于GCC,因此在非Windows平台上也可用(并且更容易使用IMHO)。如果您熟悉使用GCC,那么您就知道有很多“IDE”可以满足您的需求EMACS和vi(我最喜欢的)到Eclipse。
商业产品可以为您节省很多令人头疼的问题。但是,选择一个将在很大程度上取决于您的目标硬件和预算。此外,某些硬件支持直接USB调试,而其他硬件可能需要昂贵的JTAG适配器。
其他链接:
低成本Cortex-M3开发板:
New Arduino to utilize an ARM Cortex-M3 instead of an AVR microcontroller.
答案 1 :(得分:5)
鉴于您已经拥有编程经验,您可能需要考虑使用AVR Studio + WinAVR获取Arduino并擦除固件以执行自己的操作。 Arduino为您提供了理解其电子方面的良好起点。取出Arduino引导程序可以让您更好地访问Atmel的内部。
为了实现您正在制定的目标,我还建议通过x86编程更深入地探索台式计算机。例如,您可以构建一个x86操作系统内核。
答案 2 :(得分:3)
ARM是使用最广泛的嵌入式架构,涵盖了来自多家供应商的各种设备,并且成本很高。这就是说ARM7,9,11和Cortex设备之间存在显着差异 - 特别是Cortex。但是,如果以专业的方式进入嵌入式系统是您的目标,那么ARM经验将为您提供良好的服务。
8位体系结构通常更易于使用,但通常在内存容量和核心速度方面都非常有限。另外,因为它们易于使用,所以8位技能相对容易获得,因此对于潜在的雇主来说这是一种不那么有吸引力的技能,因为它很容易在内部履行或者经验不足(因此成本较低)的员工。
然而,如果这是一种业余爱好而非职业生涯,零件,电路板和工具的低成本以及易用性可能会让人有吸引力。我建议AVR只是因为免费的avr-gcc工具链支持它。 SDCC是另一个开源C编译器,支持一些8位目标。我相信Zilog可以免费使用他们的Z8编译器,但你可能需要为调试硬件付费(尽管这相对便宜)。许多商业工具供应商提供其工具的代码大小限制版本用于评估和非商业用途,但要注意大多数调试器需要专业硬件,这可能是昂贵的,但在某些情况下,如果您只需要基本功能,您可以自己构建它低速。
无论你做什么,都要看看www.embedded.com。如果您选择ARM,我已经在商业项目中成功使用了WinARM,尽管它不是为了舒适而构建的!有一个很好的ARM资源列表here。对于AVR,请查看www.avrfreaks.net
我只推荐Microchip PIC器件(至少是低端器件)用于高成本敏感型项目,其中外设组合非常适合应用;不是为了学习嵌入式系统。 PIC更像是一种品牌而不是一种架构,PIC12,16,18,24和PIC32的各种范围彼此非常不同,因此学习一种不一定能让你在使用另一种产品方面处于有利地位 - 通常你甚至需要购买新工具!也就是说,如果您希望同时获得一些简单的DSP体验,那么基于PIC24架构的dsPIC可能是一个不错的选择。
在所有情况下都要检查编译器的可用性(特别是如果需要C ++支持)和成本以及调试器硬件要求,因为这些将是开发套件中最昂贵的部分,电路板和部件往往是最少的昂贵的部分。
答案 3 :(得分:2)
德州仪器以极低的价格发布了一款非常有趣的开发套件:eZ430-Chronos Development Tool包含带有显示器的MSP430和运动手表中的各种传感器,包括usb调试编程器和usb无线电接入点{{ 3}}
还有for 50$个很多很多信息。
我已经a wiki containing用于eZ430-Chronos Kit。
答案 4 :(得分:1)
无论您做什么,请确保您获得良好的开发环境。我不喜欢Microchip的开发工具,尽管我喜欢他们的微控制器(我已经被MPLAB + ICD烧了太多次,太麻烦和功能失调)。 TI的2800系列DSP相当不错,并且具有基于Eclipse的C ++开发环境,您可以将其用于< 100美元(获得一个基于“controlCARD”的实验者套件,如28335的那个) - 调试器通信链接非常可靠; IDE很好,虽然我偶尔会崩溃它。
某处有更好的IC和电路板;我对嵌入式微控制器领域并不熟悉,但对于使用另一个软件工具链的糟糕IDE我没有太多的耐心,我必须弄清楚如何解决所有错误。
答案 5 :(得分:1)
有人推荐ARM。我推荐它,不是作为第一个学习的平台,而是作为第二个平台。 ARM作为一个学习嵌入式低级细节的平台有点复杂,因为它的启动代码和初始化要求比许多其他微处理器更复杂。但ARM是嵌入式市场的重要参与者,非常值得学习。因此,我建议将其作为第二个学习平台。
Atmel AVR有助于学习许多嵌入式必需品,主要有三个原因:
development kits的其他微观也可能是好的 - 例如MSP430 - 尽管他们可能没有这样的粉丝论坛。使用开发工具包是一个很好的方法,因为它们旨在快速启动并运行微观,并促进有效的学习。他们可能有tutorials oriented towards quickly getting started。
好吧,我想开发工具包及其教程可能会掩盖引导加载程序和启动代码之类的问题,有利于让代码尽快使LED闪烁。但这可能是一个很好的入门方式,您可以按照自己的节奏探索从“开机”到“代码运行”的事件链。
我不是PIC的粉丝,至少是PIC16,due to their architecture。它不是非常友好的。记忆库很痛苦。
答案 6 :(得分:1)
这是一个难以回答的问题,因为您的理想答案很大程度上取决于您对学习的兴趣。
如果您的目标只是深入了解计算系统的内部工作方式,我几乎建议您放弃嵌入式路线并拿起一本关于编写Linux内核模块的书。写一些简单的东西,从SMbus或类似的东西读取温度传感器。
如果你想进入高级别(手机等)嵌入式应用程序开发,下载Android SDK,你可以在eclipse下用java编写代码,甚至有一个很好的模拟器。
如果你想进入“真正的”微控制器空间并真正看看低级系统编程,我建议你从一个非常简单的架构开始,比如AVR或PIC,没有MMU。
潜入中间地带,例如带有MMU和某种操作系统的ARM,无论是Linux还是其他操作系统都会有点震撼,因为没有背景是系统编程和硬件接口,我认为过渡将会如果你打算做很多事情,除了写非常简单的应用程序,计算按钮按下或类似的东西,那就太粗糙了。
答案 7 :(得分:1)
重要的是,您需要逐渐从简单的系统开始获得经验。请注意,简单来说,我并不意味着不那么强大,我的意思是易用性,易于设置等。在这种情况下,我会建议以下(我对任何产品没有既得利益,我只是发现它们是最好的):
我开始使用其中一种(MBED开发板)。对我而言,最大的卖点是我可以用C或C ++编写代码,直接连接USB和一个灵活的在线开发环境(根本不需要本地工具安装!)。
开场5分钟后,我有一个样本眨眼的程序(这个世界的'你好世界')运行以下内容:
#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内存)。在线开发工具有一个非常好的库和大量的例子,这是一个非常活跃的论坛。将设备连接到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控制器更强大,但使用和学习起来要简单得多。
答案 8 :(得分:1)
我使用微芯片PIC,它是我开始的,我主要是因为这个邪恶的天才书的123微控制器项目。我在学校上了一个微处理器课程,学习了一些关于中断,时间和事情的知识,这对我的微控制器有所帮助。我想其他一些程序员可能会更好/更容易,但是对于PicKit1只需36美元,我太便宜而无法购买另一个......坦率地说,不使用它们我不知道它们是否更容易/更好,我喜欢我的,并且每次机会都会推荐它,而且我真的很想看到它,但我终于可以用ICSP编写另一个芯片了。我不知道其他程序员是做什么的,但对我来说这是最好的5线接口并且你已经编程了。不能用棍子打败它......
答案 9 :(得分:1)
我只使用其中一种。
飞思卡尔是一款优秀的芯片。我已经在小项目中使用了HC-something芯片多年。唯一需要注意的是,我不会碰到嵌入10英尺杆的CodeWarrier。你可以找到很少的免费C编译器和汇编器(我不记得我用过的最后一个的名字)做得很好。 Codewarrior很大而且令人困惑,无论我对芯片架构了解多少,C编程似乎总是让事情变得更难。如果你以前在Mac上使用过Codewarrior,并认为CW很漂亮,那么,它根本不是那样的。 CW嵌入式看起来模糊地相似,但工作的方式非常不同,而且不是很好。
命令行编译器通常很好。能够支付大笔资金的专业人士可以获得昂贵的开发环境,而且我相信他们会让事情变得更好,但如果没有它,它仍然比在1990年为台式机编写汇编代码要好得多,而且不知何故我们设法做得很好。 : - )
答案 10 :(得分:1)
不,如果您想学习如何对嵌入式设备进行编程,都没有关系。但是您需要知道从哪里开始以及下一步要去的流程。因为那里有很多微控制器,您不知道该选择哪一个。因此最好在开始之前先制定一个路线图。
在我看来,您应该从-任何AVR板(atmega 328P-arduino板或AVR板)开始 然后您应该去ARM微控制器-首先做ARM CORTEX TDMI 然后是ARM cortex M3开发板。因此,您将获得一个总体视图,之后您可以根据所从事的项目类型和需求来选择任何开发板。
详细了解嵌入式- doafco.com
答案 11 :(得分:0)
您可以consider一个RoBoard。现在,这个主板可能不是你正在寻找的微控制器,但它确实具有能够运行Windows或DOS的优势,因此你可以使用Microsoft .NET甚至C / C ++开发工具来调整伺服器或传感器之类的东西,甚至是什么,构建一个机器人!这实际上很有趣。
还有Axon II,它有ATmega640处理器。
无论哪种方式,两个委员会都应该帮助您实现目标。
很抱歉机器人专注,只是我感兴趣的东西,并认为它也可以帮到你。
答案 12 :(得分:0)
我使用PIC,但如果我今天选择,会考虑Arduino。但是从你的目标出发:
我想知道你最好的选择就是破解Linux内核吗?
答案 13 :(得分:0)
BBC Micro Bit
https://en.wikipedia.org/wiki/Micro_Bit
这个便宜的小黑板(~20 pounds)被ARM Holdings用作教育设备,并免费向英国学生分发了100万个单位。
它包含一个ARM Cortex-M0,这是所有组件中最小的ARM内核。
由于它的广泛可用性,低成本,简单性以及将ARM架构介绍给您的事实,因此我将其推荐为第一款微控制器板。ARM架构具有许多更高级的板卡,可用于更严格的应用。 / p>