嵌入式Hacker (es-hacker)

Embedded bsp developer enjoys thinking and hacking opensource and develop boards(NanoPi, LicheePi, RPi...)

0%

FYI

下面这些书,是我作为一个 计算机科学与技术出身的嵌入式软件工程师,出于自身的兴趣爱好且为了更好和硬件工程师们协作,从自身的角度出发而搜集到的信息,仅供参考,不构成专业建议。同时,也希望有经验的嵌入式硬件工程师能给我和其他 对硬件感兴趣的嵌入式软件工程师 提供更专业和合理的建议,谢谢大家。

阅读全文 »

一、高效地学习

推荐「费曼技巧」。

什么是费曼技巧?

如果有人用长篇大论跟你解释这个东西,那他实际上并不理解「费曼技巧」。

费曼技巧是一种「以教为学」的学习方式,能够帮助你提高知识的吸收效率,真正理解并学会运用知识。验证你是否真正掌握一个知识,看你能否用直白浅显的语言把复杂深奥的问题和知识讲清楚。

为什么它有效?

阅读全文 »

正文开始前,先聊点非技术的东西,推荐2本生动有趣的书:

  • 《经济学原理 宏观经济学》,曼昆,豆瓣评分,9.3 4945人评价
  • 《经济学原理 微观经济学》,曼昆,豆瓣评分9.6,1879人评价

我想看这两本书原因是:Joel on Software 在一篇 给计算机系学生 的忠告文章里说,毕业之前你一定要修一门经济学课程,Joel( stackoverflow 的创始人 ) 的话在我心里有很重的分量,我愿意接受他的建议,甚至认为自己 应该在高中时 就阅读上面2本书。

这两本书在豆瓣上的评价极高:

一看到《经济学原理》这样的书名,我会立即把它归为异次元一类,碰都不会去碰,别说读它了,自从大学毕业后,对于任何此类教科书,我会毫不客气地说,滚!

这种情绪的对立既包含了对中国教育制度的控诉,又体现了对死读书无法改变命运的残酷现实的无奈。

工作约7到8年后,自我体会到和社会的逐渐脱节,这里不止是因为工作环境的隔离性和社交圈的狭窄,还有自身知识量的乏馈,光是义务教育和本科教育所建立的知识结构显然已经无法支撑起我的求知欲所对应的飞速发展的社会万物,可是学习从何开始呢?

话说到这里,志同道合的人应该知道怎么做了,我就不再讲废话了,下面回归到技术上。

阅读全文 »

昨天听到一个很有意思的说法:脚本猛于虎

我非常认可这种说法,这里面有2个意思:

  1. 脚本的功能很强大,可以做很多事情,虽然不是最好的方式;
  2. 脚本很危险,很容易出错;

或许还能加一句:伴君如伴虎…

我本人非常喜欢 shell 脚本,因为它做事太简单粗暴了,适合用来实现 v0.01 版本原型,我甚至认为它很好地 辅助了软件设计

接下来是主题,做嵌入式软件开发偶尔要收集和分析 log,有时为了格式化输出需要删除掉多余的空白行,我挑选了几个 简短且容易理解的 方法分享给大家。

阅读全文 »

本文概要:

  • 一、安装 Qt 5.9
    • 1.下载链接
    • 2.安装 Qt5.9
    • Qt5.9 目录和文件说明
  • 二、创建第一个 Qt 程序
    • 1.启动 Qt Creator
    • 2.创建 Demo
    • 3.查看 Qt Creator 创建的文件
    • 4.查看运行效果
    • 5.查看编译过程
      阅读全文 »

前阵子工作上做了一些关于 ADC 的支持,由于现在 ADC 相关的支持都被移动到了 IIO (Industrial I/O) 子系统下,我查阅了一些关于 IIO 资料,包括书籍、文章、内核文档和代码。个人感觉最好的入门文章应该是 ST WiKi 网站上 的 IIO Overview(2019) 和 Analog Device Wiki 网站上的 Linux Industrial I/O Subsystem(2017),为了方便爱偷懒或者英文不好的小伙伴,我提炼了多篇文章的精华内容并在其基础上进行完善,尽量控制篇幅,希望能给大家提供一点小小的帮助。

Linux 驱动开发 / IIO子系统入门1

正文目录:

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. 相关参考

写作目的:

  • 整理一些 IIO 子系统的入门知识。
阅读全文 »

我发现自己无意间养成了每天慢跑的习惯

1. 为什么以前没法坚持每天慢跑?

  • 我早就认可了慢跑的好处,但是这几年来我始终没法做到坚持不懈地地每天去慢跑,我猜测这其中最大的原因可能是:跑步前和跑步时的痛苦 > 跑步后的快乐;

2. 为什么现在能坚持每天慢跑?

  • 最直接的原因是我改成开车上班了,这大大减小了跑步前和跑步时的痛苦;
  • 开车让我不用在跑步前先站立1小时的地铁;
  • 为了有廉价的停车位我必须早起,而早上公园里的温湿度非常适合运动;
  • 我在慢跑时养成了听书的习惯,听得入迷时我会忘记跑步这件事,因此少了一些疲劳感;
    阅读全文 »

看他人如何分析代码最关键的目的是了解别人是怎么思考和探索的,其次才是获取内容相关的知识点。即吃别人的鱼不如学别人怎么钓鱼。

本文是我学生时代留下的关于输入子系统的学习笔记,对我个人而言很有纪念意义,对初学者来说也许有一丢丢参考价值。

最近工作上需要驱动一些输入设备,不由得感慨:Input 子系统设计得真好,这么多年了 Input core 的设计和 API 可以认为是仅发生了察觉不到的变化,这就是驱动界的典范子系统啊。反过来想想,Input 子系统之所以这么经典,恰恰是因为Input device driver 的数量太多了,如果设计得不够好,那将是 Maintainer 们的噩梦(整日疲于修改成吨的Input device driver)。

Linux 内核/驱动开发并不是特殊的存在,它仍然属于软件开发,或许它有许多自己独有的软件设计模式,但是上层软件开发的很多原则和方法仍然是适用的,不展开来讲了,那样就扯太远了。

阅读全文 »

对于技术领域的知识点,我个人喜欢简单地划分为2类:

  1. 基础类
  2. 工具类

我判断一个知识点属于哪一类的主要依据有2点:

  1. 这个知识点是否经久不衰;
  2. 这个知识点是否没有替代品;

如果上述2点都满足,则我会认为这是基础类知识,属于可以长期投资的价值股;
典型的例如操作系统、数据结构、Linux环境编程、软件模式(设计模式、架构模式…)等我会归类为基础类知识;

而例如 Qt、Git、Docker、甚至各种编程语言(C、C++、Java、Python)等知识点我都会暂时归类为工具类。不要误会,这些都只是我个人的喜好,并没有要贬低你心爱的技术的意思,只要是你在工作里需要重度使用的技术,你都应该把它归类为基础类,以便提醒自己需要深耕该技术。

说了这么多,无非是想告诉你,我认为设计模式很重要,仅此而已。即便你从事的是底层软件相关的工作,你只用 C 语言进行开发,情况也是一样的。

阅读全文 »

这部分知识很重要,因为这里面的很多概念会出现在CPU手册和Codec手册里,所以了解这些基础知识是我们看懂手册的基本前提。我希望自己能不断地更新和完善这一块知识点,这篇文章会不定期更新。

相关参考:

  • <韦东山Android 视频教程> 第001节_声音的采集与存储
  • <深入理解Android内核设计思想> 第 13.1 章节

早期的留声机是如何工作的?

参考:
https://www.altpress.com/news/entry/see_a_vinyl_record_at_1000x_magnification

http://www.programmersought.com/article/893420233/;jsessionid=789D1E9A94F935DE8460495507ABADFF

留声机是一款通过模拟信号记录、重现声音的机器,简单来说就是一种用来放送唱片录音的电动设备。

如何记录声音?
人发出声音—>振动膜振动—>探针振动,且在旋转的盘面刻下条纹

如何播放声音?
旋转唱片—>条纹带动探针振动—>带动振动膜振动—>发声

模拟信号记录音频的缺点

  • 原始的唱片成为母盘,很珍贵,复制的唱片无法得到一模一样的条纹;
  • 不便于存储和传播;

解决办法:改用数字化的方式记录声音;

阅读全文 »