嵌入式系统工程师必须更聪明地工作

嵌入式系统中I2C HID驱动编写实战案例 深入剖析嵌入式系统中I2C与HID协议的融合应用,通过实际案例讲解I2C HID驱动的编写流程与调试技巧,帮助开发者掌握i2c hid设备在真实项目中的集成方法。 阅读详情

From:http://blog.mcuol.com/User/msnssmm/Article/7575_1.htm


就在不久以前,我房地产界的好朋友Kirk阅读了Tracy Kidder的《新机器的灵魂》。这本书讲述了Data General公司的工程师们如何在创纪录的时间里生产出Eclipse计算机。Kirk认为这是一本有趣的书,写得很好;但是对其中高压力的生产计划和精疲力竭的人们感到难过。他说了一句让我十分意外的话:“我无法相信Kidder所描述的这种高强度的日程安排是真的,没有人能长久地像那样工作。”

  我该怎样向一个与高科技领域没有任何联系的人解释,日程安排一直都是我们最头痛的事;在我的以及几乎所有我认识的工程师的职业生涯中,我们做的每一个项目的最后期限都是反复无常并且不可能完成的?最近几年,时间线收缩得更多,以今天的标准来看,Kidder的叙述甚至可以说是过于温和的。

  我由此想到,不是身在技术行业的人对于我们如何被不可能完成的最后期限逼得发疯也许真的一无所知。我们的行业很独特吗?还有多少其他行业也有这样长期、无情的压力以使事情做得更快?经常性的、没有报酬的加班是否也是其他经济部门的主题?

  较完善的项目管理软件于20世纪80年代出现。任何人都可以输入复杂的PERT(计划评审法)和甘特(Gantt)图。谁能成功地运用这些?我见过无数的开发人员试图围绕由市场设定的最后期限去建立时间表,他们希望这个时间安排具有可信度,但心里完全清楚是不可能的。我上中学的时候,耶稣会的教士们总在周五下午寄来成绩单,我们会从邮箱抽出成绩单,等到周一再重新塞回去,这样周末就不会被毁掉。这只是个孩子气的小花招,来推迟不可避免的事情;而这正是工程师们所做的。

  项目进度规划软件被宣传为原始手工工具的进步。现在,我们能更快速地制造错误数据。这就是计算机的美妙之处:以前需要几秒钟,甚至几分钟去犯一个错误,现在一秒钟内就可以产生几千个错误。

  人们写软件已超过50年之久,开发嵌入式系统也有30年了。这段时间里不变的是:日程计划紧缩下的性能提升。

  我们尝试处理3件相互冲突的事:不可能完成的日程、过多的预期功能、质量。如果去掉3条腿中的1条,这个项目就会失去价值。我们能够在出货时还存留很多bug吗?如果答案是“是”,那么按时交付将会非常容易。我们能忽视出货时间吗?如果拥有无限的时间,我们就能完善每项功能。

  这纠结的3者从一开始就成为隐患,而开发人员和管理人员却无法认识到矛盾所掩盖的事实。老板无一例外地想要所有的3条腿:按时交付、完美的质量、无穷的功能。但他不可能得到所有。

  合乎逻辑的想法是,我们必须强调功能,因为日程计划和质量问题总是没有商量余地的。利用需求淘汰法来识别并去除那些实际上并不需要的功能。用条理化的方式建立系统,这样即使落后于计划,仍然可以拿出能良好完成大多数重要功能的产品。

  当然,还有其他因素影响开发环境:资源。合用的工具、足够多的优秀开发人员、开明的管理团队,这些构成了我们要完成项目所需的基础架构。

  20世纪里我们学习如何建立嵌入式系统,但管理上却一直没有搞清楚资源在所开发项目中的恰当位置。工程项目通常被看作如同是在生产线上制造小玩意。需要更多产品吗?那就加入更多的人和更多的机器。但是这在软件工程领域根本行不通。

  Fred Books在他的《人月神化》(注:“人月”指一月人工)一书中展示了一个现象:给一个已经滞后的软件项目增加人员,这总会致使其更加滞后。两个开发人员之间只有单一的通信渠道,但当增加工程师时,备忘/会议/电子邮件的链接数量将随人数的平方增长。

  IBM发现,当项目的规模扩大,软件生产率由于同样的原因会明显下降。他们的调查显示代码产量(行/天)随着项目的扩大以数量级降低。

  Barry Boehm的建设性成本模型是最著名的软件规划预测模型,它也显示时间线比固件大小增长得快得多。将代码行数乘以2,则交付时间的增加将远远超过一倍。有时会更多。

  然而,当一个项目出现麻烦时,“再雇些人回来”似乎是普遍应用的管理格言。但就是不起作用。

  难道没有希望了么?我们的项目注定要失败?这种在《新机器的灵魂》中贴切描述的压力是否就是我们的命运?

  随着项目复杂度迅速增长,很明显,除非我们投身一种全新的开发模式,否则在过去的半个世纪里学到的关于软件工程的一切会让我们停滞不前、退化并最终失败。接受新思维模式(以及已被验证的旧模式)的那些公司将会获得成功。特别有两方面对新的理解十分关键,就是本文将要谈到的重用和工具。

工具

  20世纪40年代,所有的软件用机器码写成。50年代见证了首个编译语言:Fortran,几乎是在一夜之间提高了编程效率。使用Fortran的代价是更大、更慢的代码,这在当时被过多的工程师认为是不可接受的。但是那些接受了Fortran的人则证明是未来的先驱。

  今天,关于建模、C++和Java,我们听到了类似的争论。太慢、太大。但很明显,继续制造出几百万行的C程序不能解决任何问题;要赶上日益增长的产品需求必须提高生产率,而手工编写代码不再提供这样的提升。

  高级语言给予我们抽象以及在更高层次做项目的能力。抽象是未来的基础。我们再也不能去为比特和字节烦恼,因为这样的代价太高。不管你喜欢与否,Windows API的确给台式机开发者提供了大量丰富的资源。

  各种风格的工具能够使我们从较底层的细节抽象出来。第一个Fortran编译器,按今天的标准来看简单得可笑,给予了50年代的工程师们强大的武器。现在我们有了更多的选择。

  我们基本上接受编译器带来的额外开销。其他抽象能力更强的工具会带来更大的开销,但也带来了更快、更好的交付能力。建模工具,如UML,在一些领域以获得成功。太少的开发人员充分了解LabView和MATLAB,而它们是嵌入式领域很重要的角色。

  能够自动搜寻bug的工具将会进一步提高程序员的生产率。Coverity、Klocwork、Polyspace、Green Hills以及GrammaTech公司都在推动其寻找运行时问题的静态分析器。这些工具当然无法找到所有的bug,但它们提供了一项对付日程计划的武器,虽然到目前为止的市场渗透率还很低。

重用

  能让我们更快地写出更多代码的工具只是解决方法的一部分。显然,迫切需要一种新的重用模型。由百万行代码构成的产品,如果一行一行编译链接的话,那就太慢了。

  把软件工程中某些出色的新发展挡在门外,那么未来肯定只能属于重用。除非我们能讨来、借来、偷来或者买来大量的代码库,否则永远都得靠自己去写每一行。这是难以忍受的。

  重用不仅仅是把以前项目中的一些代码保存起来,而是要回收利用超过20%的固件。百万行以上规模的系统需要最大限度的重用。

  让我们定义几个专门用语来说明什么是重用,什么不是。软件回收是指利用并非为重用而设计的代码。即在旧资源中取出一部分并放入新的应用中。

  代码沿用是将固件从以前的项目移植到新项目中。和回收利用一样,这通常是一种有些鲁莽的源码使用。

  真正的重用是在建造系统的时候,一次建立一个组件,而不只是一行。这些块已明确定义,这样就不需要深入到内部来进行调整、调试或优化。Richard Selby发现,当移植旧代码到新项目时,如果超过25%被修改,就不能有效缩短项目时间。重用只有在大块作用时才最有效。

  一个程序包必须至少重用3次,才可看作是真正可重用。换句话说,域分析会比较难。我们还没有聪明到能真正理解应用程序的范畴。每个域要有自己独特的功能和特点;当我们在实际中,将代码在足够广范围的应用上使用过多次以后,才能将其通用化到真正可重用的程度。

  从这可以看出,重用是很昂贵的。我们花费了大量金钱来生产非常好的代码,但只有重用3次时才有所回报。我们中有多少人有足够的耐心和纪律性——以及时间——去写为了以后使用的代码?重用就像存折,如果你不向账户里存入足够多的钱,它就没有价值。你投资得越多,回报增长得越多。

  何时我们能够用购买的方式得到应用程序的大部分,而不是从零开始去写?软件IC是否真的可能?

  未来属于那些足够勇敢和聪明的人们,他们丢弃旧的思维模式,创造新的想法。我们将会找到利用以前写就的代码来设计产品的方法。这样做的好处显而易见,一行一行搭建系统的做法应该停止了。这也许意味着在低端应用中增加资源、存储和高端CPU;也许意味着新的工具。我们当然会用不同的方式设计系统。虽然一些实施细节目前还不明朗,但结果是非常清楚的。

  最大的改变将是我们的态度,以及我们开发产品的方式。总有一天,在管理部门的支持下,我们都会认识到2件重要的事:固件是最昂贵的东西、傻瓜都可以写代码。未来属于那些寻找产品开发更好方式的开发者,而不是编程高手。

  因此,我要对我的朋友Kirk和所有不是工程师的人说,我们的确在巨大的日程计划压力下工作。是你们的需求所致。你拥有的数字防抖双目望远镜、价值100美元的GPS、数字照相机,以及构成你的世界的所有其他电子产品,都来自这些在最后期限面前挣扎并开发出惊人廉价、可靠系统的工程师们。

  当你使用这些系统之一的时候,偶尔也想想我们吧!我们正坐在实验室里,在为下一个版本而工作。

  作者介绍:Jack Ganssle是嵌入式系统开发方面的授课者和顾问,在embedded.com的一次问卷调查中,被评选为嵌入式领域20年中最重要的人物之一;其他当选者包括Linux的创造者Linus Torvalds、Wind River公司的创始人Jerry Fiddler,以及Steve Jobs、Gordon Moore和GNU计划的发起人Richard Stallman。

嵌入式开发:嵌入式软件的未来—基于平台的开发 在项目启动后不久,工程师们不得不再次编写微控制器驱动程序,试图集成实时操作系统 (RTOS) 和第三方组件,从而深入研究细节。这些重复的项目任务会消耗时间、精力并抑制产品创新。一个有趣的解决方案开始出现,它可以帮助嵌入式开发人员——嵌入式系统平台。 阅读详情

相关推荐

PXD20优先级管理器:动态仲裁算法与嵌入式系统内存访问优化

在嵌入式系统与片上系统(SoC)设计中,总线仲裁是解决多主设备(如CPU核心、DMA控制器)竞争共享资源(如片外DRAM)的核心机制。其原理在于通过特定的算法,决定多个请求访问总线的顺序,以优化系统整体性能与实时性。传统的静态仲裁方案(如固定优先级或轮询)常面临低优先级设备“饥饿”或延迟不可预测的挑战。为此,现代微控制器(如恩智浦PXD20)引入了基于历史的动态优先级仲裁技术。该技术通过监控各通道近期的访问授权(ACK)历史,并利用可编程查找表(LUT)动态调整优先级,实现了“劫富济贫”式的公平调度。这种动

weixin_30363285的博客 260

单片机、嵌入式的大神都平时浏览什么网站?

浏览网站获取知识只是手段,真正的目的是提升技术能力,解决实际问题。在这个信息爆炸的时代,不是缺乏资源,而是如何有效利用资源。有目的地获取知识:知道自己需要什么,去哪里找,如何验证其正确性。系统性地组织知识:将零散的信息整合成体系化的能力。批判性地思考:不盲从任何资料,总是带着疑问和自己的判断。创造性地应用:将不同领域的知识融会贯通,创造新的解决方案。持续学习的习惯:技术日新月异,持续更新知识是唯一生存之道。最后,分享一个我的观察:真正的技术高手往往不是资料收集狂,而是善于提炼和专注的实践者。

码到成功 1770

卡拉曼滤波fortran代码实现

这里有一个完整的卡拉曼滤波代码,它是用fortran语言编写的!希望对你有用!

How to Become an Embedded Systems Geek, by Jack Ganssle

http://www.ganssle.com/startinges.htm Disclaimer: I love this field. It's a ton of fun. But jobs can be hard to find. Don't take the following as advice to toss your current career to the four winds ...

wzq2009的专栏 1735

Klocwork的一些介绍,

Klocwork 公司是软件静态分析领域技术和市场领先的厂商,全球拥有200 多个客户,其中许多是全球财富500 强中的公司。Klocwork 软件是Klocwork 公司基于专利技术分析引擎开发的,综合应用了多种近年来最先进的静态分析技术,是出色的软件静态分析软件

用ST25DV芯片+KiCad快速设计NFC标签天线:参数计算/脚本生成/实测优化全流程

本文详细介绍了使用ST25DV芯片和KiCad工具设计NFC标签天线的全流程,包括参数计算、脚本生成和实测优化。通过解析芯片等效工作原理和设计思路,帮助开发者避开常见陷阱,实现高效、可量产的天线设计。文章还提供了Python计算工具和KiCad自动化脚本,大幅提升设计效率和成功率。

jj890的博客 756

何小庆:AIoT时代嵌入式技术发展趋势

今天嵌入式系统无处不在,以至于我们几乎已经忘记什么是嵌入式系统,正如硅谷知名嵌入式专家Jack Ganssle说过一句话:在使用微处理器之前,考虑将计算机添加到产品中是不切实际事情。现在...

1285

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 421

深入系统编程:精选英文书籍指南

操作系统原理是计算机科学中非常重要的一部分,涉及如何管理硬件和软件资源,处理任务调度、内存管理、文件系统等。以下是相关的经典书籍:计算机体系结构涉及硬件的基本原理及其与软件的交互。底层编程则专注于如何直接与硬件打交道,如汇编语言、C语言和操作系统内部机制。并发编程和多线程编程是处理现代多核处理器环境下任务调度与并行执行的重要领域。以下书籍覆盖了从基础到高级的多线程技术。内核编程涉及操作系统内核的开发、维护和调试。以下书籍帮助理解Linux内核、驱动开发、系统调用等底层内容。计算机网络涉及计算机间通信的基础技

蜗牛沐雨 2073

在Modelsim中手动添加仿真库

缘由:在使用rom ip核的时候发现仿真需要altera_mf库的支持,而我的ModelSim没有这个库,所以想写一篇手动添加仿真库的文章方便自己以后使用:首先新建一个库,名字叫做altera_mf:然后编译对应的库文件:这里altera_mf.v文件是在quartus安装路径下quartus\eda\sim_lib文件夹下,点击编译后退出:最后在modelsim->example文件夹下可以找到编译好的库文件:

欢迎一起交流问题! 3402

一周涨十万星,GitHub 爆火的 REA 逆向工程到底是什么?

REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。

优快云zhizunbao的博客 1174

为什么开发人员对Ada不感兴趣?

 作者: Jack Ganssle Embedded.com (02/04/09, 01:00:00 美国东部时间)原文网址:http://www.embedded.com/212902632 一次又一次的民意调查显示,虽然过去了四分之一个世紀,Ada在嵌入式领域仍未赢得可观市场占有率。然而,数据明确显示,用Ada编写的程序比用C编写的程序缺陷更少,交付更快。 再有,A

logiciel的专栏 3437

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

y_u_yu_yu_的博客 1万+

入式系统工程师必须更聪明地工作

本文介绍了嵌入式开发系统工程师需要注意的事项,包括如何进行日程安排,如何进行有效的项目管理和计划、如何权衡日程、实现的功能和质量的平衡、以及采用更为强大的工具和重用代码来实现来实现有效的平衡管理。作者介绍:Jack Ganssle是嵌入式系统开发方面的授课者和顾问,在embedded.com的一次问卷调查中,被评选为嵌入式领域20年中最重要的人物之一;其他当选者包括Linux的创造者Linus

望都者 1644

使用ChIPSeeker进行ChIP-seq, ATAC-seq,cut&tag等富集峰的基因组注释

常规的下一代高通量测序(next generation sequencing, NGS)实验通常产生大量短片段(reads),通常我们需要将这些reads比对到参考基因组/转录组上,即将它们置于生物学上有意义的基因背景下,才能获得有意义的结果。一般我们认为会产生两种类型的数据(当然两者并无严格意义上的区分)

微生信 3318

AI大模型探索之路-认知篇1-全景透视:揭秘AIGC技术的进化之路

随着人工智能技术的突飞猛进,内容创作方式的发生了革命性的转变;从早期专业人员主导的内容生产,到现如今生成式人工智(AIGC)能创作时代;本篇文章主要讲解AIGC技术的演变历程。

寻道AI,探索AI无限可能! 1645

华为奋斗者协议:工程师视角下的职场选择与行业逻辑

在企业管理与激励机制设计中,如何平衡员工权益与组织效能是一个经典课题。其核心原理在于通过契约设计,将组织目标与个人利益进行有效捆绑,从而提升整体执行力与竞争力。从技术价值看,这种机制尤其适用于研发驱动型行业,它能精准筛选高投入意愿人才,并将资源集中投放以驱动创新突破。在应用场景上,常见于项目周期紧张、技术迭代快速的高科技领域,如芯片设计、通信系统开发等。本文以华为的“奋斗者协议”为具体案例,深入剖析了这种机制在硬件研发与集成领域的实践逻辑。协议通过“自愿放弃假期”换取高额奖金与晋升优先权,体现了激励前置与信

weixin_30367873的博客 358

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

一位车软工程师总结的年度嵌入式autosar行情与学习路线

摘要: 文章探讨了当前就业市场的严峻形势,尤其聚焦汽车嵌入式行业的内卷现状。通过应届生求职困境与早期从业者机遇的对比,揭示行业周期对个人命运的影响。作者指出,汽车行业已从红利期步入技术深度竞争阶段,AUTOSAR作为标准化架构成为核心竞争力,并详细拆解其三层逻辑(硬件抽象、基础服务、应用层)与学习路径(从CAN通信切入的五步法)。最后强调,在动荡时代中,技术深耕是抵御风险的关键——"时代的浪潮起起落落,只要手里有活,潮退时总能站在岸上"。全文以行业观察者视角,为迷茫的年轻人提供务实建议。

ACarSoft的博客 1196

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Phi-mini-MoE-instruct与Proteus联调:嵌入式系统仿真中的AI决策

本文介绍了如何在星图GPU平台上自动化部署Phi-mini-MoE-instruct轻量级混合专家(MoE)指令型小语言模型,实现嵌入式系统仿真中的AI决策。该方案通过将模型与Proteus仿真平台联调,使虚拟设备(如智能车)能够实时处理传感器数据并生成控制指令,显著提升开发效率并降低硬件验证成本。典型应用包括动态路径规划和异常状态检测,为嵌入式系统设计提供智能化解决方案。

weixin_42600407的博客 402

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

从番茄罐头到火箭航电:48小时极限调试中的嵌入式系统压力测试创新

在嵌入式系统开发中,传感器数据采集与处理是核心基础。其原理在于通过模数转换(ADC)将物理信号转换为数字量,再经由微控制器(MCU)运行算法进行解析,最终实现环境感知与控制决策。这项技术的价值在于为智能设备赋予精确感知物理世界的能力,广泛应用于物联网、工业控制及航空航天等领域。本文通过一个真实的火箭航电系统开发案例,生动展示了当专业压力测试设备突发故障时,如何运用第一性原理思维,巧妙利用玻璃罐头瓶、真空泵等日常物品,构建简易动态压力测试环境。该实践不仅成功验证了基于MEMS加速度计和数字气压传感器的核心算法

weixin_42546361的博客 556

破解工程师短缺困局:知识管理、工具链升级与学习型组织构建

在技术快速迭代的背景下,工程团队普遍面临人力资源短缺与效率瓶颈的挑战。其核心症结往往源于知识孤岛、工具链失配及技能更新滞后等系统性效率漏斗。从原理上看,高效能工程体系的构建需要从知识沉淀与复用、专业工具赋能以及持续学习机制三个支柱入手。其技术价值在于,通过将隐性知识显性化、用自动化替代重复劳动、以结构化学习应对技术债务,能够显著提升个体与团队的工程产出密度与质量。在应用场景上,这尤其适用于半导体、嵌入式系统、工业自动化等对经验依赖强、试错成本高的硬核技术领域。本文聚焦于通过打造活的知识库破除信息壁垒,升级计

weixin_33735077的博客 439
上一篇: 2008嵌入式设计调查:工程师时刻都在赶项目
下一篇: 嵌入式操作系统:将是嵌入组态软件的天下
Linux先生
博客等级 码龄20年 97粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值