首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-12-11 
从单片机编程到操作系统产生以前对单片机编程做过一些零散的总结,近两个月又学习了一下操作系统,对操作系

从单片机编程到操作系统产生
以前对单片机编程做过一些零散的总结,近两个月又学习了一下操作系统,对操作系统原理和实现有了初步了解。所以就想到写一篇长文总结,系统总结一下单片机编程和操作系统原理,作为一个从单片机编程到操作系统的过渡文章。
本文介绍了各种单片机编程结构,可以算是本人单片机编程的一点小小的经验。从这些单片机编程结构的不断变化中逐渐过渡到操作系统,并在s3c6410上一步一步实现一个小操作系统。
一开始想要作为一个帖子分享的,但是内容太多,所以做成了一个PDF文件,看上去比较正规,调理也清晰一点,但是内容也就停留在帖子的水平。希望能给从单片机往操作系统过渡的童鞋带来一点帮助,正如我学操作系统时也看了别人的文章一样。
文章的PDF文件可以从 http://download.csdn.net/detail/nicekwell/6671759 或者 http://pan.baidu.com/s/1elUFv 下载到。
以下是文章的前言和目录。


前言
在2011年年初,笔者开始了单片机的学习,那时还是学生的我已经深深地被单片机吸引。之后几乎放弃了学校课程,把所有精力都放在单片机上,参加了一些比赛,并取得不错的成绩。
在开始工作之后,笔者从事单片机开发。在工作期间的高强度编程下,尝试了多种单片机编程结构,对单片机各种结构的构建做了分析和总结,并深刻感受到操作系统产生的必要性,对操作系统的探索有着越来越强的欲望。
在工作一段时间之后,笔者决定辞职。我不想凭仅有的那么一点单片机知识做一个嵌入式码农,我渴望学习新的知识,掌握更高级的理论……好吧~至少做一个高级一点的码农。而下一步的目标就是——linux。
但是笔者并没有直接进行linux的学习,因为操作系统对我来说还是个新事物,我甚至不知道操作系统和单片机编程的最本质区别是什么,于是我想先搞清楚操作系统的本质原理之后再进行linux的学习。笔者是物理学专业的,并没有系统学习过操作系统的概念。事实上很多介绍操作系统的书籍也没有提到操作系统的底层实现,更没有介绍它与单片机编程之间的关系。正如我在辞职的这段时间学完uCOS之后,对操作系统内核构建有了了解,但是却仍然不知底层的任务切换是如何实现的。
However,经过两个月的学习,笔者终于清楚了操作系统的基本原理,也深刻体会到操作系统和单片机各种编程结构的区别和联系。于是我想到把之前的单片机编程经验和近期对操作系统的学习结合到一起,写一个从单片机到操作系统过渡的文章。一方面对单片机编程结构做一个系统总结,另一方面对操作系统原理也进行一次整理。把操作系统和单片机编程整合到一个知识体系中去,以便日后接受更多的操作系统内核知识。

本文分为两部分——“单片机编程篇”和“操作系统篇”。
单片机编程篇主要介绍单片机的各种编程结构,及其实现方法。是在假设已经可以驱动单片机和各个模块的前提下,讨论如何整合和使用这些资源,以实现功能。在这一篇中,将会看到程序主体逐渐从主函数转移到定时器,并且明确这些变化的目的。最后还会接触到面向对象的程序设计方式,并体会这种方式带来的好处。
操作系统篇将会介绍操作系统的最基本的任务切换原理,以及操作系统是如何实现在单片机编程中难以实现的功能的。并在arm平台上实现任务切换和简单的操作系统。至于更复杂的操作系统内核构建本文没有多说,各种常用的操作系统内核都有很多资料可以查阅,不过我会向大家推荐一本在网上公开但没有出版的书——《底层工作者手册之嵌入式操作系统内核》,这本书详细阐述了操作系统内核的构建方法。


目录
第一篇 单片机编程
第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
9.3 在s3c6410上实现任务切换45
9.4 在s3c6410上实现简单操作系统46
[解决办法]
编程后总结,这是个好习惯,编程后思考,这样才能提高
[解决办法]
在你的PDF的前半部分,你在讨论关于单片机,主要的思想是关于过程任务的定时器化
这个思想真的是很高明的。
我最近也在思考这个问题。
看来单片机做多了自然就会想到这条路上。
后半部分,你把思想提高到OS的角度,个人认为有点跑偏了,有点过度了。
古人云过尤不及。
过程任务的定时器化其实是可以考虑用形式化的方法直接表达到程序结构中去的,不必显式地引入OS。
而引用OS对整个系统的负担太重了,大多数项目中是不能承受之重。
我在考虑的是程序编写仍然按占用式,这是一种最自然的思考方式,由于占用式与最终的定时器化式本质上是等价的,所以必然有一种形式化方法直接转化之为后者,
也就是说,编程时,我们用最接近人脑的办法,后面的工作全推给计算机去做。最终得到形式上最恰当的一个等价程序。
个人认为,OS不是必需存在的,但OS的任务是必然需要解决的。我们应集中精力在这必须解决之任务本质上,而不要拘泥于OS这个外在形式
[解决办法]
谢谢分享,对于单片机编程来讲,带不带操作系统还是要看具体的需求。

热点排行