
从单片机编程到操作系
统产生
nicekwell

从单片机编程到操作系统产生 nicekwell
前言
在 2011 年年初,笔者开始了单片机的学习,那时还是学生的我已经深深地被单片机吸
引。之后几乎放弃了学校课程,把所有精力都放在单片机上,参加了一些比赛,并取得不错
的成绩。
在开始工作之后,笔者从事单片机开发。在工作期间的高强度编程下,尝试了多种单片
机编程结构,对单片机各种结构的构建做了分析和总结,并深刻感受到操作系统产生的必要
性,对操作系统的探索有着越来越强的欲望。
在工作一段时间之后,笔者决定辞职。我不想凭仅有的那么一点单片机知识做一个嵌入
式码农,我渴望学习新的知识,掌握更高级的理论……好吧~至少做一个高级一点的码农。
而下一步的目标就是——linux。
但是笔者并没有直接进行 linux 的学习,因为操作系统对我来说还是个新事物,我甚至
不知道操作系统和单片机编程的最本质区别是什么,于是我想先搞清楚操作系统的本质原理
之后再进行 linux 的学习。笔者是物理学专业的,并没有系统学习过操作系统的概念。事实
上很多介绍操作系统的书籍也没有提到操作系统的底层实现,更没有介绍它与单片机编程之
间的关系。正如我在辞职的这段时间学完 uCOS 之后,对操作系统内核构建有了了解,但是
却仍然不知底层的任务切换是如何实现的。
However,经过两个月的学习,笔者终于清楚了操作系统的基本原理,也深刻体会到操
作系统和单片机各种编程结构的区别和联系。于是我想到把之前的单片机编程经验和近期对
操作系统的学习结合到一起,写一个从单片机到操作系统过渡的文章。一方面对单片机编程
结构做一个系统总结,另一方面对操作系统原理也进行一次整理。把操作系统和单片机编程
整合到一个知识体系中去,以便日后接受更多的操作系统内核知识。
本文分为两部分——“单片机编程篇”和“操作系统篇”。
单片机编程篇主要介绍单片机的各种编程结构,及其实现方法。是在假设已经可以驱动
单片机和各个模块的前提下,讨论如何整合和使用这些资源,以实现功能。在这一篇中,将
会看到程序主体逐渐从主函数转移到定时器,并且明确这些变化的目的。最后还会接触到面
向对象的程序设计方式,并体会这种方式带来的好处。
操作系统篇将会介绍操作系统的最基本的任务切换原理,以及操作系统是如何实现在单
片机编程中难以实现的功能的。并在 arm 平台上实现任务切换和简单的操作系统。至于更
复杂的操作系统内核构建本文没有多说,各种常用的操作系统内核都有很多资料可以查阅,
不过我会向大家推荐一本在网上公开但没有出版的书——《底层工作者手册之嵌入式操作系
统内核》,这本书详细阐述了操作系统内核的构建方法。
本文中提到的各个工程的代码作为附件可以从网上下载到:
http://download.csdn.net/detail/nicekwell/6668033
本文不足以成书,更适合作为分享经验的帖子,通过这样类似于书的排版可以使调理更
加清晰。作为一个高考语文不及格的人,希望文章的内容配得上这种比较正规的形式。
当然还请保留作者信息:
作者:nicekwell
主页:http://www.nicekwell.net
CSDN:http://my.csdn.net/nicekwell
1

从单片机编程到操作系统产生 nicekwell
目录
第一篇
单片机编程
第1章 主函数顺序调用 ..................................................... 2
1.1 主函数顺序调用的一般结构 .................................................................................... 2
1.2 主函数顺序调用结构的特点 .................................................................................... 2
第2章 界面函数结构 ....................................................... 4
2.1 界面函数一般结构 .................................................................................................... 4
2.2 更高的角度分析这种结构 ........................................................................................ 5
第3章 定时器分配任务 ..................................................... 8
3.1 用界面函数构成的基础框架 .................................................................................... 8
3.2 结合定时器编程分析 ................................................................................................ 9
3.3 任务分割 .................................................................................................................. 11
3.4 定时器分配任务程序结构总结 .............................................................................. 12
第4章 占用式与非占用式程序结构分析 ...................................... 14
4.1 什么是占用式程序 .................................................................................................. 14
4.2 占用式程序的缺点 .................................................................................................. 14
4.3 对占用式程序的改造 .............................................................................................. 15
4.4 改造的本质 .............................................................................................................. 16
4.5 非占用式程序结构的优势 ...................................................................................... 17
4.6 非占用式程序的一般结构 ...................................................................................... 17
4.7 吐槽.......................................................................................................................... 18
第5章 定时器执行任务 .................................................... 19
5.1 定时器执行任务的程序结构 .................................................................................. 19
5.2 定时器里面任务函数的特点 .................................................................................. 20
5.3 过程任务的定时器化 .............................................................................................. 21
5.4 定时器执行任务程序结构总结 .............................................................................. 25
5.5 我们追求的是什么 .................................................................................................. 25
第6章 面向对象思想+事件驱动结构 ......................................... 27
6.1 对象和事件 .............................................................................................................. 27
6.2 C 语言对一个对象的封装 ........................................................................................ 28
6.3 事件分配机制 .......................................................................................................... 31
6.4 系统层构建 .............................................................................................................. 33
6.5 库函数 ...................................................................................................................... 33
第二篇 操作系统
第7章 为什么要有操作系统 ................................................ 35
第8章 任务切换的具体工作 ................................................ 36
8.1 CPU 工作原理 ........................................................................................................... 36
8.2 任务切换做的事 ...................................................................................................... 38
第9章 在s3c6410上实现任务切换 ........................................... 39
9.1 了解 s3c6410 的寄存器 .......................................................................................... 39
9.2 要用到的几条汇编指令 .......................................................................................... 41
2

从单片机编程到操作系统产生 nicekwell
9.3 在 s3c6410 上实现任务切换 .................................................................................. 45
9.4 在 s3c6410 上实现简单操作系统 .......................................................................... 46
参考文献 ................................................................ 52
3

从单片机编程到操作系统产生 nicekwell
第一篇
单片机编程
1