【操作系统】如何给单片机写一个嵌入式操作系统

2020-11-21 14:00 跟我学单片机

提到操作系统,那一定是一个高大上的东西,实际上也确实是这样的,但是操作系统也有广义和狭义之分,广义的操作系统:通常不仅包含操作系统内核,还包括附带的应用软件和各种中间件,比如,windows操作系统就包含IE,word等等软件。狭义的操作系统一般是指操作系统内核,不包含在内核基础之上开发的其他软件。我们就从狭义的操作系统内核开始吧,千里之行,始于内核!

一、操作系统现状分析

常用的嵌入式操作系统,大致有下面几个:

1.VxWorks

VxWorks操作系统是WinRiver(美国风河系统)公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它具有良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域牢牢地占据着一席之地。

VxWorks所具有的显著特点是:可靠性、实时性和可裁剪性。

它支持多种处理器,如X86、i960、Sun Sparc、Motorola MC68xxx、MIPS、PowerPC等。

2.Windows Embedded

Windows CE是微软针对个人计算机以外的计算机产品所研发的嵌入式操作系统,而CE则为Customer Embedded的缩写。该操作系统是一种针对小容量、移动式、智能化、32位、连接设备的模块化实时嵌入式操作系统。针对掌上设备、无线设备的动态应用程序和服务提供了一种功能丰富的操作系统平台。但Windows CE的嵌入不够实时,它属于软实时操作系统,目前也开始应用在中文手机的研究开发之中。

由于该操作系统与Windows有相似的背景,而且界面也比较统一,因此也得到了大家比较好的认可。该操作系统的基本内核需要至少200KB的ROM。

3.嵌入式Linux(最主流)

Linux操作系统源于一位芬兰大学生——Linus Torvalds的课余作品。当时,Linus Torvalds正在学习计算机科学家Andrew S.Tanenbaum开发的Minix操作系统,但发现Minix的功能很不完善,于是就编写了一个保护模式下的操作系统,这就是Linux的原型。

最开始,Linux被定位于黑客用的操作系统,并被放至FTP服务器上供人们自由下载。

Linux的内核小、功能强大、运行稳定、系统健壮、效率高,易于定制裁剪,在价格上极具竞争力。Linux不仅支持X86CPU,还可以支持其他数十种CPU芯片。

4.嵌入式实时内核uC/OS(推荐)

uC/OS与Linux一样,是一款公开源代码的免费实时内核,已在各个领域得到了广泛的应用。uC/OS的特点如下:

(1)具有RTOS的基本性能;

(2)代码尺寸小,结构简明;

(3)易学、易移植;

uC/OS提供完善的嵌入式实时内核的源代码,并对该代码作详尽的解释。而商业上的实时操作系统不但价格昂贵,而且其中很多都是所谓的黑盒子,即不提供源代码。

5.RT-thread

RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈,文件系统,libc接口,图形用户界面等。

6.FreeRTOS

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要,可以运行在RAM较小的单片机上。

7.其他嵌入式操作系统

(1)Palm OS

Palm OS是一款32位的嵌入式操作系统,它的界面采用触控式。优势在于本身是一套专门为掌上电脑编写的操作系统。

(2)QNX

QNX是唯一可以将实时POSIX环境外加一个完全的窗口系统安装在1MB以下的闪储或只读存储器上的操作系统。

上面的操作系统直接可用于单片机的也就是us/OS-II和freeRTOS,它们对内存的占用很低,其它即使能运行,也需要单片机外扩RAM等存储器,需要更多的存储空间。

二、为什么要写单片机操作系统

最近的项目中,需要异步处理一些事件,比如说,按键按下点亮LED,松开按键3秒钟后LED再灭掉。我现在的做法是维护一个定时器列表,10ms为周期的定时器,在中断服务程序中去检查哪些任务时间到了,就去调用任务对应的函数。这样我在按键松开的时间加入一个3秒钟的定时器,3秒钟时间到,就去调用相应的函数,灭掉LED。这实际上和OS中的基于时间片分时调度简化,只是不需要切换,也不考虑执行了多长时间。

原型为:AddTask(pFunction,timer)

这样做可以降低我在主循环中代码逻辑的复杂度,但是需要维护一个定时器列表,而且要保证在一个定时器中期内(10ms),所有的任务能够运行完成,不能应对复杂任务。写一个单片机操作系统的想法也就产生了。

三、如何开始写单片机操作系统

先不考调所谓的调度算法,从任务切换入手,只要完成了如何切换任务,也就打下了基础,至于怎么切换以及切换的算法优劣都是锦上添花的事情。

千里之行始于行动,开始干吧,仅以此文作为开始。

本文地址:http://www.356368.com/news/122494.html

除非注明,否则均为356创业网原创文章,转载请注明出处!

延伸 · 阅读