嵌入式学习笔记(一)——什么是嵌入式?嵌入式软件工程师所需的基本知识

本人在学习嵌入式期间留下的学习笔记,针对自己对嵌入式的学习,进行逐步积累。在此写出对目前已经学习的内容进行整理归纳,并加入部分自己的理解。因本人刚刚开始学习,文章内容仅供参考,对嵌入式诸多内容恐有遗漏与错误之处,烦请各位指正。

引用文章:

https://www.crifan.com/files/doc/docbook/embedded_soft_dev/release/html/embedded_soft_dev.html#emb_linux_compostion嵌入式软件开发

什么是嵌入式?

先说说背景,在计算机领域内,知识体系按层次分,主要可以分为:上层、中间、底层。上层就是纯软件,使用各类语言编写程序和应用。底层就是硬件,针对不同的使用方向,设计电路和芯片进行使用。而嵌入式位于中间,写的是代码,但大多是为硬件使用去写,不是以程序和应用为目标去写。除了纯软件的设计可以与硬件完全分开之外,对于嵌入式和硬件都不能完全抛离软件部分,总会有一些相通的地方。

嵌入式,又称嵌入式软件,需要注意的是,很多时候,也有把嵌入式硬件,简称为嵌入式的。也有将嵌入式系统称为嵌入式的,对于嵌入式系统,度娘的解释是:

嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。

对于很多非专业的同学来说可能还是一知半解,通俗的来讲,嵌入式就是针对特定的需要的功能,设计对应的电路,同时为该电路编写代码使得其他人通过使用这段代码就可以使用这个电路。

举个例子,咱们平常使用的智能手表,智能门锁,都算是嵌入式系统的一种。把这些商品拆开后,都能看见里面有电路板,里面集成了几个芯片还有外部电路,像是电阻电容之类的。其中,芯片还有其他的设计和生产算是硬件部分,我们日常使用的APP的设计算是软件部分,而电路的设计还有软件所使用的驱动是嵌入式部分。

嵌入式软件工程师需要什么知识?

本人预计目前将会在嵌入式软件方面再进行深入学习,因此目前只记录嵌入式软件方面相关知识。

作为一个软件工程师,对于C语言的知识是必不可少的,这里所说的C语言并不是像大学中写几个for循环或者if选择语句那样简单。而是需要知道自己写的代码需要占用多少资源,专业点说,也就是footprint的大小,因此某些代码介绍其优点的时候会说“small footprint”也就是占用储存资源少的意思。

首先解决一个问题,学习嵌入式C语言要掌握到什么程度?

比如要求C语言能编多少行的程序,还是看懂多么复杂的程序,还是只要会修改就行。其实嵌入式,尤其是嵌入式底层驱动开发,对于写代码的多少和价值,用一句经典话的话来描述就是:

如果写一个嵌入式驱动,一共100行,写出来那100行代码,本身可能只值1块钱而搞懂如何写,值99元。

嵌入式,尤其是底层驱动开发,其实代码量相对(尤其是与上层软件相比)都不是很大,但是要搞懂背后的逻辑,协议,接口,框架,平台等内容,然后才能写出来代码。而搞懂背后的逻辑,往往才是难点和重点。

当然,如果搞懂了应该如何写,往往也就会修改对应的代码了。总的来说,嵌入式开发,需要的背景知识:

•    行业背景知识

•    操作系统,平台

•    平台下的(驱动)框架

•    (驱动的)具体实现细节

•    看懂设备本身的手册搞懂如何配置操作

搞懂如何写:大概占70%的技术比重;而具体写出来(高质量的)C语言代码:可能只占30%左右的技术比重。

在下一步的学习中预计将首先学习开发环境相关知识,对常见的嵌入式Linux典型的环境组成:uboot+kernel+rootfs学习了解。之后再学习交叉编译相关知识。


针对所需要的知识关键词进行简要记录:

开发环境:嵌入式Linux(主)、WinCE等    交叉编译    烧录    开发工具:嵌入式IDE、协议分析工具    系统设计    嵌入式CPU    外围设备    芯片架构    芯片封装方式    硬件厂商    相关接口和协议

你可能感兴趣的:(笔记)