其实拿这4者来比较本身就是一件错误的事。
这四者就像:大众、12缸发动机、保时捷、小汽车的区别。
从一开始方向就走错了,以为学习嵌入式,以上的所有东西都要学。
好不容易熬了几个月,感觉还是一无所成,做不出什么项目,经常会感觉懂了,又好像什么都不懂。
这就是定位不够精准导致的,把精力都分散出去了,最后没一个能拿得出手的。
这四者都是属于嵌入式技术范畴,嵌入式涉及的技术知识体系非常庞大。
理论上一个人不可能全部都吃得下,除非你从大学开始把谈恋爱、打游戏、刷视频的时间都奉献出来。
对于大多数普通人来说,专注于嵌入式某个细分方向深耕足够了。
下面分别对这4者来分析下:
- Arduino
单片机有很多不同的品牌和型号,Arduino是单片机的一种。
一般来说是以AVR单片机为首的集成电路板就叫Arduino(当然后面还有用STM32或者其他单片机开发的非官方版,这里就不一一阐述了)。
Arduino用专业的术语说就是开源的硬件开发学习平台,包含了多种型号的Arduino电路板和专用编程开发工具(Arduino IDE)。
Arduino SKD有很多现成的库函数,用于对硬件层的控制。
开发者通过调用库函数就能轻易地使用AVR这个芯片的功能,然后通过不同程序去实现不同的硬件控制,比如说控制灯、继电器、电机、蜂鸣器之类的。
而不需要像单片机开发那样要看芯片数据手册去配置寄存器使用芯片功能。
虽然用Arduino开发电子产品效率像开挂一样,不过实际产品却很少用。
因为实际的产品在成本、尺寸、性能、功耗等方面都有特定的要求。
Arduino一般是用于给你学习和提升c语言用的,通过这个平台你可以快速了解c语言是如何控制硬件的。
还有就是一些创客需要快速去实现某些奇特的想法。
所以,如果是走Linux软件方向的,从Arduino入手比较合适,如果你想从事单片机开发偏硬件方向,我建议直接从51单片机入手。
2. arm
前面我们把Arduino比作是大众,树莓派是保时捷,那arm就是一个V12发动机。
Arm本身就是一家英国公司名简称(Advanced RISC Machines),arm也是一种芯片内核技术。
我们单片机一般都是有内核的,比如说51内核,以前因特尔设计的,主要针对一些控制和运算比较简单的电子产品。
还有ARM内核的,主要针对运算和控制比较复杂的电子产品。
Arduino的AVR单片机正好介于这两者之间,比51内核强大,比ARM内核菜。
单纯的内核不能直接应用在产品,需要进行二次开发,所以,ARM公司一般会把这种内核技术卖给半导体公司做二次设计。
一般ARM公司有3种授权级别:
①.架构层授权
这个级别是指可以对ARM内核架构进行大量改造,包括汇编指令集的扩展和缩减,像苹果就是在ARMV7-A架构基础上,扩展出swift架构。
除了苹果以外,还有海思麒麟、联发科、三星、高通等cpu大多都是ARM架构。
②.内核层授权
这个级别是可以在这个内核基础上可以加自己需要的外设,比如说GPIO、USART、ADC、DMA等等,最后做成自己的单片机。
像STM32就是这样干的,类似的芯片还有巨多,大多数出SOC单片机的都是属于这层。
③.使用层授权
这个层级权限最低,相当于你只能使用它,不能对它进行修改。
ARM内核也分很多个版本,ARM7、ARM9、ARM11,到了ARM11以后就是以Cortex命名了。
Cortex架构也分三个系列性能从低到高:M、R、A。
Cortex-M定位是中低端市场,也就是我们的单片机,也叫微控制器,我们最常用的STM32F103就是Cortex-M3的内核。
Cortex-R定位高端实时系统,比如说医疗、工业、汽车、基带等等领域。
Cortex-A定位是通用市场,典型的就是平板电脑、手机、数字电视、机顶盒、服务器、打印机等领域。
3.树莓派
树莓派和Arduino有点像,不是某个芯片,而是一个集成的电路板。
树莓派性能比Arduino要强悍很多,树莓派用的是ARM内核处理器,接上鼠标和键盘就可以当迷你电脑一样用。
不过电脑一般是window系统,而树莓派大多是Linux。
很多想学习Linux,想从事嵌入式纯软件方向的就是基于树莓派这个平台来学习的。
4.单片机
这个我是最熟悉的,毕竟自己干了10年。
单片机就是一个芯片,品牌和型号都很多,比如GD、ST、TI、STC、新唐、NXP等等太多了。
单片机需要做电路和程序的二次开发才能实现一个完整的电子产品功能。
这个方向的职位有几个:单片机工程师、STM32工程师、嵌入式工程师。
学习的知识体系也更多,总体来说基础部分有3个:基础电路、C语言、单片机(51,STM32)。
更加详细的学习路径和步骤可以通过无际单片机编程了解。
Arduino就是相当于用AVR的单片机帮你做好底层硬件和基础单片机寄存器配置程序,你直接使用就能实现。
从难度来说单片机开发更难,Arduino更简单。
从产品的角度,单片机也比Arduino应用更加广泛。
单纯学Arduino基本没什么就业方向,Arduino打c语言基础,需要继续往树莓派学习,主要往Linux应用开发。