嵌入式开发交流网论坛

标题: 什么是嵌入式编程?如何入门和提高? [打印本页]

作者: 觋牧    时间: 2018-6-17 09:25
标题: 什么是嵌入式编程?如何入门和提高?
[attach]685[/attach]
##嵌入式可以说是目前涵盖面最广、最火的职业之一
几天前,在微信里经人介绍新认识了一位朋友,是在法国的学生,目前在找实习,学嵌入式和工业信息的。加了好友之后回复了一些问题。
因为我是嵌入式软件专业的, 目前的工作是Android嵌入式和app开发。以前也有人专门发邮件问过我关于嵌入式学习的问题。
我觉得把这些回复整合起来,也许对大家有那么一点点用,就写出来看看。
不过我自己还很不够呢,还望读者不吝赐教和补充指正,彼此学习~
##什么是嵌入式?
这个问题三言两语还真说不清楚。
因为首先,嵌入式有不少组合名词,例如嵌入式系统,嵌入式软件,Linux嵌入式,Android嵌入式,嵌入式Web,等等。
通常对嵌入式的定义其实是对"嵌入式系统"的定义。
网上对嵌入式系统的中文定义实在是不好理解,比较官方的中文定义是:
嵌入式系统是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
我个人感觉:
如果是从来没接触过嵌入式的朋友,看了上面这段定义,估计跟没看差不多,还是一头雾水。当年我刚开始学习嵌入式时看到这段解释也是这般感受。
当然了,这段定义是正确的,不过就是有点学究味,不够形象, 不够"接地气"。
那么如何来给嵌入式系统一个接地气的定义呢?
我可以先列举目前用到嵌入式系统的IT领域:
我想不必再列举也已经感觉到了吧 : 是的,嵌入式正在渗透到我们生活的方方面面, 而且会越来越多地被使用。
但是, 例如Android, iOS纯app开发的话一般就不能算是嵌入式了吧, 只能算软件开发。
未来,也许我们可以有一身轻便的可穿戴设备,衣食住行都用得到。甚至未来可以穿一身轻薄的"飞行衣", 想去哪都行。
嵌入式编程,最近几年越来越火,虽然入门门槛比较高,但是学好了薪资水平不错哦。例如Linux嵌入式的高级工程师。
而且如果你能啃下嵌入式这个"硬柿子", 学了很多方面的知识, 那么其他一些编程领域, 也许就能比较轻松地掌握了。就好比你如果熟练掌握了C语言和C++, 那么其他一些编程语言一般都可以轻松驾驭了。
我觉得原版英语的定义应该会更便于理解,因此我将维基百科上对嵌入式系统的定义翻译如下 (不才, 若翻译有误请补充指正):
An embedded system is a computer system with a dedicated function within a larger mechanical or electrical system, often with real-time computing constraints. It is embedded as part of a complete device often including hardware and mechanical parts. Embedded systems control many devices in common use today. Ninety-eight percent of all microprocessors are manufactured as components of embedded systems.
嵌入式系统首先是一个具备特定功用的计算机系统, 是包含在更大的机械或电子系统里面的, 通常有实时的计算约束。嵌入式系统作为一个部件被嵌入在一个完整的设备里(小编补充: 这也是"嵌入式"的名字由来), 这个设备通常有硬件和机械的部分。当今时代, 嵌入式系统控制了很多通用设备。98%的微处理器被生产用来作为嵌入式系统的部件。
Examples of properties of typically embedded computers when compared with general-purpose counterparts are low power consumption, small size, rugged operating ranges, and low per-unit cost. This comes at the price of limited processing resources, which make them significantly more difficult to program and to interact with.
嵌入式系统和通常的系统有区别, 主要体现在以下特性 :
Modern embedded systems are often based on microcontrollers (i.e. CPUs with integrated memory or peripheral interfaces), but ordinary microprocessors (using external chips for memory and peripheral interface circuits) are also common, especially in more-complex systems. In either case, the processor(s) used may be types ranging from general purpose to those specialised in certain class of computations, or even custom designed for the application at hand. A common standard class of dedicated processors is the digital signal processor (DSP).
现代嵌入式系统通常基于微控制器(即具有集成内存或外围接口的CPU(中央处理器)),但是普通微处理器(使用用于存储器和外围接口电路的外部芯片)也是常见的,特别是在更复杂的系统中。 在任一情况下,所使用的处理器可以是从通用的到专门用于某些计算类别的那些类型,或者甚至是针对当前应用而定制的类型。 数字信号处理器(DSP)就是一种通用标准类别的专用处理器。
Since the embedded system is dedicated to specific tasks, design engineers can optimize it to reduce the size and cost of the product and increase the reliability and performance.
由于嵌入式系统专用于特定任务,设计工程师可以对其进行优化,以减小产品的尺寸和成本,并提高可靠性和性能。
Embedded systems range from portable devices such as digital watches and MP3 players, to large stationary installations like traffic lights, factory controllers, and largely complex systems like hybrid vehicles and avionics. Complexity varies from low, with a single microcontroller chip, to very high with multiple units, peripherals and networks mounted inside a large chassis.
嵌入式系统存在于当今的很多设备里, 小到数码手表, mp3播放器, 大到交通灯, 工业控制器, 混合汽车, 航空航天设备。嵌入式系统的复杂性也千差万别, 简单的嵌入式系统可能只有一个微控制器芯片 ; 复杂的则有很多个计算单元, 外设, 网络, 这些都被"镶焊"在一个大"底板"上。
在嵌入式编程中还有一个交叉编译的概念: 什么是交叉编译呢?
简单来说, 就是"在一个平台上生成另一个平台上的可执行代码"。
普通的软件开发过程中, 如果是编译型的编程语言, 例如C语言, C++, Java, 等等, 你想要运行你写的程序, 需要用编译器将代码编译成可执行程序 (当然, 中间还有几个步骤, 比如汇编, 链接, 在此就不提了)。
但是嵌入式系统的计算能力有限, 内存有限, 储存空间有限, 因此无法完成比较需要资源和速度的编译过程。
比如在Android嵌入式开发中, 你不可能在Android手机里直接让它编译自己的系统或软件吧 (臣妾做不到啊)。
因此, 我们会先在普通电脑(比Android手机的计算能力更强, 内存更大, 储存空间更大) 里将程序编译 (需要不同于我们编译普通软件的编译器, 称为"交叉编译器/软件", 比较常见的有arm-linux-gcc一族) 成适配Android手机的特定可执行文件(一般会打包成镜像文件), 然后通过专门的工具"烧录"到Android手机里。
相信经过这些解释, 大家对嵌入式有了一个初步的了解了吧。
但是光看这些解释是不可能了然于胸的, 还必须要学习, 在实践当中你就会更深入理解嵌入式编程是什么了。
##入门和提高嵌入式
暂时只想到这么多,有些点可能没谈到。希望不要误导。
有什么问题欢迎在留言区交流, 指教。

[attach]686[/attach]




欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) Powered by Discuz! X3.2