FYI
下面这些书,是我作为一个 计算机科学与技术出身的嵌入式软件工程师,出于自身的兴趣爱好且为了更好和硬件工程师们协作,从自身的角度出发而搜集到的信息,仅供参考,不构成专业建议。同时,也希望有经验的嵌入式硬件工程师能给我和其他 对硬件感兴趣的嵌入式软件工程师 提供更专业和合理的建议,谢谢大家。
Embedded bsp developer enjoys thinking and hacking opensource and develop boards(NanoPi, LicheePi, RPi...)
正文开始前,先聊点非技术的东西,推荐2本生动有趣的书:
我想看这两本书原因是:Joel on Software 在一篇 给计算机系学生 的忠告文章里说,毕业之前你一定要修一门经济学课程,Joel( stackoverflow 的创始人 ) 的话在我心里有很重的分量,我愿意接受他的建议,甚至认为自己 应该在高中时 就阅读上面2本书。
这两本书在豆瓣上的评价极高:
一看到《经济学原理》这样的书名,我会立即把它归为异次元一类,碰都不会去碰,别说读它了,自从大学毕业后,对于任何此类教科书,我会毫不客气地说,滚!
这种情绪的对立既包含了对中国教育制度的控诉,又体现了对死读书无法改变命运的残酷现实的无奈。
工作约7到8年后,自我体会到和社会的逐渐脱节,这里不止是因为工作环境的隔离性和社交圈的狭窄,还有自身知识量的乏馈,光是义务教育和本科教育所建立的知识结构显然已经无法支撑起我的求知欲所对应的飞速发展的社会万物,可是学习从何开始呢?
话说到这里,志同道合的人应该知道怎么做了,我就不再讲废话了,下面回归到技术上。
昨天听到一个很有意思的说法:脚本猛于虎。
我非常认可这种说法,这里面有2个意思:
或许还能加一句:伴君如伴虎…
我本人非常喜欢 shell 脚本,因为它做事太简单粗暴了,适合用来实现 v0.01 版本原型,我甚至认为它很好地 辅助了软件设计。
接下来是主题,做嵌入式软件开发偶尔要收集和分析 log,有时为了格式化输出需要删除掉多余的空白行,我挑选了几个 简短且容易理解的 方法分享给大家。
本文概要:
前阵子工作上做了一些关于 ADC 的支持,由于现在 ADC 相关的支持都被移动到了 IIO (Industrial I/O) 子系统下,我查阅了一些关于 IIO 资料,包括书籍、文章、内核文档和代码。个人感觉最好的入门文章应该是 ST WiKi 网站上 的 IIO Overview(2019) 和 Analog Device Wiki 网站上的 Linux Industrial I/O Subsystem(2017),为了方便爱偷懒或者英文不好的小伙伴,我提炼了多篇文章的精华内容并在其基础上进行完善,尽量控制篇幅,希望能给大家提供一点小小的帮助。
正文目录:
1 | 1. 什么是 IIO 子系统? |
2 | 1.1 IIO 概述 |
3 | 1.2 IIO 相关的组件 |
4 | 2. IIO 功能特性 |
5 | 3. IIO 相关配置 |
6 | 3.1 配置内核 |
7 | 3.2 配置设备树 |
8 | 3.2.1 IIO providers |
9 | 3.2.2 IIO consumers |
10 | 4. IIO API |
11 | 4.1 用户空间 API |
12 | 4.1.1 4种接口 |
13 | 4.1.2 操作实例 |
14 | 5. 更多值得学习的知识点 |
15 | 6. 相关参考 |
写作目的:
看他人如何分析代码最关键的目的是了解别人是怎么思考和探索的,其次才是获取内容相关的知识点。即吃别人的鱼不如学别人怎么钓鱼。
本文是我学生时代留下的关于输入子系统的学习笔记,对我个人而言很有纪念意义,对初学者来说也许有一丢丢参考价值。
最近工作上需要驱动一些输入设备,不由得感慨:Input 子系统设计得真好,这么多年了 Input core 的设计和 API 可以认为是仅发生了察觉不到的变化,这就是驱动界的典范子系统啊。反过来想想,Input 子系统之所以这么经典,恰恰是因为Input device driver 的数量太多了,如果设计得不够好,那将是 Maintainer 们的噩梦(整日疲于修改成吨的Input device driver)。
Linux 内核/驱动开发并不是特殊的存在,它仍然属于软件开发,或许它有许多自己独有的软件设计模式,但是上层软件开发的很多原则和方法仍然是适用的,不展开来讲了,那样就扯太远了。
对于技术领域的知识点,我个人喜欢简单地划分为2类:
我判断一个知识点属于哪一类的主要依据有2点:
如果上述2点都满足,则我会认为这是基础类知识,属于可以长期投资的价值股;
典型的例如操作系统、数据结构、Linux环境编程、软件模式(设计模式、架构模式…)等我会归类为基础类知识;
而例如 Qt、Git、Docker、甚至各种编程语言(C、C++、Java、Python)等知识点我都会暂时归类为工具类。不要误会,这些都只是我个人的喜好,并没有要贬低你心爱的技术的意思,只要是你在工作里需要重度使用的技术,你都应该把它归类为基础类,以便提醒自己需要深耕该技术。
说了这么多,无非是想告诉你,我认为设计模式很重要,仅此而已。即便你从事的是底层软件相关的工作,你只用 C 语言进行开发,情况也是一样的。
这部分知识很重要,因为这里面的很多概念会出现在CPU手册和Codec手册里,所以了解这些基础知识是我们看懂手册的基本前提。我希望自己能不断地更新和完善这一块知识点,这篇文章会不定期更新。
相关参考:
参考:
https://www.altpress.com/news/entry/see_a_vinyl_record_at_1000x_magnification
http://www.programmersought.com/article/893420233/;jsessionid=789D1E9A94F935DE8460495507ABADFF
留声机是一款通过模拟信号记录、重现声音的机器,简单来说就是一种用来放送唱片录音的电动设备。
如何记录声音?
人发出声音—>振动膜振动—>探针振动,且在旋转的盘面刻下条纹
如何播放声音?
旋转唱片—>条纹带动探针振动—>带动振动膜振动—>发声
模拟信号记录音频的缺点
解决办法:改用数字化的方式记录声音;