课程推荐:Hacker Tools

Hacker Tools 是 MIT 的一系列讲座,介绍了在软件开发等场景中,能够大幅度提升效率的工具,例如 Shell 脚本、纯文本编辑器、版本控制系统等。

虽然对于课程中的大部分内容,很多人都应该或多或少的接触过,但是通过这门课程,能将这些知识系统的整理下来,从而在今后遇到问题时,能够意识到需要使用哪些工具,并主动尝试去使用。所以,如果想要进一步提升自己在电脑使用、软件开发方面的效率,推荐大家学习一下这一系列课程。

在我学习 Hacker Tools 之后,通过本文以思维导图的形式整理了课程的主要内容,方便进行查漏补缺和针对性的学习。

思维导图:Hacker Tools 简介
继续阅读“课程推荐:Hacker Tools”

Arduino Bootloader 程序下载协议

单片机通常通过编程器来下载程序。而 Arduino 中有一小段 bootloader 程序,在复位的时候运行,可以通过串口接收程序并写入单片机,因此可以不使用额外的编程器,直接通过串口下载程序。

前段时间,在为 AirTerminal 增加 XMODEM 协议的支持后,打算在下一个版本增加 Arduino 程序下载功能。所以先提前了解一下 Arduino Bootloader 使用的程序下载协议,并通过本文整理相关知识。

文章仅提供了解这些协议所需要的链接,对于协议的具体内容不再过多描述。文章内容将会根据自己的进一步了解不断更新。

Arduino 程序编译后的 HEX 文件,能被 Vim 正确识别并进行语法高亮
Arduino 程序编译生成的 HEX 文件,能被 Vim 正确识别并进行语法高亮
继续阅读“Arduino Bootloader 程序下载协议”

Stanford CS140e 学习笔记 (1):Rust 基础、LED 闪烁

CS140e 是 Stanford 的一门操作系统课程。与其他操作系统课程相比,该课程使用现代的程序设计语言 Rust 来编写实验代码;且所有代码运行在 Raspberry Pi 3 上,通过真实硬件进行实验,学习起来应该更有乐趣。

目前有进一步熟悉操作系统基础知识的想法,而且手上刚好有一块正在吃灰的 Raspberry Pi,所以打算从这门课开始学习。

本文主要记录 Assignment 0: Blinky 的学习经过。

继续阅读“Stanford CS140e 学习笔记 (1):Rust 基础、LED 闪烁”

一道智力题

最近在同学的 QQ 空间上,发现了这样一道智力题:

有一条河,河边有一个猎人牵着一头狼,一个男人带着两个小男孩,还有一个女人带着两个小女孩。
如果猎人离开,狼就会把所有人吃掉。
如果男人离开,女人会把两个小男孩掐死。
如果女人离开,男人会把两个小女孩掐死。
河里有一条船,船上只能乘坐两人(狼算一人),只有猎人、男人、女人会划船。
如何使他们全部过河?

看到这道题,首先想到的是农夫过河问题。既然这两个问题十分相似,那我就尝试按照农夫过河问题的思路,通过程序来找出该题的解。

继续阅读“一道智力题”

2015 电赛风力摆题:我的方案

2015 年全国大学生电子设计竞赛刚刚结束。我们组选择了 B 题:风力摆控制系统。题目要求如下:

一长约 60cm~70cm 的细管上端用万向节固定在支架上,下方悬挂一组 (2~4 只) 直流风机,构成一风力摆,如图 1 所示。风力摆上安装一向下的激光笔,静止时,激光笔的下端距地面不超过 20cm。设计一测控系统,控制驱动各风机使风力摆按照一定规律运动,激光笔在地面画出要求的轨迹。

趁这段时间,整理一下我们组的方案。

继续阅读“2015 电赛风力摆题:我的方案”

有限状态机在单片机编程中的应用

在单片机编程中,如果在不使用操作系统的情况下同时执行多个任务,可能会遇到下面这些情况:

  • 一个任务的执行时间过长,导致其他任务无法及时执行
  • 在一些任务中大量使用 delay() 等函数进行软件延时,这些延时函数占用过多时间,影响其他任务的执行
  • 一些复杂任务的程序逻辑不清晰,不便于以后对程序进行维护,或添加新功能

本文介绍的有限状态机,可以做到将一个耗时较长的复杂任务分解为多个简单任务,同时使代码逻辑更加清晰,从而解决上述问题。

目录:

继续阅读“有限状态机在单片机编程中的应用”