第一次使用embedded式系统编程器的单片机是否有用?
我有几年的桌面和networking编程经验。 我想进入一些embedded式系统编程。 在问最初的问题后 ,我不知道应该从哪个硬件/软件IDE开始…
-
Arduino + Arduino IDE?
-
Atmel AVR + AVR Studio 4 ?
-
飞思卡尔HCS12或Coldfire + CodeWarrior ?
-
Microchip PIC + MPLAB ?
-
ARM Cortex-M3 + ARM RealView / WinARM
或者…没关系
哪个开发平台最容易学习和编程(考虑到IDE的可用性)?
如果出现问题,哪一个最容易debugging?
我的目标是了解“IO端口如何工作,内存限制/需求,包括可能的分页,中断服务例程”。 学习一个我稍后会用到的更好的方法,还是把高级概念传递给大多数微控制器?
谢谢!
更新: 这个开发包是如何开始的? 评论? build议?
就个人而言,我build议使用基于ARM Cortex-M3的微控制器。 更高功率的ARM内核非常受欢迎,而这些低功耗版本可能会在专有的8/16位内核中占据一席之地。 下面是关于这个主题的最新文章: ARM Cortex-M3和MCU市场的融合 。
Arduino非常受业余爱好者欢迎。 Atmel的外设库在处理器types中相当普遍。 所以,它会顺利从AVR转换到ARM 。
我并不是说ARM比AVR或其他内核要好。 select商用产品的MCU通常归结为外设和价格,其次是现有的代码库和开发工具。 此外,微控制器一般比台式PC简单得多。 所以,在你掌握之后再把它变成另一个,真的不难。
另外,如果您对实时操作系统(RTOS)开发感兴趣,请查看FreeRTOS 。 它是开源的,包含了一个很好的RTOS的实现,以及它们是如何实现的。 实际上,他们的演示范例甚至以AVR为目标。
embedded式系统的开发工具可能非常昂贵。 但是,像ARM和AVR这样的更开放的内核通常有开源的select。 例如,请参阅WinARM和WinAVR项目。
这些工具链基于GCC,因此在非Windows平台上也是可用的(并且更容易使用恕我直言)。 如果你熟悉使用GCC,那么你知道有大量的“IDE”来适合你从EMACS和vi (我最喜欢的)到Eclipse的口味。
商业产品可以为您节省很多麻烦的设置。 但是,select一个将取决于您的目标硬件和预算。 此外,有些硬件支持直接USBdebugging,而其他硬件可能需要昂贵的JTAG适配器。
其他链接:
- Cortex-M3低成本工具select指南
低成本Cortex-M3主板:
- BlueBoard-LPC1768-H($ 32.78)
- ET-STM32邮票模组($ 24.90)
新的Arduino使用ARM Cortex-M3而不是AVR微控制器。
我将以ARM Cortex-M3或ARM7为基础。 既然你提到I / O,我build议尝试不同的供应商。 一些供应商会让你对寄存器进行读 – 修改 – 写操作来改变输出值,而另外一些供应商可以在不进行读 – 修改 – 写操作的情况下简化操作,但是这种方法也有其缺点。 去sparkfun.com并浏览开发板。 Olimex(通过sparkfun等销售)有各种各样的低成本评估板,非常适合您的工作。
我更喜欢msp430的指令集来学习汇编(如果你真的想embedded的话,一些汇编是必需的)。 arm是密切的第二IMO。 你可以从ti购买一个ez430 20美元左右,然后再增加10美元就可以购买三块msp430板。 不幸的是,AVR可能是业余爱好者最常用的体系结构(pic曾经是)是一个非常丑陋的指令集,你必须使用C来避免它。 不妨在清理干净的指令集中进行清理,这样做会使编译器的工作变得更容易,从而使得C代码更清晰。 msp430和arm家族都有gcc解决scheme,并且很容易使用build和使用llvm和clang(llvm在gcc前端有一个64位的问题)。
我的底线是,如果你想真正了解有关I / O的embedded式,I / O和中断。 去sparkfun从lpc和st抓住几个30美元的arm7s,然后stm32,从stellaris,1968或者811得到一些东西。 来自ti的ez430(stellaris家族现在是ti的一部分)。 哦,回到sparkfun,并抓住一个arduino迷你,或百合垫子20美元之一,但一定要得到USB串行的东西,这两个权力,并给你串行/debugging访问它。 我真的非常失望stm32演示单位从st或它实际上是一个rtos供应商。 因此我仍然非常接近从不再从st购买。
编辑
哇,我用我的第一个答案打了一些神经。 可能是更多的编辑。
有几种方法可以做到这一点。 一个是单一的注册types的东西。 读取 – 修改 – 写入解决scheme。 如果你想改变一个I / O输出你需要读取寄存器改变对应于I / O引脚的一个位(所以你不要改变其他I / O引脚)并将其写回。 这会消耗指令,如果以高级语言进行操作,这对embedded式,体积庞大,速度慢的应用程序是不利的。 另一个解决scheme是针对位打击而量身定制的。 有一个寄存器用于设置I / O引脚,当您向其写入数据时,将I置于I / O引脚的位置或要设置的引脚,然后写入,写入的位将保持不变。 而另一个寄存器,当你写一个1清除相应的I / O引脚。 这些都是很棒的比特币。 但是,如果你不知道数据值是什么,那就太糟糕了。 如果你正在从一个input接收一些数据,并将它传递给I / O引脚,那么你必须做一个,如果它是一个然后写在这里写在那里。 回到笨重和缓慢。 我的回答是,这两种解决scheme都存在,一些芯片可以让你们两个都有,其他的只有两种解决scheme中的一种。 这是一个权衡,值得经验的东西,供应商在这方面和其他方面是不同的。 供应商和芯片之间差异的另一个例子是一些提供电线或输出和上拉或input上拉,可以有所作为,如果你必须开始添加每个I / O引脚分立部分,当你可以刚刚select另一个供应商,节省了所有的时间和金钱 那种事会让你很快失业
Cortex-M3,我知道的select是ST的STM32,我会从sparkfun那里买的。 TI以前的Stellaris家族现在拥有Luminary Micro。 我会避免811评估板,时钟是比其他人更难find除数的一些数字。 我也在几个小时内把我的第一个砖砌了,不得不等待另一个。 其他人不那么容易砖。 如果你对你的IO使能和方向很小心,而且只是想学习/玩811就好了。 嗯,我刚刚看到LPC现在有一个皮层m3吗? 如果不是的话,那么所有的业务部门和有些不是的业务部门都可能会拿起embedded式市场的cortex-m3。 从工具,可用程序员,单位成本,开发成本,性能,功耗等angular度来看,这些因素都是难以逾越的。
首先使用cortex-m3 vs arm7的缺点是,使用arm7可以先学习arm指令集,然后切换到拇指子集。 所有你的皮层-m3都是拇指和拇指2。 而且中断向量表与普通的武器相比是愚蠢的。 不是愚蠢的,愚蠢的,而是愚蠢的。 许多人会认为ARM的方式是愚蠢的,是的,理解和同意。 cortex-m3更像是arm家族的一个例外,所以我build议把它当作你的第二或第N个ARM而不是你的第一个。 在这里,所有值得你学习的好东西都想知道这个市场和环境。 来自olimex的str711板子可以在sparkfun上得到,这是一个很好的开始。 我认为这是sam7-64,我花了更多的时间,虽然。 LPC很受欢迎。 sparkfun有一对板上的9针串行端口,所以你不必添加一个。
除了引导许多其他人已经写的东西,是的,没有使用或学习ASM是可能的。 我会用这些陈述来触及更多的神经,但embedded式资源和性能受到限制,很多传统的编程规则就像没有使用全局variables一样出门。 像C这样的高级语言可能会变得非常痛苦,特别是像PIC这样的糟糕的指令集。 由于您距离金属非常近,因此您的代码数量可能无法从一个芯片系列移植到另一个芯片系列,甚至在同一芯片系列中也无法移植。 所以使用C来实现可移植性并不是一个有效的参数。 大多数编译器是垃圾,例如gcc是边缘的(一个尺寸适合所有定义)最好的。 这取决于你想控制多less,想成为别人的奴隶。 通过对embedded式系统感兴趣,意味着你想要控制,这意味着理解vector表,知道什么时候,何地,为什么你的编译器扔掉了50%甚至更多的性能,你可以让这个远程控制器是最后一个更长一个电池,而不是要求三个只是不知道的工具,他们在做什么只是吱吱叫。 世界上绝大多数的程序员都以一半以下的速度运行他们的程序,而且规模翻了一番。 庞大而缓慢,只是想到了电力和存储节省。 你通常不会在桌面上看到这个,但是当你embedded时你会看到。 现在说几乎所有的代码都是用C编写的,我通常只有几行汇编器来设置堆栈和引导以及几行函数,在这里和那里编译器永远不会竞争,或者覆盖编译器往往会遇到的问题。
我想要一个stm32,在当时是唯一的其他cortex-m3。 希望与Stellaris家族进行比较。 当他们到达时,我发现你必须住在他们的沙箱里。 我没有使用的rtos,我想要它被删除,并希望使用我自己的引导程序和代码。 至less在那个时候,这是一个额外成本的东西,我已经支付了我通常竞争产品的两倍。 所以他们在他们的盒子里,永远不会被重新打开或使用。 最终被扔掉。 是的,一半的问题是我没有做足够的研究,我认为董事会像其他正常的评估委员会,这是第一次烧伤我。 让我感到羞耻,让我感到羞耻。 这是rtos供应商,而不是ST,是真正的罪魁祸首。 所以一旦olimex stm32板从sparkfun可用我买了一个。
arduino也有这个沙盒问题。 因此,大部分search信息都在沙盒中。 所不同的是一切都是开放的,如果你想做自己的事情,并掌握董事会的信息是有的。 对于那些记住这个平台的人来说,arduino并不像AVR蝴蝶那么容易。
AVR蝴蝶和现在的arduino在它所绘制的追随者的意义上是惊人的。 也许爱特梅尔作为一个公司来克服指令集和工具只是更加用户友好。 他们不会限制自己的AVR BTW他们也有一个ARM线,可能更多的东西,我没有看了一会儿。 如果你使用arduino,你肯定不会需要stackoverflow的帮助。 如果你不需要,你不需要任何汇编程序。 而使用sparkfun的arduino mini或lillypad,玩的成本几乎没有。
我认为他们可以用msp430做更多的事情。 当然,他们有这个超级低功率的市场,他们想打。 但是当我第一次看到它的时候,指令集就有了pdp-11的这种感觉。 很干净,我推荐msp430首先为那些想学习汇编,然后切换到ARM,那么你会看到,所有的汇编语言只是语法学习。 表演和痛苦等等事情当然是另外一回事了。 我认为他们可以很容易地扩大msp430的速度,并允许更多地使用地址空间。 我花了一些时间最近摆弄一个opencore msp430,你可以把它放在一个fpga,并获得更多的内存,速度和function,如果你喜欢,甚至可以添加USB,如果你想要的。 当然不是在超低功耗的包装上。 为了学习一点hdl,我也参与了写自己的msp430克隆,没有完成它,但有一些乐趣。
鉴于你已经有了编程经验,你可能要考虑获得一个Arduino,并用AVR Studio + WinAVR清除固件来做你自己的东西。 Arduino为您理解电子元器件提供了一个很好的起点。 取出Arduino引导程序将使您更好地访问Atmel的内部。
为了达到你要设定的目标,我还build议通过x86编程更深入地探索桌面计算机。 例如,您可能会构build一个x86操作系统内核。
ARM是使用最广泛的embedded式架构,涵盖了来自多个供应商的大量设备和广泛的成本。 也就是说,ARM7,9,11和Cortex设备 – 特别是Cortex之间存在显着差异。 但是,如果专业进入embedded式系统是您的目标,ARM的经验将为您服务。
8位体系结构通常更易于使用,但内存容量和内核速度通常非常有限。 同样因为它们使用简单,8位技能相对容易获得,所以对于潜在的雇主来说这是一个不太有吸引力的技能,因为它很容易在内部完成,或者经验不足(因此成本较低)的员工。
但是,如果这是一种嗜好,而不是职业,那么零件,电路板和工具的低成本以及易用性可能使得8位有吸引力。 我会build议AVR,因为它是由免费的avr-gcc工具链支持的。 SDCC(另一个开源C编译器)支持一些8位目标。 我相信Zilog使他们的Z8编译器免费提供,但是您可能需要为debugging硬件付费(尽pipe这样比较便宜)。 许多商业工具供应商提供了用于评估和非商业用途的代码大小限制版本的工具,但要注意大多数debugging器需要专用硬件,这些硬件可能很昂贵,但是在某些情况下,如果您只需要基本function低速。
无论你做什么,都可以看看www.embedded.com 。 如果你selectARM,我已经在商业项目上成功地使用了WinARM,虽然它不是为了舒适而devise的! ARM资源的一个很好的列表可以在这里find 。 对于AVR绝对检查www.avrfreaks.net
我只会推荐Microchip PIC部件(至less是低端的)用于高成本敏感的项目,其中外围组件非常适合应用; 不是为了学习embedded式系统。 PIC比架构更像品牌,各种PIC12,16,18,24和PIC32的范围各不相同,所以学习一个并不一定能够代替另一个 – 通常你甚至需要购买新工具! 也就是说,如果您想同时获得一些简单的DSP体验,基于PIC24架构的dsPIC可能是一个不错的select。
在所有情况下,检查编译器的可用性(特别是在需要C ++支持的情况下)和成本以及debugging器硬件要求,因为这些将是开发工具包中最昂贵的部件,所以电路板和部件通常是最便宜的部件。
德州仪器以低廉的价格推出了一款非常有趣的开发工具包: eZ430-Chronos开发工具包含一个MSP430,带运动手表中的显示器和各种传感器,包括一个usbdebugging编程器和一个usb无线接入点,
还有一个wiki包含大量的信息。
我已经为eZ430-Chronos套件创build了一个stackexchange提案 。
无论你做什么,确保你有一个良好的发展环境。 即使我喜欢他们的微控制器(我被MPLAB + ICD烧了太多次,太麻烦和function障碍了),我也不是Microchip的开发工具迷。 TI的2800系列DSP相当不错,有一个基于Eclipse的C ++开发环境,您可以购买价值低于100美元的C ++开发环境(获得28335的“controlCARD”实验工具包之一) – debugging器通信链路真的很扎实 IDE虽然不错,但偶尔也会崩溃。
有些地方的IC和电路板比较好; 我对embedded式微控制器不太了解,但是对于那些糟糕的IDE,我还没有太多的耐心,还有另一个软件工具链,我不得不弄清楚如何解决所有的错误。
一些推荐的ARM。 我会推荐它,而不是作为第一个学习平台,而是作为第二个平台。 ARM作为学习embedded式低级细节的平台有点复杂,因为它的启动代码和初始化要求比许多其他微型计算机更复杂。 但ARM是embedded式市场的大玩家,非常值得学习。 所以我build议把它作为学习的第二个平台。
Atmel AVR对学习许多embedded式必需品非常有用,主要有三个原因:
- 架构是相当直接的
- 良好的开发工具包,教程
- 有很多资源的粉丝论坛
其他带有开发套件的微型计算机也可能是不错的,比如MSP430,虽然他们可能没有这样的论坛。 使用开发工具包是一个很好的方法,因为它们的目的是快速启动微型操作系统,并促进有效的学习。 他们很可能有面向快速入门的教程 。
那么,我想开发工具包和他们的教程很可能会掩盖引导程序和启动代码等,有利于让代码尽快闪烁LED。 但是,这可能是一个很好的入门方式,您可以按照自己的步调探索从“开机”到“代码运行”的事件链。
我不是PIC的粉丝,至less是PIC16, 由于他们的架构 。 这不是非常环保的。 记忆银行是痛苦的。
这是一个很难回答的问题,因为你的理想答案很大程度上取决于你对学习的兴趣。
如果你的目标只是深入到计算系统的内部工作,我几乎会build议你放弃embedded式的路线,拿起一本关于编写一个linux内核模块的书。 写一些简单的东西,从SM总线读取温度传感器或类似的东西。
如果您正在考虑embedded式应用程序开发的高级(手机等),请下载Android SDK,您可以在Eclipse下的java代码中,甚至有一个很好的模拟器。
如果你考虑进入“真正的”微控制器空间,并真正考虑低层次的系统编程,我build议你从一个非常简单的架构,如AVR或PIC,没有MMU的东西开始。
潜入中间地带,例如一个带有MMU和某种操作系统的ARM,不pipe是linux还是其他地方,都会有一点震动,因为没有背景是系统编程和硬件接口,我认为过渡将是非常粗糙的如果你打算做非常简单的应用程序,计数button或类似的。
这很重要,你需要从简单的系统开始逐步获得经验。 请注意,简单来说,我并不意味着不那么强大,我的意思是易用性,易于安装等。在这方面,我会build议以下(我没有任何产品的既得利益,我只是发现他们最好):
我已经开始使用其中的一个(MBED开发板)。 对我来说,最大的卖点是我可以用C或C ++编写代码,直接连接USB和一个stream畅的在线开发环境(根本不需要安装本地工具)。
五分钟后,我有一个示例闪烁的程序(世界的“世界”),运行以下内容:
#include "mbed.h" DigitalOut myled(LED1); int main() { while(1) { myled = 1; wait(0.2); myled = 0; wait(0.2); } }
而已! 以上是完整的程序!
它基于ARM Cortex M3,为embedded式项目(100mhz,256k闪存和32k RAM)提供快速和充足的内存。 在线开发工具有一个非常好的库和大量的例子,这是一个非常活跃的论坛。 在连接设备到MBED等方面有很多帮助
尽pipe我在embedded式系统(ARM 7/9,Renders M8 / 16/32,Coldfire,Zilog,PIC等)方面拥有丰富的经验,但我仍然发现这个系统非常容易使用。
在最初在基础的面包板上使用它之后,我从这些家伙那里买了一块基板: http ://www.embeddedartists.com/products/lpcxpresso/xpr_base.php?PHPSESSID=lj20urpsh9isa0c8ddcfmmn207。 这有一堆I / O设备(包括微型OLED和3轴加速度计)。 在同一个网站上,我还买了一块LCPExpresso处理器板,它比MBED更便宜,功耗更less,内存更小,但是对于更小的工作来说却是完美的(仍然是PIC / Atmega处理器的瑕疵)。 基板支持LCPExpresso和MBED。 购买LCPExpress处理器板也给我一个附加的JTAGdebugging器和离线开发环境(Code Red的基于GCC / Eclipse的开发工具包)。 这比在线的MBED开发环境要复杂得多,但是在获得MBED的开发后,这是一个合理的进程。
参考我原来的观点,即MBED控制器比LPCExpresso控制器的function强大得多,但是使用和学习起来要简单得多。
我使用微芯片的PIC,它是我开始的,我主要是因为这个邪恶天才书的123个单片机项目而开始的。 我在学校的一个微处理器课上学习了一些关于中断,时序和事情的知识,这对我的微控制器帮助很大。 我想其他一些程序员等可能会更好/更容易,但对于PicKit1 $ 36,我太便宜,去买另一个…坦率地说,不使用它们,我不知道它们是否更容易/更好,我喜欢我的,并且一有机会就推荐它,而且真正花了我的眼睛去看看它,但是我终于可以用ICSP编写另一个芯片了。 我不知道其他程序员是怎么做的,但对我来说,这是最好的5线接口,而且你已经编程了。 用棍子打不过那个…
我只用过其中之一。
飞思卡尔是一个很好的芯片。 多年来,我一直使用HC-chips芯片来做小项目。 唯一需要注意的是我不会碰到embedded10英尺杆的CodeWarrier。 你可以find一些免费的C编译器和汇编程序(我不记得最后一个使用的名字),这样做很好。 Codewarrior是一个巨大而混乱的问题,不pipe我对于芯片架构和C编程的了解如何,总是让事情变得更加困难。 如果你以前在Mac上使用过Codewarrior,并且认为CW非常整洁,那么它就不是那么回事。 CWembedded式看起来模糊不清,但工作原理非常不同,不太好。
一个命令行编译器通常很好 。 能够掏钱的专业人员可以获得昂贵的开发环境,而且我相信他们能够让事情变得更好,但是,如果没有这些,那还是比1990年为台式PC编写汇编代码要好得多,而且我们设法做到了这一点。 🙂
你可能会考虑一个RoBoard 。 现在,这块主板可能不是你想要的微控制器,但它的优点是能够运行Windows或DOS,因此你可以使用微软.NET甚至C / C ++开发工具来捣鼓舵机或传感器等东西,甚至,到底是什么,build立一个机器人! 这实际上很有趣。
还有Axon II ,它有ATmega640处理器。
无论哪种方式,两个董事会应该帮助你实现你的目标。
对不起,机器人专注,只是我感兴趣的东西,并认为它也可以帮助你。
我使用太平洋岛国,但会考虑如果我今天selectArduino。 但从你的目标来看:
- IO端口如何工作
- 内存限制/要求
- 中断服务程序
我不知道你最好是在Linux内核中进行攻击吗?