【整理】类比解释:嵌入式开发需要掌握哪些知识

声明:

下面所说的嵌入式,都还是指的是嵌入式软件

暂时不讨论嵌入式硬件领域。抽空也可以再去聊聊嵌入式硬件。

【背景】

看到:

做嵌入式软件研发应该加强哪方面?

所以想起了,用类比的手段去好好解释一下,嵌入式开发和从事建筑行业的关系,以便解释清楚,嵌入式学习,需要掌握哪些知识:

【类比解释嵌入式需要学习和掌握哪些知识】

举个例子:

就像,你从事的是建筑行业

有些是相对通用的基本知识和技能:(不论你是干体力活的各种工种的工人,还是大楼的整个架构的设计师)进入建筑工地,都要戴安全帽

不论你是干哪个工种的,比如瓦工,水电工,木工等等,那基本上都要具备的基本素质都是:

身体素质本身要好,要能吃苦

但是,很明显,有些知识和技能,就属于,领域相关的知识:

你干瓦工的,要能看懂施工图,要会砌砖,砌各种类型的砖,等等;

你搞木工,那锯子,刨子,锤子,斧头,那要用的熟,能玩出花样来,才能做出好的柜子,椅子,桌子啥的;

如此等等。

但是,如果是你瓦工,则不需要关心木工需要了解的技能,

反之亦然。

而搞嵌入式,这上面这几点上,有点类似于搞建筑行业:

有些知识,也是属于基本的,相对通用的基本,算是属于嵌入式行业内的基础知识和基本功

有些知识,是属于,具体干哪行,哪个领域,所要涉及到的领域相关知识

详细解释:

(1)有些相对通用的知识和技能

比如C语言,相对通用的操作系统:嵌入式Linux,ucOS/II等等

都是属于嵌入式领域内的基本功,通用的知识

换句话说

不论你在嵌入式行业内,具体做什么“工种”

以我之前所遇到,见到,听到的为例:

所在公司是做消费类数码产品研发,比如做Linux底层驱动开发

比如工业控制领域内的现场总线开发

那么C语言,基本都是必备的,基本功

C语言作为基本功的话,就很容易理解:

不论你做相关的哪种领域的嵌入式开发,那么都要努力学好C语言

 

注:

学好C语言的意思是:

不单单掌握C语言的语法,更要:

有良好的编程思想

良好的编写高质量代码的编码习惯

良好的处理问题的思路

良好的代码风格

了解写出高质量C语言代码需要注意哪些细节

等等

 

另外,由于一些嵌入式操作系统,比如嵌入式Linux系统,ucOS/II(以及其他很多常见的嵌入式操作系统,比如VxWorks等)

都是相对通用的

所以,为了学好嵌入式

也要尽量找机会去多学习和了解这些系统的特点和使用方法

最好有机会多实际动手去练习

(2)领域相关知识

同理:

有些是Domain knowledge,即领域相关的知识

关于这部分,之前见过的,一个老外写的,不错的嵌入式的教程:

Embedded Systems Architecture A Comprehensive Guide for Engineers and Programmers pdf 原版 高清晰

中所给出的例子,就是个很好的,domain knowledge的例子:

如果打算从事嵌入式机顶盒方面的嵌入式开发的话

那么往往又要涉及到

DVB,(以及:做嵌入式软件研发应该加强哪方面? 中的评论中提到的)MHP,EGB

和其他的协议,架构,软件库,等等等等

所以说:

对于不同的领域,其所相关的东西

光是名词,就一堆一堆的

更别说,每个名字后面都对应着一堆规范说明,都N多页N多页

往往还都是英文的

此时你所面对这些技术(名字和规范说明)的心情

有点类似于

你是干木匠的,然后让你去把瓦工干的活,

不仅仅要把名词搞懂了

还要搞懂如何实现的

并且还要把活干得好

这时候,往往就是:

需要你有足够的背景知识:对于该领域所涉及的到的技术,即使没实际经验,也要最好有个概念

加上良好的学习能力:有了其他领域的背景知识,以便于稍微帮助你学习新领域的知识

以及良好的悟性:很多时候,学习新东西,出了基础和经验,剩下就是悟性了

加上:

足够的耐心,毅力

以及实际动手能力:把所理解的内容,能转化有有效的代码,

最终:

真正去用高质量的代码,实现软件的功能

由此,算是:

在建筑领域内混的一个木工,靠着基础知识,努力学习瓦工方面的知识,加上良好的悟性和动手能力,

最终把瓦工的活干了,而且干得还不错

当然老板最希望你是:

干的比原来的瓦工干的还好

^_^

 

如此,正所谓:

嵌入式开发中

最先要,也最重要的,是把基础知识学好了,基础打牢了;

然后是,针对所要学习和工作的相关领域的知识,去用最短的时间,最大的学习热情,加上悟性,和学习方法,

最终掌握该领域的知识,并且实际动手去锻炼,最终实现目标:

用高质量的代码实现嵌入式领域内的相关的软件功能

 

【特定问题解答】

针对:

“我目前大四刚开头,找到了一份嵌入式工作,电视软件方面的,据说主要是windows环境c++编程。

我是通信工程专业,主要偏向于硬件,语言只学过C和汇编,二级C上了90分,其他语言没有学过。现在我准备自学C++,数据结构,操作系统。当初面试的时候hr也知道我们专业没开这类计算机专业的,只问了我有没有看过其他c语言的书,我之前在做《c程序设计语言》后面的习题,还没做多少。现在想改学c++了。

请问我现在该提高哪些方面,是怎样的一个学习顺序,是直接学c++还是继续深入学习c,其他还应该学些什么?如果要买开发板,有没有可以推荐的呢?”

的建议:

1.继续深入学习好C语言。其次再去学习C++语言;

2.嵌入式Linux,相对应用比较广,也相对最容易免费获得,包括相关开发环境和工具,所以建议好好去学习嵌入式Linux开发。

3.最好去买个开发板。我之前用过的,觉得还行的有:

TQ2440

你可以选个,配置稍微高点的,比如:

tq6410 v3开发板 4.3寸LCD套装

 

【其他的嵌入式相关教程】

嵌入式开发,涉及太多内容,以后会陆续写相关的教程的。

暂时已有的,和嵌入式有关的教程已有:

(先看这几个)

交叉编译详解

http://www.crifan.com/files/doc/docbook/cross_compile/release/htmls/

GNU Binutils详解

http://www.crifan.com/files/doc/docbook/binutils_intro/release/htmls/

 

(下面内容你暂时都不需要看,等你接触到对应的知识后,才需要去看)

在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)

http://www.crifan.com/files/doc/docbook/runtime_upgrade_linux/release/htmls/

Linux MTD下获取Nand flash各个参数的过程的详细解析

http://www.crifan.com/files/doc/docbook/nand_get_type/release/htmls/

如何在Linux下写无线网卡的驱动

http://www.crifan.com/files/doc/docbook/linux_wireless/release/htmls/

Uboot中start.S源码的指令级的详尽解析

http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/htmls/

【详解】如何编写Linux下Nand Flash驱动

http://www.crifan.com/files/doc/docbook/linux_nand_driver/release/htmls/

【详解】中断相关的知识

http://www.crifan.com/files/doc/docbook/interrupt_related/release/htmls/

【详解】嵌入式开发中固件的烧录方式

http://www.crifan.com/files/doc/docbook/firmware_download/release/htmls/

现场总线Fieldbus简析

http://www.crifan.com/files/doc/docbook/fieldbus_intro/release/htmls/

详解ARM的AMBA设备中的DMA设备PL08X的Linux驱动

http://www.crifan.com/files/doc/docbook/dma_pl08x_analysis/release/htmls/

crosstool-ng详解

http://www.crifan.com/files/doc/docbook/crosstool_ng/release/htmls/

ARM与MIPS的详细对比

http://www.crifan.com/files/doc/docbook/arm_vs_mips/release/htmls/ch01_reduced_instruction_set.html

USB基础知识概论

http://www.crifan.com/files/doc/docbook/usb_basic/release/htmls/

如何实现Linux下的U盘(USB Mass Storage)驱动

http://www.crifan.com/files/doc/docbook/usb_disk_driver/release/htmls/

USB HID Learning Record

http://www.crifan.com/files/doc/docbook/usb_hid/release/htmls/



2 Thoughts on “【整理】类比解释:嵌入式开发需要掌握哪些知识

  1. 文中说到木工的学习只是为了做了瓦匠,这样的比喻是不是可以说明,对不同的嵌入式软件学习的代价大于收获。

  2. 对于嵌入式刚入门的我,真的很有帮助

发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量