为什么想写这个帖子
只要提到嵌入式,一般码农心里就会产生两种想法:一种是“嵌入式系统特别简单,学51单片机的时候,也就是说一个星期的事情”;另一种想法是“嵌入式太难了,Linux操作系统特别复杂就不说了,还有各种各样的协议栈、算法等,当客户提到一个新的需求的时候,那改代码的酸爽,简直了”
确实,不同层次的嵌入式工程师对嵌入式的理解都不一样,特别的,越是初级的程序员,越感觉嵌入式简单,反而是越是老鸟,越是感觉嵌入式的复杂与庞大。
我也在这个行业摸打滚爬好几年的人,再加上大学时期学习的四年,到现在为止整整十年了,从刚开始学C语言,然后2天入门51单片机,一直到后来工作的时候做产品,玩蓝牙协议栈,真心感觉,这个行业简直就是一个大水坑:越走的远,越感觉水的深,有时候深度简直是断崖式的。
老鸟肯定深有感触,我们掌握C语言语法,了解各种各样单片机的外设用法及外围电路芯片的用法,那只是做出产品的最基本的一步,真正做的时候,各种细节都要考虑,我在这里举几个常见的问题:
1.啥叫堆、栈、队列、链表?他们是做什么用的?或者说为啥牛X的协议栈,通篇都是指针在那乱跳?
2.各段代码有没有容错机制,万一这边出现问题,代码应该执行什么比较合适?
3.辛辛苦苦写的外设驱动,如果换个处理器能不能直接使用?
4.为什么自己写的代码就像乱麻一样,没有一点逻辑顺序?为什么客户改一个需求我的程序就要推到重做?
5.花了好久做出的产品,为什么在测试那一步就过不去,是测试人员手臭吗?
6.产品做好了也卖出去了,但是为啥客户反馈的问题辣么多?
……
我这里也就是说提到一些很基础的问题,初学者肯定暂时还感受不到其中的痛苦,因为他们只关心的如何把当前的功能实现了,至于说有什么有效率的算法、程序代码的逻辑性之类的,根本不在关心的范围之内。不信的话可以尝试一下如下这个问题:如何把用字符串写出来的数学式子进行计算,比如把字符串“(1+3)5/10[5+7*(51-2)]"这个式子的值计算出来,别看这个题简单,可能有些老油条都很难很迅速的完成。
本系列帖子主要讲哪些内容呢
C语言用法篇
C语言基本语法谁都会用,但是可能有些程序员连指针都用的不熟练,这里将花大篇幅,把C语言的高级用法重新梳理一遍。然后再讲解一下协议栈常用的堆、栈、队列、链表。并在此基础上如何设计一个类型无关、检测方法无关、可移植的、接口简单的、面向对象的、可重构的算法库函数 。让这些常用的算法结构成为你自己的用的最顺手的利器。所以不要小看这一章节。
通讯篇
利用前边梳理的各种算法,来进行数据传输控制,你会发现事半功倍。这一篇着重介绍数据透传、脚本词法分析、AT指令分析、数据装载分析与加密等通讯行业中常见的一些功能,抛砖引玉,如果大家遇到此类相关的问题时,不至于两眼一抹黑,至少知道如何去分析,按照思路设计一个自己用到的算法。
硬件驱动篇
不同的处理器、不同外设都有不同的驱动方法,我们以键盘操作为例,如何设计一个健壮的、功能强大的、可移植的按键驱动库。同样的思路,我们可以拿数码管、点阵、LCD入手,设计一个同样接口的显示驱动库。
架构篇
架构篇是整本书的核心,介绍如何编写一些好维护、好移植的代码;如何设计程序流程让自己的代码逻辑清晰;如何对自己的代码进行分层,方便让多人对代码进行共同设计。这些都是作为项目经理所要考虑的内容。
测试篇
对于大多数程序员来说,喜欢先实现功能然后再整体测试,这种方法对于小程序系统来说确实效率特别高,但是对于大项目来说,这可能会出现灾难性的后果。这一篇我跟大家一块探讨一下嵌入式系统中的一些常用的测试方法,相信我,当你学会这些方法的时候,绝对会让你爱上这种高效率的测试利器的。
当然,内容也不少,我在这里先立下flag,我可保证不来能写完,时间对了,心情好了,就过来写一波,希望大家能来捧捧场。
网友评论