从单片机编程到操作系统产生nicekwell从单片机编程到操作系统产生nicekwell前言在2011年年初,笔者开始了单片机的学习,那时还是学生的我已经深深地被单片机吸引。之后几乎放弃了学校课程,把所有精力都放在单片机上,参加了一些比赛,并取得不错的成绩。在开始工作之后,笔者从事单片机开发。在工作期间的高强度编程下,尝试了多种单片机编程结构,对单片机各种结构的构建做了分析和总结,并深刻感受到操作系统产生的必要性,对操作系统的探索有着越来越强的欲望。在工作一段时间之后,笔者决定辞职。我不想凭仅有的那么一点单片机知识做一个嵌入式码农,我渴望学习新的知识,掌握更高级的理论……好吧~至少做一个高级一点的码农。而下一步的目标就是——linux。但是笔者并没有直接进行linux的学习,因为操作系统对我来说还是个新事物,我甚至不知道操作系统和单片机编程的最本质区别是什么,于是我想先搞清楚操作系统的本质原理之后再进行linux的学习。笔者是物理学专业的,并没有系统学习过操作系统的概念。事实上很多介绍操作系统的书籍也没有提到操作系统的底层实现,更没有介绍它与单片机编程之间的关系。正如我在辞职的这段时间学完uCOS之后,对操作系统内核构建有了了解,但是却仍然不知底层的任务切换是如何实现的。However,经过两个月的学习,笔者终于清楚了操作系统的基本原理,也深刻体会到操作系统和单片机各种编程结构的区别和联系。于是我想到把之前的单片机编程经验和近期对操作系统的学习结合到一起,写一个从单片机到操作系统过渡的文章。一方面对单片机编程结构做一个系统总结,另一方面对操作系统原理也进行一次整理。把操作系统和单片机编程整合到一个知识体系中去,以便日后接受更多的操作系统内核知识。本文分为两部分——“单片机编程篇”和“操作系统篇”。单片机编程篇主要介绍单片机的各种编程结构,及其实现方法。是在假设已经可以驱动单片机和各个模块的前提下,讨论如何整合和使用这些资源,以实现功能。在这一篇中,将会看到程序主体逐渐从主函数转移到定时器,并且明确这些变化的目的。最后还会接触到面向对象的程序设计方式,并体会这种方式带来的好处。操作系统篇将会介绍操作系统的最基本的任务切换原理,以及操作系统是如何实现在单片机编程中难以实现的功能的。并在arm平台上实现任务切换和简单的操作系统。至于更复杂的操作系统内核构建本文没有多说,各种常用的操作系统内核都有很多资料可以查阅,不过我会向大家推荐一本在网上公开但没有出版的书——《底层工作者手册之嵌入式操作系统内核》,这本书详细阐述了操作系统内核的构建方法。本文中提到的各个工程的代码作为附件可以从网上下载到:本文不足以成书,更适合作为分享经验的帖子,通过这样类似于书的排版可以使调理更加清晰。作为一个高考语文不及格的人,希望文章的内容配得上这种比较正规的形式。当然还请保留作者信息:作者:nicekwell主页::从单片机编程到操作系统产生nicekwell目录第一篇单片机编程第1章主函数顺序调用.....................................................21.1主函数顺序调用的一般结构....................................................................................21.2主函数顺序调用结构的特点....................................................................................2第2章界面函数结构.......................................................42.1界面函数一般结构....................................................................................................42.2更高的角度分析这种结构........................................................................................5第3章定时器分配任务.....................................................83.1用界面函数构成的基础框架....................................................................................83.2结合定时器编程分析................................................................................................93.3任务分割..................................................................................................................113.4定时器分配任务程序结构总结..............................................................................12第4章占用式与非占用式程序结构分析......................................144.1什么是占用式程序..................................................................................................144.2占用式程序的缺点..................................................................................................144.3对占用式程序的改造..............................................................................................154.4改造的本质..............................................................................................................164.5非占用式程序结构的优势......................................................................................174.6非占用式程序的一般结构......................................................................................174.7吐槽..........................................................................................................................18第5章定时器执行任务....................................................195.1定时器执行任务的程序结构..................................................................................195.2定时器里面任务函数的特点..................................................................................205.3过程任务的定时器化..............................................................................................215.4定时器执行任务程序结构总结..............................................................................255.5我们追求的是什么..................................................................................................25第6章面向对象思想+事件驱动结构.........................................276.1对象和事件..............................................................................................................276.2C语言对一个对象的封装........................................................................................286.3事件分配机制..........................................................................................................316.4系统层构建..............................................................................................................336.5库函数......................................................................................................................33第二篇操作系统第7章为什么要有操作系统................................................35第8章任务切换的具体工作................................................368.1CPU工作原理...........................................................................................................368.2任务切换做的事......................................................................................................38第9章在s3c6410上实现任务切换...........................................399.1了解s3c6410的寄存器..........................................................................................399.2要用到的几条汇编指令