欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 03:14:13 责任编辑: Author_N1

 

从单片机编程到操作系统产生
以前对单片机编程做过一些零散的总结,近两个月又学习了一下操作系统,对操作系统原理和实现有了初步了解。所以就想到写一篇长文总结,系统总结一下单片机编程和操作系统原理,作为一个从单片机编程到操作系统的过渡文章。
本文介绍了各种单片机编程结构,可以算是本人单片机编程的一点小小的经验。从这些单片机编程结构的不断变化中逐渐过渡到操作系统,并在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这个外在形式
--参考方法--
谢谢分享,对于单片机编程来讲,带不带操作系统还是要看具体的需求。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:13
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19874/
本文WWW.DOC100.NET DOC100.NET版权所有。