单片机上操作系统的好处

2019-04-15 17:22发布

自己在上学的时候,搞过2年的单片机STM32编程,当时还记得一心想在上面跑个操作系统,UCOS操作系统,但是当时自己为什么要上这个操作系统,不是特别的清楚,后来自己在实际工作中,做了应用软件,感觉有了一些深刻的体会。 1.上操作系统有很多资源可以利用,系统的内存管理,线程进程的使用。文件系统的使用,图形系统的使用,这个是你在没有上操作系统的时候不能使用的。 2.对于多任务的处理更加简单了,原来比方说我了个机器人的程序,用裸机进行的,我有5个传感器,我还有一个液晶屏,还有1个按键,我就得用定时器来进行,进一个定时器,我就做一件事,主程序里只能做一件事,而如果我上了操作系统,我在主进程里就可以开多个线程,来同时做这样的事,不用我自己去管理这种处理顺序,由操作系统替我进行管理。 下面的总结来自于一个博客文章,比我总结的要到位的多,转载过来 原文的链接如下:https://blog.csdn.net/nicekwell/article/details/17177221 本文是2013年写的,后来整理成了系统文章,请访问 http://nicekwell.net/ 查看单片机编程系列文章。 以下是2013年原文: 以前对单片机编程做过一些零散的总结,近两个月又学习了一下操作系统,对操作系统原理和实现有了初步了解。所以就想到写一篇长文总结,系统总结一下单片机编程和操作系统原理,作为一个从单片机编程到操作系统的过渡文章。 本文介绍了各种单片机编程结构,可以算是本人单片机编程的一点小小的经验。从这些单片机编程结构的不断变化中逐渐过渡到操作系统,并在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
-------------------