《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——01-05 基本职能:老鸟也曾是菜鸟

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

本节书摘来自异步社区《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》一书中的第1章,第01-05节,作者 邱毅凌,更多章节内容可以访问云栖社区“异步社区”公众号查看。

01-05基本职能:老鸟也曾是菜鸟

PM:“请进!这是我们的实验室,该有的设备一应俱全,以后你应该会常常待在这里,这是示波器,如图1-17所示,在学校用过吗?那边拉了一堆线到板子上的是逻辑分析仪。”

菜鸟:“上实习课时曾经看过,但好像和你们的不一样,学校的仪器都很旧。哇!你们的还是彩色的!”

screenshot

PM:“就是没用过啰!无妨,这很简单,以后我们会教你使用的。还有,你看一下,这是我们目前产品的电路图1,如图1-18所示。”

菜鸟:“好像很复杂,我一看这个东西就头大,密密麻麻的谁看得懂?我除了要用这些测量仪器外,也需要会看原理图?”

PM:“是啊!不然你怎么写驱动程序?”

菜鸟:“不懂!我之前用过微软的DDK写过一个USB设备的驱动程序,也没用过这些东西啊。”

PM:“应该这么说,驱动程序也是分种类与层次的。我来谈谈你在Microsoft DDK上做的驱动程序,首先已经确认硬件是OK的,再来基于微软已经成熟的驱动程序平台来开发。而嵌入式系统工程师在开发驱动程序的状况通常是从无到有的,更不好的消息是,开发初期硬件设计还没确定,我们的固件工程师通常还要协同硬件工程师一起帮硬件板子调试。在这样的状况下,你不测量信号,怎么知道LCD的Framerate(如图1-19所示)是否符合日本市场的70 Hz要求?怎么知道键盘的反应Timing是对的?怎么知道某个芯片的电源开关已经打开,并已开始运行?除此之外,有时还必须同时测量多个信号间的关系,特别是在调试的时候,如图1-20所示。

screenshot

测量信号可以让固件工程师知道目前硬件的状况,写一堆驱动程序的目的不就是为了驱动并控制硬件吗?不会有人这么优秀或运气那么好,程序写完,一执行就OK了,如果你要调试,怎么可能自己不去测量信号?总不可能要我派个硬件工程师给你当助手吧!”

screenshot

screenshot

菜鸟:“嗯,我可以理解用示波器测量信号确实是固件工程师必备的技能之一,那原理图呢?”

PM:“你不看原理图,怎么知道要测哪里,而且我是说固件工程师必须会‘看’原理图,我可不放心让你来‘设计’原理图,电路设计是硬件工程师的工作。嵌入式系统开发工程师必须“多才多艺”的另一个原因,是为了提升自己的工作效率,项目中其他人都很忙,我们不希望软件工程师遇到了简单的硬件问题就停下来等待硬件工程师的帮忙。而且你看,那位在改驱动程序的是位硬件工程师,而那位软件工程师居然也学会了拆换芯片。

年轻人多学一点有好无坏,久而久之,你会更了解这个业界的生态,而不是只懂软件或写程序的事情,懂吗?”

菜鸟:“我很有兴趣学习新的知识,也愿意接受挑战,但还是有点怕……”

PM:“我已经说过很多次了,别担心,我们会培训你的。以下是我认为要成为一个优秀的嵌入式系统软件开发者所必须具备的基本职业技能。”

  • 要会写程序,尤其是C语言,而且程序必须精简有效率
  • 数据结构与算法
  • 完全了解计算机系统的运行方式
  • 操作系统的概念
  • 懂得系统的整个架构,包含电源管理等
  • 必须了解硬件设计的精神与架构,要能看得懂原理图
  • 基本测量仪器(电表、示波器等)

笔者遇到过许多博学多闻,看起来什么都懂的高手,其中有位高手令人印象深刻。他主要的工作是设计CPU,当该CPU准备推广上市前,他会帮忙设计评估板(或实验板)的原理图2,如果有空的话,他也会自己布局评估板线路,当评估板洗回来后,他会亲自验证,焊零件也都自己来,接下来还要写程序验证。他们公司提供给客户的评估板和示例代码都出自他一人之手,而他居然还是CPU的设计者!等到实际深交之后,才讶然发现他并非信息电机本科毕业生,本身是数学系毕业,在当了一段时间的中学老师后,才“转战”到信息界。

笔者提这个例子并非鼓励你要做一个通才,其实就在某个领域内出类拔萃也很好,毕竟这是一个精细分工的世界。笔者要点出的是,知识工作者必须放开心胸,只要是对工作或者对达成任务有帮助的,软件工程师不要排斥去学硬件的知识或技能,硬件设计者亦然。笔者常常听到这样的对话。

硬件工程师:“我觉得你们会写程序好厉害,想要什么功能改一下就好,那么复杂的程序是怎么写出来的?”

软件工程师:“我觉得你们可以做出一台实体的机器才厉害,什么电阻、电容的,我一个都搞不懂,那个原理图密密麻麻比我们程序复杂多了!”

笔者会给这两位嵌入式系统开发工程师一人一句建议:

软件工程师硬起来!

硬件工程师软下去!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
存储 监控 数据库
Django 后端架构开发:高效日志规范与实践
Django 后端架构开发:高效日志规范与实践
69 1
|
1月前
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
65 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
10天前
|
监控 开发者
鸿蒙5.0版开发:使用HiLog打印日志(ArkTS)
在HarmonyOS 5.0中,HiLog是系统提供的日志系统,支持DEBUG、INFO、WARN、ERROR、FATAL五种日志级别。本文介绍如何在ArkTS中使用HiLog打印日志,并提供示例代码。通过合理使用HiLog,开发者可以更好地调试和监控应用。
49 16
|
1月前
|
开发框架 缓存 安全
开发日志:IIS安全配置
开发日志:IIS安全配置
开发日志:IIS安全配置
|
1月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
38 1
|
3月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
131 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
3月前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录是一个重要而复杂的问题。
微信小程序作为业务拓展的新渠道,其全栈开发涉及前端与后端的紧密配合。本文聚焦小程序开发中的异常处理与日志记录,从前端的网络、页面跳转等异常,到后端的数据库、API调用等问题,详述了如何利用try-catch及日志框架进行有效管理。同时强调了集中式日志管理的重要性,并提醒开发者注意安全性、性能及团队协作等方面,以构建稳定可靠的小程序应用。
66 1
|
3月前
|
人工智能 Java Spring
Spring框架下,如何让你的日志管理像‘AI’一样智能,提升开发效率的秘密武器!
【8月更文挑战第31天】日志管理在软件开发中至关重要,不仅能帮助开发者追踪问题和调试程序,还是系统监控和运维的重要工具。在Spring框架下,通过合理配置Logback等日志框架,可大幅提升日志管理效率。本文将介绍如何引入日志框架、配置日志级别、在代码中使用Logger,以及利用ELK等工具进行日志聚合和分析,帮助你构建高效、可靠的日志管理系统,为开发和运维提供支持。
64 0
|
3月前
|
JavaScript 开发工具
Electron 开发过程中主进程的无法看到 console.log 输出怎么办
Electron 开发过程中主进程的无法看到 console.log 输出怎么办