1992年,那是一个春天,有一位白叟,在我国的南海边写下诗歌,其心也比金坚,其字也动人心弦,其中有云:一手抓经济建造,一手抓精神文明建造,两手都要抓,两手都要硬。多年下来,勤劳、务实的我国公民在邓公嘱托之下,专心致志搞建造,一心一意谋开展,在大力开展经济、满意公民对物质日子的夸姣等待之余,也以各种低俗网络小说、无脑商业大片、文娱至上的各大卫视节目丰厚着人们的精神日子。除了国家和社会的开展,两手都要抓,两手都要硬的准则也以其颇合“不偏不倚”,在各个领域发挥着重要的指导作用,比方笔者,就在多年职业生计的风风雨雨中,悟出想干好嵌入式软件工程师,软件、硬件两手都要硬的经历领会。
硬件搭台 软件唱戏
嵌入式软件开发和PC软件开发多有不同,究其根源,个中差异首要归因于硬件渠道的差异。在Wintel联盟多年的绞杀下,PC软件就一个硬件渠道,不管多么花哨的PC软件,也都只是在x86这个大观园中打散步。多年来用情专注,两两不相生厌,洒家也是较为敬服PC软件工程师的。不过嵌入式软件就不同了,且看嵌入式体系的界说:
“以运用为中心、以计算机技术为根底,软、硬件可裁剪,适应于运用体系对功用、可靠性、本钱、体积、功耗等方面有特殊要求的专用计算机体系。”
能够说,嵌入式体系是硬件搭台,软件唱戏,软件和硬件面向特定运用,高度可定制,一同也高度交融,正所谓我中有你、你中有我,你侬我侬、难分难解。硬件搭欠好,软件跑不了,所以在开发软件之前一般要先调好电路,恰似把舞台搭好一般。软件不能跑,硬件瞪眼了,没有功用的硬件便是女娲娘娘手中的小泥人,软件就好像那一口仙气,没有这口仙气,硬件的国际便是六合玄黄、国际洪荒,女娲娘娘吹了这口仙气,硬件的国际才大梦初醒,挥洒张扬。
搭帮结伙 地老天荒
听说恋爱中的情侣、婚姻中的两口子都有那么几天,张狂地想要掐死对方,心情曩昔,又会牵起手一同走向前方。其实,在日常开发作业中,嵌入式硬件工程师和软件工程师有时也会吵得没法解开,大有势不两立之势,洒家多年作业生计,一贯以和为贵,有时也会失了方寸吼上一番,可是,好在嵌入式工程师是国际上最单纯、最心爱的集体,心肠单纯的软件工程师和硬件工程师大多数时刻都是相敬如宾、卿卿我我,并在多年的磨合中愈加协作默契,志同道合。
软件工程师和硬件工程师之间的协作就像搭帮结伙,一同说相声。相声艺人常常把一句话挂在嘴边:“三分逗,七分捧”,可是听说分账时又会没皮没脸地四六开(逗哏拿六成,捧哏拿四成),在嵌入式这个职业也有一个不成文的说法,硬件和软件三七开,更有甚者(肯定是一小撮自负过头的软件工程师)以为软件能占到80%的作业量。洒家并不附和这种歧视性的分法。世尊当年于菩提树下,夜瞩明星,悟道成佛,初成正觉已,叹曰:“奇哉,一切众生皆有如来才智德相,但以梦想、别离、执着不能证得。”人呐,原本可享受无边清凉,却由于头上安头、妄生别离,轮回于热恼之中不可自拔。
可是话说回来,做为道道地地的凡夫众生,做为一名略懂硬件但专职干软件的嵌入式软件工程师,我仍是要站在自己这个小集体中别离一番的。
嵌入式软件工程师是一个荣耀而崇高的人物,他单纯而内敛,视功利如浮云,在日复一日的编码中挥洒芳华和热血。他使出浑身解数,将代码捧于掌心,精加工,细打磨,为的只是让寿数周期长的体系能够饱尝住年月的洗礼,而仍然光辉开放。或许在日常日子中他老实巴交、板滞迟钝,或许在社会外交中他懵懵懂懂、进退失措,可是,他是一个崇高的人,一个脱离了低级趣味的人,一个乐意把爱播撒到代码的六合中自得其乐的“大写的人”。
当然,物有千差万别,人分三六九等,超卓的工程师总是百里挑一,可遇而不可求。关于嵌入式软件工程师来说,窃以为,想要跻身于优异之列,他对硬件的了解程度至少需求到达半个硬件工程师的水平。
半个硬件工程师
嵌入式软件编程明显不同于PC软件开发,它和硬件密切相关。想写好嵌入式软件代码,就有必要了解清楚所运用MCU的硬件特性、各个外围电路和接口电路的原理。不只需深挖细究MCU内核架构的常识,是否支撑浮点处理器/DSP,是否支撑协处理器、指令数据缓存,还要了解MCU的编程模型、各种存储器的地址空间分配及其拜访功率怎么,在MCU之外,还有必要了解各种电路常识,什么地方需求上下拉,什么地方需求加滤波电路,什么地方有必要阻隔,哪里有必要加按捺器材,等等不胜枚举。
为什么需求了解到这种程度呢?
一来是软硬结合,更好地完结用户需求,比方输入捕捉,如果是经过上升沿或许下降沿捕捉,加了不合适的滤波电容会造成对沿的损坏,不加滤波电容就会受困于各种空间搅扰发生的杂波。假使硬件工程师搬来的是加了不合适电容的电路,搞得沿之间位宽失真,便会呈现数据不正常的偶发毛病,假使硬件工程师搬来的是不加电容的电路,搞得软件工程师有必要进行软件滤波,把代码搞得又杂乱又难解,你说这怨谁来着?
二来是便当定位Bug。爱因斯坦从前说过,“提出一个问题往往比处理一个问题更重要,由于处理一个问题或许仅是一个数学上的或实验上的技术罢了,而提出新的问题、新的可能性、重新的视点去看旧的问题需求有创造性的想象力,并且标志着科学的真实前进。”研究硬件电路能够协助软件工程师提出更多处理问题的思路,发现导致Bug的更多可能性。一般来说,当遇到Bug时,对硬件一知半解的软件工程师只在代码层面上打转转,根本不会在硬件方面提出问题,终究为了投合糟糕的硬件规划出别扭无比的代码,却不曾想,只需稍稍改动一下硬件规划,就能够轻松且高雅地完结代码规划。
三来,艺多不压身,求人不如求己。当咱们对硬件电路规划起了置疑,假使自己悄没声地拿起烙铁飞个线、换个元件,验证了自己的思路,这时直起腰版、拿着板子振振有词地去找硬件工程师,岂不是顺顺利利,又送顺水人情?假使直接拿着板子,心底发虚面上露怯地去找硬件工程师理论,一场唇枪舌战在所难免,凄风苦雨不说,到头来硬件工程师硬着头皮给你调调电路,真是处理了问题还好说,若是自己思路错了,那不是自找苦吃?上个班,挣点钱养家糊口罢了,当个老好人,和搭档其乐融融多好,吵来吵去,搞得那么辛苦,何须来着?
跋文
在嵌入式软件工程师的培育过程中,先搞个一两年硬件是很有必要的,笔者当年走的便是这么个路子,现如今尽管水平一般,可是相比较而言,仍是比那些“纯软”的工程师多了几分优势,首要体现在出了问题,思路愈加开阔一些,不会把嫌疑只是限制在代码上。反过来,其实硬件工程师也要多多少少懂些软件,不能只会连线,而要稍微考虑一下功用的详细完结。比方进行输入捕捉时,只顾及走线便当,随意接到MCU的IO口上,而不是专用的输入捕捉模块上,还不得把软件工程师逼疯喽?当然,闻道有先后,术业有专攻,也不是非得软硬通晓,只需求相互略懂,作业就会轻松愉快很多了!