当前位置:文档之家› bro-ndj_m基于嵌入式操作系统VxWorks的多任务并发程序设

bro-ndj_m基于嵌入式操作系统VxWorks的多任务并发程序设

bro-ndj_m基于嵌入式操作系统VxWorks的多任务并发程序设
bro-ndj_m基于嵌入式操作系统VxWorks的多任务并发程序设

!

_

世界上有两种人,一种人,虚度年华;另一种人,过着有意义的生活。在第一种人的眼里,生活就是一场睡眠,如果在他看来,是睡在既温暖又柔和的床铺上,那他便十分心满意足了;在第二种人眼里,可以说,生活就是建立功绩……人就在完成这个功绩中享到自己的幸福。--别林斯基

基于嵌入式操作系统VxWorks的多任务并发程序设计(1)――基本概念

02月 13th, 2006 by 宋宝华

作者:宋宝华 e-mail:21cnbao@https://www.doczj.com/doc/e012241266.html, 出处:软件报

(转载请务必注明作者与出处)

1引言

嵌入式系统定义为:嵌入到对象体系中的专用计算机系统。“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素,对象系统则是指嵌入式系统所嵌入的宿主系统。目前,随着高端消费类电子产品(如PDA、手机、智能家电)的普及,嵌入式计算机系统获得了相当广泛的应用。

操作系统在嵌入式软件体系中占据着重要低位,学习和掌握相关的知识是一名嵌入式系统研发人员的必须。

1.1本文的读者对象与写作目的

本文针对的读者对象为入门级的嵌入式系统软件开发人员以及其他对嵌入式操作系统感兴趣的朋友,顺利阅读本文需要读者具备的基本知识能力为:(1)熟练的C语言程序设计能力;

(2)操作系统的基本知识。

如果读者具备在Windows平台下进行多线程程序设计或者其他嵌入式操作系统本台下进行多任务程序设计的经验,将对阅读本文有很大的帮助。

本文虽然以VxWorks为介绍的主体对象,但是其中所论述的概念和方法并不局限于VxWorks操作系统本身。它们也同样适用于其它嵌入式操作系统,如WinCE、嵌入式Linux、ucos等,所谓“万变不离其宗”。

笔者力求能以通俗和形象的语言进行论述,但是由于水平有限,文中难免存在错误和纰漏,诚盼读者朋友指正。

1.2 为什么以VxWorks为写作对象

之所以选择VxWorks操作系统为本文的写作对象,是因为:

(1)VxWorks具备清晰的多任务并发控制及任务间通信的成熟机制;

(2)VxWorks有广泛的使用基础,国内外分布着大量的VxWorks程序员;

(3)VxWorks简单易学,便于我们集中目标讲解多任务控制程序本身。1.3 什么是VxWorks

VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它凭借着良好的可持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据了重要一席。VxWorks

具备高可靠性和实时性,因而被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的F-16、FA-18战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。

VxWorks的实时性体现在它能在限定时间内执行完规定的功能并对外部的异步事件作出响应。实时操作系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合;而分时操作系统按照相等的时间片调度进程轮流运行,无法实时响应外部异步事件,因而主要应用于科学计算和实时性要求不高的场合。

VxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块

组成。VxWorks 内核最小为8KB,即便加上其它必要模块,所占用的空间也很小,且不失其实时、多任务的系统特征。VxWorks的内核主要包括:(1)多任务:为满足真实世界事件的异步性,现代操作系统需提供多任务支持,由系统内核分配CPU给多个任务并发执行。如果是单CPU,则执行方式实质是宏观并行、微观串行;

(2)任务调度:真实世界的事件具有继承的优先级,当一个高优先级的任务变为可执行态,它会立即抢占当前正在运行的较低优先级的任务,VxWorks

对这种优先级抢占调度(Preemptive Priority Scheduling)提供了支持。同时,VxWorks也支持同优先级任务间的时间片轮转调度(Round-Robin Scheduling);

(3)任务间的通讯与同步:在一个实时系统中,系统必须提供多个任务间快速且功能强大的通信机制,并提供为了有效地共享不可抢占的资源或临界区所需的同步机制;

(4)任务与中断之间的通信:许多外设以中断方式与CPU通信,我们不宜在中断服务程序(ISR)中进行过多的处理,通常将相应处理交给特定任务去完成。

VxWorks前些年对我国一直采取禁运措施,自从对中国的销售解禁以来,它在中国赢得了越来越多的用户。

2 进程、线程与任务

既然我们是讲解一种操作系统,那我们就有必要再老生长叹一次进程与线程的概念及其区别。

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。

线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。

根据进程与线程的设置,操作系统大致分为如下类型:

(1)单进程、单线程,MS-DOS大致是这种操作系统;

(2)多进程、单线程,多数UNIX(及类UNIX的LINUX)是这种操作系统;

(3)多进程、多线程,Windows NT(以及基于NT内核的Windows 2000、XP等)、Solaris 2.x和OS/2都是这种操作系统;

(4)单进程、多线程,可以认为VxWorks是这种操作系统。VxWorks只有一个进程(内存空间和资源分配),其任务的概念与线程大致相当,所有任务之间共享内存和其它资源。

3 开发环境

嵌入式软件开发不同于PC机Windows操作系统之上的应用软件开发,它一般需要一个交叉编译和调试环境。编译和调试软件运行在宿主机上(我们通常使用的PC机,Windows操作系统),它们按照目标平台CPU指令集生成目标代码,并将目标代码下载到目标机上运行;此后,主机和目标机需建立通讯连接,并传输调试命令和数据。调试方式如下图所示:

VxWorks的开发环境为WindRiver公司提供的Tornado,它支持的目标平台可以是X86、ARM、PowerPC等类型处理器。Tornado包含三个高度集成的部分:(1)运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;

(2)运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;

(3)连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE或ROM仿真器等。

对于不同的目标机,Tornado给开发者提供一个一致的图形接口和人机界面,如下图所示:

我们通常需要一块目标电路板来进行嵌入式系统的开发调试工作,但是相信还有相当多的读者朋友没有目标开发电路板,为了实现本文中代码的调试,我们可采用两种方式:

(1)使用Tornado提供的VxSim模拟器来模拟调试,在此模拟器平台上,我们同样可以实现和运行本文中将介绍的大部分程序。VxSim是一个原型仿真器,它能使开发者在没有实际目标硬件的情况下,先进行原型机应用程序的开发。如果我们要调试BSP程序,不能依赖此平台。其界面很简洁,如下图:

(2)使用著名的VmWare虚拟机软件虚拟一个X86目标机平台,安装对应于X86版本的Tornado,我们可以调试BSP和一般应用程序。VMWare是一个“虚拟机”软件,它使用户可以在一台机器上同时运行多个

WIN2000/WINNT/WIN9X /DOS/LINUX/VxWorks等系统。VmWare是较“多启动”是一个更好的选择:“多启动”系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器,而VmWare则使用运行于Windows之上,各种操作系统的切换直接在VmWare软件中进行。VmWare的界面如下图:

Posted in 3.嵌入式系统 | No Comments ?

基于嵌入式操作系统VxWorks的多任务并发程序设计(2)--任务控制

03月 5th, 2006 by 宋宝华

基于嵌入式操作系统VxWorks的多任务并发程序设计(2)

――任务控制

作者:宋宝华 e-mail:21cnbao@https://www.doczj.com/doc/e012241266.html, 出处:软件报

4 任务与任务状态

VxWorks实时内核Wind提供了基本的多任务环境。对用户而言,宏观上看起来,多个任务同时在执行。而本质而言,在微观上,系统内核中的任务调度器总是在根据特定的调度策略让它们交替运行。系统调度器需要使用任务控制块(TCB)数据结构来管理任务调度功能,TCB被用来描述一个任务。TCB中存放了任务的上下文(context)信息,主要包括程序计数器PC、CPU内部寄存器、浮点寄存器、堆栈指针SP、任务信息等。每一任务都与一个TCB关联,当执行中的任务被停止时,任务的上下文信息需要被写入TCB;而当任务被重新执行时,必须要恢复这些上下文信息。

VxWorks的一个任务可能处于如下几种状态:

Ready:就绪状态(不是运行状态),其他资源已经就绪,仅等待CPU,当获得CPU后,就进入Running状态;

Pended:阻塞状态,由于等待某些资源(CPU除外)而阻塞;

Suspended:挂起状态,这种状态需要用taskResume才能恢复,主要用于调试。不会约束状态的转换,仅仅约束任务的执行;

Delayed:睡眠状态,任务以taskDelay主动要求等待一段时间再执行;

5 任务控制

5.1创建任务

VxWorks程序员创建任务需使用如下API:

taskSpawn (char *name, int priority, int options, int stackSize,

FUNCPTR entryPt, int arg1, int arg2, int arg3,

int arg4, int arg5, int arg6, int arg7,

int arg8, int arg9, int arg10);

该API的参数定义如下:

name:任务名;

priority:任务优先级;

main:任务入口函数;

arg1,…arg10:任务入口函数参数

下面来看一个具体的例子:

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "sysLib.h"

int tid;

/* task function */

void myFunc(void)

{

int i;

printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */

for (i = 0; i < 10; i++)

{

printf("%d ", i);

taskDelay(sysClkRateGet ( ) / 2);

}

}

/* user entry */

void user_start()

{

printf("ready to begin a new task\n");

tid = taskSpawn("myTask", 90, VX_NO_STACK_FILL, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

}

程序运行,在VxSim上输出:

Hello, I am task 14870080

0 1 2 3 4 5 6 7 8 9

taskDelay(sysClkRateGet ( ) / 2)语句的含义为将任务延迟0.5S,因此,0、1~9的数字输出之间间隔0.5S。

要特别注意taskSpawn函数的options参数,在如下几种情况下我们都要将其它options与VX_FP_TASK做“按位或”操作使得任务支持浮点运算(如果仅包含此选项,则不需进行或操作):

(1)执行浮点操作;

(2)调用返回任何浮点数的函数;

(3)调用参数为浮点数的函数。

例如下列程序启动任务的方式就不正确:

/* task including float calculate */

void floatTask(void)

{

printf("%f", 100 / 30.0);

}

/* user entry */

void user_start()

{

taskSpawn("floatTask", 90, VX_NO_STACK_FILL, 2000, (FUNCPTR) floatTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

}

应该将对taskSpawn函数调用的代码改为:

taskSpawn("floatTask", 90, VX_NO_STACK_FILL | VX_FP_TASK, 2000, floatTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

5.2 终止任务

exit( ) :终止当前任务。这个函数是不安全的,任务终止后,其所占据的内存空间并未释放,请看下面的程序:

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "sysLib.h"

int tid;

/* task function */

void myFunc(void)

{

int i;

printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */

for (i = 0; i < 5; i++)

{

printf("%d ", i);

taskDelay(sysClkRateGet() / 2);

}

exit(0);

for (i = 5; i < 10; i++)

{

printf("%d ", i);

taskDelay(sysClkRateGet() / 2);

}

}

/* user entry */

void user_start()

{

printf("ready to begin a new task\n");

tid = taskSpawn("myTask", 90, 0×100, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0);

}

这次程序仅仅输出:

Hello, I am task 14868640

0 1 2 3 4

这意味着exit(0)语句之后的循环for (i = 5; i < 10; i++)没有被执行。

taskDelete()函数:终止任务并释放任务占用的内存(堆栈和任务控制块空间),其原型为:

extern STATUS taskDelete (int tid);

参数tid为任务的ID。

请看下面的例子:

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "sysLib.h"

int tid;

/* task function */

void myFunc(void)

{

int i;

printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */ for (i = 0; i < 10; i++)

{

printf("%d ", i);

taskDelay(sysClkRateGet() / 2);

}

}

/* another task function:delete my task */

void delMyTaskFunc(void)

{

taskDelay(sysClkRateGet() *4);

printf("ready to delete task\n");

taskDelete(tid);

}

/* user entry */

void user_start()

{

printf("ready to begin new tasks\n");

tid = taskSpawn("myTask", 90, 0×100, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

taskSpawn("delMyTask", 90, 0×100, 2000, (FUNCPTR)delMyTaskFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

}

运行输出:

Hello, I am task 14868640

0 1 2 3 4 5 6 7 ready to begin a new task

程序为运行输出8、9,这是因为在此之前,myTask已经被另一个任务――delMyTask删除。

任务可能被taskDelete()调用删除掉,但这一行为也不一定是安全的。如果我们删除一个获得了某些资源(如二进制信号量等)的任务,则对应的资源将不被释放,到站其它正在等待该资源的任务永远不能获得资源,系统会挡掉。我们可以用taskSafe()和taskUnsafe ()来保护这种区域,例如:

taskSafe ();

semTake (semId, WAIT_FOREVER);

/* Block until semaphore available */

. .. .critical region .

semGive (semId);semGive (semId);

/* Release semaphore */

taskUnsafe ();

5.3 延迟任务

taskdelay()提供了一个简单的任务睡眠机制,常用于需要定时/延时机制的应用中。它的原型是:

STATUS taskDelay(int ticks /* number of ticks to delay task */);

可以看出使用该函数实现延时的单位为节拍(tick)。在VxWorks下通常以如下方式调用taskDelay()函数:

taskDelay(sysClkRateGet()*n);

其中的n是要延迟的时间,以秒为单位。其中的sysClkRateGet(int ticks /* number of ticks every second */)函数返回系统的时钟速率,单位是tick数/每秒。操作系统每秒的tick数可以利用sysClkRateSet()函数设置。

5.4 挂起/恢复/重启任务

我们可以使用taskSuspend()函数挂起一个任务的运行,这个任务只有获得对应的taskResume()后才能再次运行,这两个API的原型为:

extern STATUS taskSuspend (int tid);

extern STATUS taskResume (int tid);

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "sysLib.h"

int tid;

/* task function */

void myFunc(void)

{

int i;

printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */

for (i = 0; i < 10; i++)

{

printf("%d ", i);

taskDelay(sysClkRateGet() / 2);

}

}

/* suspend and resume task */

void suspendResumeMyTask(void)

{

taskDelay(sysClkRateGet() *3);

taskSuspend(tid);

printf("my task is suspended\n");

taskDelay(sysClkRateGet() *3);

taskResume(tid);

}

/* user entry */

void user_start()

{

printf("ready to begin new tasks\n");

tid = taskSpawn("myTask", 90, 0×100, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

taskSpawn("suspendResumeMyTask", 90, 0×100, 2000, (FUNCPTR) suspendResumeMyTask, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0);

}

运行输出:

Hello, I am task 17753664

0 1 2 3 4 5 my task is suspended

6 7 8 9

这个程序运行3秒后,suspendResumeMyTask任务挂起了myTask,输出“my task is suspended”。suspendResumeMyTask本身延迟3秒后恢复myTask,使得myTask再次输出“6 7 8 9”。显然,“6 7 8 9”与“0 1 2 3 4 5”的输出之间间隔了3秒以上的时间。

如果我们将上述程序改为:

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "sysLib.h"

int tid;

/* task function */

void myFunc(void)

{

int i;

printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */

for (i = 0; i < 10; i++)

{

printf("%d ", i);

taskDelay(sysClkRateGet() / 2);

}

}

/* reset task */

void resetMyTask(void)

{

taskDelay(sysClkRateGet() *3);

printf("my task will be reseted\n");

taskRestart(tid);

}

/* user entry */

void user_start()

{

printf("ready to begin new tasks\n");

tid = taskSpawn("myTask", 90, 0×100, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0);

taskSpawn("resetMyTask", 90, 0×100, 2000, (FUNCPTR)resetMyTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

}

运行输出:

Hello, I am task 17753664

0 1 2 3 4 5 my task will be reseted

Hello, I am task 17753664

0 1 2 3 4 5 6 7 8 9

我们可以使用taskRestart()函数重新启动一个任务,不管任务当前处于什么状态,它都会被重新开始。该API的原型是:

extern STATUS taskRestart (int tid);

在例6中,程序运行3秒后resetMyTask启动,它复位了myTask,因此myTask 被重新执行,“Hello, I am task 17753664”以及“0 1 2 3 4 5”被再次输出。5.5任务钩子

有过Windows钩子(Hook)编程经验的读者应该对其概念并不陌生,Hook 作为回调函数,当被挂接后。操作系统发生特定的事情时,将触发这个Hook回调函数的执行。VxWorks也有钩子的概念,不过比Windows要简单许多,主要有taskCreateHook、taskDeleteHook、taskSwitchHookAdd,可以通过如下6个API 来添加和删除这三种Hook:

STATUS taskCreateHookAdd (FUNCPTR createHook /* routine to be called when a task is created */ );

STATUS taskCreateHookDelete (FUNCPTR createHook /* routine to be deleted from list */);

STATUS taskSwitchHookAdd (FUNCPTR switchHook /* routine to be called at every task switch */);

STATUS taskSwitchHookDelete (FUNCPTR switchHook /* routine to be deleted from list */);

STATUS taskDeleteHookAdd (FUNCPTR deleteHook /* routine to be called when a task is deleted */);

STATUS taskDeleteHookDelete (FUNCPTR deleteHook /* routine to be deleted from list */);

请看例程:

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "taskHookLib.h" //taskHook所对应的库

/* task function */

void myFunc(void)

{

int i;

printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */

}

/* taskCreatHook */

void myTaskHook(void)

{

printf("task hook function called\n");

}

/* user entry */

void user_start()

{

taskCreateHookAdd( (FUNCPTR) myTaskHook);

taskSpawn("myTask", 90, 0×100, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

}

运行输出:

task hook function called

Hello, I am task 14868640

5.6 其它重要API

与任务控制相关的其它重要API还有:

//设置任务优先级

extern STATUS taskOptionsSet (int tid, int mask, int newOptions);

//获得任务优先级

extern STATUS taskOptionsGet (int tid, int *pOptions);

//从任务ID获得任务名

extern char * taskName (int tid);

//从任务名获得任务ID

extern int taskNameToId (char *name);

//确认ID为tid的任务是否存在

extern STATUS taskIdVerify (int tid);

//获得任务自身ID

extern int taskIdSelf (void);

//任务状态是否为ready

extern BOOL taskIsReady (int tid);

//任务状态是否为Suspended

extern BOOL taskIsSuspended (int tid);

//获得任务的TCB指针

extern WIND_TCB *taskTcb (int tid);

//获得任务的优先级

STATUS taskPrioritySet (int tid, /* task ID */ int newPriority /* new priority

*/ );

//任务锁定与解锁:一个任务调用taskLock()后,任务运行时将没有基于优先级的抢占发生;而taskUnlock()则用于恢复锁定。

extern STATUS taskLock (void);

extern STATUS taskUnlock (void);

基于嵌入式操作系统VxWorks的多任务并发程序设计(3)――任务调度

03月 7th, 2006 by 宋宝华

基于嵌入式操作系统VxWorks的多任务并发程序设计(3)

――任务调度

作者:宋宝华 e-mail:21cnbao@https://www.doczj.com/doc/e012241266.html, 出处:软件报VxWorks支持两种方式的任务调度:

(1)基于优先级的抢占调度(Preemptive Priority Based Scheduling)

抢占是指正在执行的任务可以被打断,让另一个任务运行,它可以提高应用程序对异步事件的响应能力。基于优先级的抢占调度是最常见的抢占机制,用户任务被分配一个优先级,操作系统内核总是调度优先级最高的就绪任务运行于CPU。当系统正在执行低优先级任务时,一旦有更高优先级的任务准备就绪,OS内核会立即进行任务的上下文切换。

VxWorks的Wind内核划分优先级为256 级(0~255)。优先级0为最高优先级,优先级255为最低。当任务被创建时,系统根据用户指定的值分配任务优先级。VxWorks的任务优先级也可以是动态的,它们能在系统运行时被用户使用系统调用taskPrioritySet()来加以改变。

(2)时间片轮转调度(Round-Robin Scheduling)

时间片轮转调度指的是操作系统分配一定的时间间隔(时间片),使每个任务轮流运行于CPU。在VxWorks中,对于优先级相同的多个任务,如果状态为ready,则其可以通过时间片轮转方式公平享有CPU资源。

轮转调度法给处于就绪态的每个同优先级的任务分配一个相同的执行时间片,时间片的大小可由系统调用KernelTimeSlice指定。为对轮转调度进行支持,系统给每个任务提供一个运行时间计数器,任务运行时每一时间滴答计数器加1。一个任务用完时间片之后,OS停止执行该任务,将它放入就绪队列尾部,并

将其运行时间计数器置零。接着,OS执行就绪队列中的下一个任务。

6. 任务调度

6.1时间片轮转调度

我们来看一个具体的例子,在这个程序中,用户启动了三个优先级相同的任务,并通过对kernelTimeSlice(TIMESLICE)的调用启动了时间片轮转调度。

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "kernelLib.h"

#include "sysLib.h"

/* function prototypes */

void taskOne(void);

void taskTwo(void);

void taskThree(void);

/* globals */

#define ITER1 100

#define ITER2 10

#define PRIORITY 101

#define TIMESLICE sysClkRateGet()

#define LONG_TIME 0xFFFFFFL

void sched(void) /* function to create the three tasks */

{

int taskIdOne, taskIdTwo, taskIdThree;

if (kernelTimeSlice(TIMESLICE) == OK)

/* turn round-robin on */

printf("\n\n\n\n\t\t\tTIMESLICE = %d seconds\n\n\n", TIMESLICE / 60);

/* spawn the three tasks */

if ((taskIdOne = taskSpawn("task1", PRIORITY, 0×100, 20000, (FUNCPTR)taskOne,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)

printf("taskSpawn taskOne failed\n");

if ((taskIdTwo = taskSpawn("task2", PRIORITY, 0×100, 20000, (FUNCPTR)taskTwo,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)

printf("taskSpawn taskTwo failed\n");

if ((taskIdThree = taskSpawn("task3", PRIORITY, 0×100, 20000, (FUNCPTR)

taskThree, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) == ERROR)

printf("taskSpawn taskThree failed\n");

}

void taskOne(void)

{

unsigned int i, j;

for (i = 0; i < ITER1; i++)

{

for (j = 0; j < ITER2; j++)

printf("task1\n");

/* log messages */

for (j = 0; j < LONG_TIME; j++)

;

/* allow time for context switch */

}

}

void taskTwo(void)

{

unsigned int i, j;

for (i = 0; i < ITER1; i++)

{

for (j = 0; j < ITER2; j++)

printf("task2\n");

/* log messages */

for (j = 0; j < LONG_TIME; j++)

;

/* allow time for context switch */

}

}

void taskThree(void)

{

unsigned int i, j;

for (i = 0; i < ITER1; i++)

{

for (j = 0; j < ITER2; j++)

printf("task3\n");

/* log messages */

for (j = 0; j < LONG_TIME; j++)

;

/* allow time for context switch */

}

}

程序运行输出:一会儿输出一些“task1”,一会儿输出一些“task2”,再一会儿输出一些“task3”。每次输出了某任务的一部分内容后,就开始输出另一任务的内容,这说明了task1、task2、task3再进行时间片轮转切换。

对于任务的上下文切换,我们可以使用WindView进行观察。WindView是一个图形化的动态诊断和分析工具,它可以向开发者提供目标机硬件上所运行应用程序的许多详细情况。下图显示了使用WindView获取的上述程序的运行结果:

kernelTimeSlice()的函数原型为:

STATUS kernelTimeSlice (int ticks /* time-slice in ticks or 0 to disable

round-robin */ );

程序中的kernelTimeSlice(TIMESLICE)展开后为kernelTimeSlice(sysClkRate Get()),即每秒钟进行一次轮转。如果kernelTimeSlice函数中的输入参数为0,时间片轮转调度就不会发生,程序的输出将是:先输出ITER1* ITER2个“task 1”,再输出ITER1* ITER2个“task2”,最后输出ITER1* ITER2个“task3”。

6.2优先级抢占调度

如果将例1中三个任务的优先级设置的不相同,即将程序改为:

/* includes */

#include "vxWorks.h"

#include "taskLib.h"

#include "kernelLib.h"

#include "sysLib.h"

/* function prototypes */

嵌入式操作系统简介以及发展史

嵌入式操作系统简介以及发展史 导语:嵌入式操作系统离我们生活并不远,甚至我们生活中处处都可见,比如各种路由器,机顶盒,洗衣机,空调,手机等。嵌入式操作系统的定义: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用操作系统。嵌入式系统的发展:嵌入式操作系统并不是一个新生的事物,从20世纪80年代起,国际上就有了一些IT组织,公司开始进行商用嵌入式系统和专用操作系统的研发,这期间涌现了一些著名的嵌入式操作系统:windows CEVxWorkspSOSQNXPalm OSOS-9LynxOS目前,有很多商用嵌入式操作系统都在努力的为自己争取嵌入式市场的份额。但是,这些专用操作系统均属于商业化产品,价格昂贵,而且,他们的源码不公开,使得各自的嵌入式系统上的应用软件不能互相兼容。这导致了商业嵌入式系统对支持各种设备存在了很大的问题,使软件移植变得相当困难,但是,在这个时候,我们伟大的linux操作系统横空出世, 由于linux自身诸多的优点以及优势,吸引了许多开发商的 目光,使得linux成为了嵌入式操作系统的新宠。嵌入式操 作系统发展的四个阶段:第一阶段:无操作系统的嵌入式算法阶段,以单芯片为核心的可编程控制器的系统,具有监测,

伺服,指示设备相配合的功能。应用在一些专业性极强的工业控制系统,使用古老的汇编语言进行系统的直接控制。第二阶段:以嵌入式CPU为基础,简单操作系统为核心的嵌入式操作系统,CPU种类繁多,通用性差,系统开销小,效率高,一般配备系统仿真器,操作系统有一定的兼容性,软件较为专业,用户界面不够友好,系统主要用来监测系统和应用程序运行。 第三阶段:通用的嵌入式实时操作系统阶段,以嵌入式操作系统为核心的嵌入式系统,能运行于各种微处理器上,兼容性好,内核小,效率高,具有高度的模块化和扩展化,有文件管理和目录管理,设备支持,多任务,网络支持,图形窗口以及用户界面等功能,具有大量的应用程序接口(API),软件非常丰富,代表就是linux。 第四阶段:以Internet为标志的嵌入式操作系统,这是一个正在迅速发展的阶段,现在非常多的嵌入式操作系统已经有了接入Internet的能力。通过一个综合网关。 常见的嵌入式操作系统:uC/OS-Ⅱ:uC/OS-Ⅱ是一个公开源码,结构小巧,实时内核的实时操作系统。是一种基于优先级的可抢占式的硬实时内核,其内核提供任务管理与调度,时间管理,任务同步和通信,内存管理,中断服务等功能。其内核最小可以编译至2KB左右。-RTLinux:RTLinux是一个源代码开放的具有硬实时特性的多任务操作系统,他是通

三种常用的嵌入式操作系统分析与比较

三种常用的嵌入式操作系统分析与比较 摘要:提要三种常用的嵌入式操作系统——Palm OS、Windows CE、Linux;在此基础上、分析、比较这三种嵌入式操作系统,给出它们之间的异同点及各自的适用范围。 1 嵌入式系统与嵌入式操作系统 1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。 1.2 嵌入式操作系统 嵌入式操作系统EOS (Embedded Operating System)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、调度作,控制、协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而方的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下特点: ①可装卸性。开放性、可伸缩性的体系结构。 ②强实时性。EOS实时性一般较强,可用于各种设备控制当中。 ③统一的接口。提供各种设备驱动接口。

《嵌入式操作系统》课程教学大纲

《嵌入式操作系统》课程教学大纲 (Embedded Operating System) 课程编号: 课程性质:专业课 适用专业:软件工程 先修课程:计算机组成和结构、C语言程序设计、操作系统原理、嵌入式系统原理与设计 后续课程:嵌入式操作系统 总学分:3(其中实验学分0.5) 一、教学目的与要求 “嵌入式操作系统”是软件工程专业的课程之一,培养学生具有嵌入式系统的应用知识、嵌入式系统的初步分析能力和具有用RTOS构成嵌入式系统的应用能力。介绍嵌入式系统中嵌入式实时操作系统和其他技术。通过本课程学习常见的嵌入式操作系统;掌握嵌入式系统软硬件设计的基本方法;跟踪嵌入式系统最新设计理念;实践嵌入式系统项目开发基本流程;为嵌入式系统开发奠定良好的基础。 本课程以介绍嵌入式操作系统知识为主,但在构成一个嵌入式计算机应用系统时,还必须具有用汇编语言、C或C++语言及程序设计编制源程序的能力,软硬件结合是本课程的一个特点。 1.教学目的 通过本课程的学习,使学生具有嵌入式操作系统的分析能力和初步设计能力。 2.教学要求 本课程采用课堂教学和试验教学相结合,以课堂教学为主的教学形式。通过本课程的学习,要求学生能够达到: (1)较深入地了解嵌入式操作系统的组成及工作原理; (2)具有较高的汇编语言源程序的阅读能力和一定的程序编写能力; (3)掌握嵌入式操作系统的使用方法和移植方法; 二、课时安排

注:教学、实验内容和学时安排各专业任课教师可根据具体专业要求作适当调整。 三、教学内容 1. 概论(2学时) (1)教学的基本要求 了解:嵌入式系统、实时系统的基本概念 重点:嵌入式操作系统的选型 (2)教学内容 ①嵌入式系统的概念 ②嵌入式操作系统的分类 ③嵌入式系统的应用举例 2. 嵌入式系统工程设计(4学时) (1)教学的基本要求 了解:介绍可用于嵌入式应用开发的一些基本方法 重点:介绍嵌入式实时软件工程方法 (2)教学内容 ①嵌入式系统项目开发流程 ②嵌入式系统工程设计方法 3. 内核相关基本概念(10学时) (1)教学的基本要求 了解:内核的定位与可裁剪性;相关基本术语 理解:任务状态、调度规则,中断处理,任务异常处理 掌握:非任务执行时、任务无关部分和准任务部分的系统状态 重点:任务状态 难点:中断处理 (2)教学内容 ①内核的定位与可裁剪性。 ②任务的运行、就绪、等待与睡眠和不存在状态。 ③任务的优先级与调度规则。 ④中断与异常。 ⑤系统状态。 4. 数据类型与系统调用(6学时) (1)教学的基本要求 了解:普通数据类型和其它定义数据类型 理解:相对时间,系统时间,时限 掌握:系统调用的格式,调用方法以及参数包的修改 重点:系统调用方法。 难点:参数包的修改。

嵌入式系统期末考试题库及答案

嵌入式系统期末考试题库及答案 《嵌入式系统》试题库 《嵌入式系统》试题库 一、填空题 1、嵌入式系统的基本定义为:以应用中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 2、从模块结构来看,嵌入式系统由三大部分组成,分别是:硬件、软件和开发平台。 3、从层次角度来看,嵌入式系统由四大部分组成,分别是:应用软件层、操作系统层、板级支持包(或硬件抽象层)和硬件层。 4、嵌入式产品的主要度量指标包括:上市时间、设计成本和产品质量。 5、嵌入式系统的设计过程包括:需求分析、规格说明、体系结构设计、构件设计、系统集成和系统测试。 6、需求分析包括:功能性需求分析和非功能性需求分析。 7、确定输入信号是数字信号还是模拟信号属于功能性需求。 8、确定系统的物理尺寸和重量属于非功能性需求。 9、在嵌入式系统的设计过程中,其中规格说明解决“做什么”。 10、在嵌入式系统的设计过程中,其中体系结构设计解决“如何做”。 11、在嵌入式系统的设计过程中,软硬件划分应该在体系结构设计阶段完成。12、在嵌入式系统的设计过程中,处理器的选择应该在体系结构设计阶段完成。13、在嵌入式系统的设计过程中,嵌入式操作系统的选择应该在体系结构设计阶段完成。14、在嵌入式系统的设计过程中,完成原理图设计应在构件设计阶段完成。15、在嵌入式系统的设计过程中,完成版图设计应在构件设计阶段完成。16、在嵌入式系统的设计过程中,完成软件设计应在构件设计阶段完成。 17、反映嵌入式系统设计人员的水平能力主要在于总体设计(需

求分析、规格说明和体系结构设计)和系统调试。 18、设计流程指的是设计过程中所经历的过程步骤。 19、设计重用技术主要分为基于IP 核的模块级重用和基于平台的系统级重用。20、软硬件协同设计由系统描述、软硬件划分、软硬件协同综合以及软硬件协同模拟与验证几个阶段组成。 21、嵌入式处理器的分类包括三种,分别是:嵌入式微处理器、微控制器(或单片机)和 第1 页共44 页 1 《嵌入式系统》试题库 数字信号处理器(DSP)。 22、列举常见的ARM 系列处理器:ARM7 系列、ARM9 系列、ARM11 系列、Cortex-M 系列、Cortex-R 系列、Cortex-A 系列等。 23、ARM 系列微处理器支持的数据类型有:字节、半字和字等三种类型。24、ARM 系列微处理器支持的字数据存储格式有:大端格式和小端格式。25、ARM 系列处理器通过执行BX 或者BLX 指令来实现工作状态的切换。26、列举常见的存储器类型:SRAM、DRAM、Flash、EEPROM 等。27、对于RAM 存储器主要有两种,分别是:SRAM 和DRAM。 28、在时钟信号边沿到来之前的一段时间内,数据信号必须保持稳定,这段时间称为器件的建立时间;在时钟信号边沿到来之后的一段时间内,数据信号必须保持稳定,这段时间称为器件的保持时间。 29、总线是在多于两个模块(设备、子系统)之间传送信息的公共通路。30、总线的功能是信息共享和交换。 31、总线由传输信息的物理介质和管理信息传输的协议组成。 32、挂接在总线上的设备依据启动总线事务的能力可以分为主设备和从设备。33、总线协议依据同步方式可分为同步时序协议和异步时序协议。34、总线仲裁方式可分为集中式仲裁和分布式仲裁。

常见的嵌入式操作系统

常见的嵌入式操作系统 分类:嵌入式操作系统2012-12-11 10:06 459人阅读评论(1) 收藏举报嵌入式操作系统 嵌入式操作系统与通用的操作相比较主要特点在于: 1.小内核,稳定可靠。 2.需要可装卸、可裁剪,以便能灵活应对各种不同的硬件平台。 3.面向应用,强实时性,可用于各种设备控制当中。 国际上常见的嵌入式操作系统大约有40种左,右如:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C Executive 。他们基本可以分为两类,一类是面向控制、通信等领域的实时操作系统,如windriver公司的vxworks、isi的psos、qnx系统软件公司的qnx、ati的nucleus等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(pda)、移动电话、机顶盒、电子书、webphone等,系统有Microsoft的WinCE,3Com 的Palm,以及Symbian和Google的Android等。 一、VxWorks VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是T ornado嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌人式实时操作系统领域逐渐占据一席之地。VxWorks具有可裁剪微内核结构;高效的任务管理;灵活的任务间通讯;微秒级的中断处理;支持POSIX 1003.1b实时扩展标准;支持多种物理介质及标准的、完整的TCP/IP网络协议等。 然而其价格昂贵。由于操作系统本身以及开发环境都是专有的,价格一般都比较高,通常需花费10万元人民币以上才能建起一个可用的开发环境,对每一个应用一般还要另外收取版税。一般不通供源代码,只提供二进制代码。由于它们都是专用操作系统,需要专门的技术人员掌握开发技术和维护,所以软件的开发和维护成本都非常高。支持的硬件数量有限。 二、Windows CE Windows CE与Windows系列有较好的兼容性,无疑是Windows CE推广的一大优势。其中WinCE3.0是一种针对小容量、移动式、智能化、32位、了解设备的模块化实时嵌人式操

ARM的十一种嵌入式操作系统

ARM的十一种嵌入式操作系统 ARM的十一种嵌入式操作系统 嵌入式LINUX 嵌入式Linux是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。Linux做嵌入式 的优势,首先,Linux是开放源代码;其次,Linux的内核小、效率高,可以定制,其系统内核最小只有约134KB;第三,Linux是免费 的OS,Linux还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台而且性能稳定,裁剪性很好,开发和使用都很容易。同时,Linux内核的结构在网络方面是非常 完整的,Linux对网络中最常用的TCP/IP协议有最完备的支持。提 供了包括十兆、百兆、千兆的以太网络,以及无线网络, TokenRing(令牌环网)、光纤甚至卫星的支持。 移植步骤:1.Bootloader的移植;2.嵌入式Linux操作系统内核 的移植;3.嵌入式Linux操作系统根文件系统的创建;4.电路板上外 设Linux驱动程序的编写。 WinCE WinCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设 备操作系统,它是精简的Windows95,WinCE的图形用户界面相当出色。WinCE是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对于从掌上电脑到 专用的工业控制器的用户电子设备进行定制。操作系统的基本内核 需要至少200K的ROM。 一般来说,一个WinCE系统包括四层结构:应用程序、WinCE内 核映像、板级支持包(BSP)、硬件平台。而基本软件平台则主要由

嵌入式操作系统复习资料

嵌入式操作系统课程复习 (嵌入式操作系统原理) 一、真空题 1.根据系统中的任务获得使用CPU的权力的方式,多任务实时操作系统的内核分为可剥夺型和不可剥夺型两种类型。 2.实时操作系统需要满足的条件包括多任务、可剥夺型内核、任务切换时间固定、中断延时尽量短。 3.目前比较常见的操作系统有_WinCE_、_uCLinux_、_Uc/OC-II_等。 4.在ucos-ii中任务的状态包括_睡眠状态_、就绪状态_、运行状态、中断服务状态_等。5.在ucos-ii中任务由_任务的代码_、任务控制块_、_任务堆栈_三个部分组成。 6.在ucos-ii中提供的空闲任务OSTaskIdle()的作用是完成_对OSdleCtr计数器加1_。7.在ucos-ii中提供的统计任务OSTaskStat()的作用是完成_CPU利用率OSCPUUsage统计。8.在ucos-ii中任务的调度主要完成_在任务就绪表中查找具有最高优先级别的就绪任务_、实现任务的切换两件事。 二、简答题 1.代码的临界段?在ucos-ii中通过哪几种方式实现? 在应用程序中,能够不受任何干扰而运行的代码段,称做临界段。它主要通过开关中断技术实现。用户可通过定义移植文件OS_CPU.H中的常数OS_CRITICAL_METHOD 来实现选择 开关中断的实现方法分三种: 1)直接用处理器指令 2)在堆栈中保存中断的开关状态,然后再关中断。 3)通过编译器提供的c函数来保存处理器状态字的值。 #if OS_CRITICAL_METHOD == 1 #define OS_ENTE R_CRITICAL() asm ("DI") //关中断 #define OS_EXIT_CRITICAL() asm ("EI") //开中断 #endif #if OS_CRITICAL_METHOD == 2 #define OS_ENTER_CRITICAL() asm ("PUSH PSW,DI") //保存CPU状态,关中断 #define OS_EXIT_CRITICAL() asm ("POP psw) //恢复中断允许标志 #endif #if OS_CRITICAL_METHOD == 3 #define OS_ENTER_CRITICAL() ("cpu_sr = get_processor_psw(),DI") //保存CPU状态,关中断 #define OS_EXIT_CRITICAL() ("Set_processor_psw(cpu_sr)) //恢复中断允许标志#endif 2.调度?在ucos-ii中其调度算法是什么? 在多任务系统中,令CPU中止当前正在运行的任务转而去运行另一个任务的工作叫任

嵌入式系统期末考试试卷 习题

1.下面哪一种工作模式不属于ARM特权模式(A)。 A.用户模式B.系统模式C.软中断模式D.FIQ模式 2.ARM7TDMI的工作状态包括( D )。 A.测试状态和运行状态B.挂起状态和就绪状态 C.就绪状态和运行状态D.ARM状态和Thumb状态 3.下面哪个Linux操作系统是嵌入式操作系统( B )。 A.Red-hat Linux B.uclinux C.Ubuntu Linux D.SUSE Linux 4.使用Host-Target联合开发嵌入式应用,( B )不是必须的。 A.宿主机B.银河麒麟操作系统 C.目标机D.交叉编译器 5.下面哪个不属于Linux下的一个进程在内存里的三部分的数据之一(A)。 A.寄存器段B.代码段 C.堆栈段D.数据段 选择题(共5小题,每题2分,共10分) 1.下面哪个系统属于嵌入式系统( D )。 A.“天河一号”计算机系统B.IBMX200笔记本电脑 C.联想S10上网本D.Iphone手机 2.在Makefile中的命令必须要以(A)键开始。 A.Tab键B.#号键 C.空格键D.&键 3.Linux支持多种文件系统,下面哪种不属于Linux的文件系统格式( B )。 A.Ext B.FA T32 C.NFS D.Ext3 4.下面哪种不属于VI三种工作模式之一( D )。 A.命令行模式B.插入模式 C.底行模式D.工作模式 5.下面哪一项不属于Linux内核的配置系统的三个组成部分之一( C )。 A.Makefile B.配置文件(config.in) C.make menuconfig D.配置工具 1.人们生活中常用的嵌入式设备有哪些?列举4个以上(1) 手机,(2) 机顶盒,(3) MP3,(4) GPS。(交换机、打印机、投影仪、无线路由器、车载媒体、PDA、GPS、智能家电等等。) 2.ARM9处理器使用了五级流水线,五级流水具体指哪五级:(5) 取指,(6) 译码,(7) 执行,(8) 缓冲/数据,(9) 回写。 3.在Makefile中的命令必须要以(10) Tab 键开始。 4.Linux支持多种文件系统,主要包括哪些(写出其中4中就行)(11) Ext,(12) VFA T,(13) JFS,(14) NFS。(JFS、ReiserFS、Ext、Ext2、Ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等) 5.VI的工作模式有哪三种:(15) 命令行模式,(16) 插入模式,(17) 底行模式。

基于Linux嵌入式操作系统的研究

基于Linux 嵌入式操作系统的研究 李红卫1,潘瑜1,王树亮2,薛小锋1 (1.江苏技术师范学院计算机科学与工程学院,江苏常州213001; 2.江苏技术师范学院图书馆,江苏常州213001) 摘要:从Linux内核实时性、实时调度策略以及时钟细粒度定时器三个方面,对Linux嵌入式实时化技术进行了探讨。在内核中插入抢占点或采用双内核系统,改善Linux的实时性能;通过动态优先级提高实时任务的调度性能;通过增加时钟中断频率或采用实时时钟一次性模式,实现时钟细粒度。 关键词:Linux;嵌入式系统;实时性;进程调度 中图分类号:TP316.2文献标识码:A 0引言 嵌入式系统是集软硬件于一体可独立工作的计算机系统,它通常是更大系统中一个完整的部分[1]。 在早期的嵌入式系统设计中一般不包含操作系统,但当系统越来越复杂、应用范围越来越广泛时,没有操作系统已成为系统开发的最大障碍;因此,在嵌入式系统的发展中,出现了各种各样的商用嵌入式操作系统。嵌入式操作系统的出现改变了以往嵌入式软件设计只能针对具体的应用从头做起,使嵌入式系统的开发方法更具科学性;同时,采用嵌入式操作系统提高了系统的开发效率,减少了开发的工作量,增强了软件的可移植性。操作系统成为嵌入式系统的核心,是一个时代的特征,也是嵌入式系统从简单的单片机、微处理器走向愈来愈复杂的嵌入式SOC和CPU的自然体现[2]。开源Linux操作系统的出现,给嵌入式操作系统的发展带来生机,将Linux应用于嵌入式系统开发环境中已十分广泛;但就目前而言,嵌入式Linux的研究成果与市场的真正需求仍有一段差距,还需要在嵌入式Linux系统的实时性、进程调度等方面对其进行不断的改进和完善。 1改造Linux为嵌入式操作系统的分析 实时系统最重要的特征是实时性,实时性是指系统对外部事件的响应和处理要在一个给定的时间内 完成,即计算必须在到达死线(deadline)前完成[1]。根据丢失死线的容忍程度可将实时系统分为硬实时系 统和软实时系统:硬实时系统必须保证任务在到达死线之前完成,丢失死线将会引发灾难;软实时系统能保证任务在死线之前完成,但死线的丢失并不会带来致命的错误。 在大多数嵌入式系统应用中往往要求系统具有实时性。虽然Linux是一个分时操作系统,但其符合POSIX1003.1b关于实时扩展部分的标准,尤其Linux2.6的推出给嵌入式系统以及实时系统的应用带来生机。将Linux改造为嵌入式实时操作系统具有(1)Linux功能强大、(2)开放源码、(3)支持多种硬件平台、(4) 收稿日期:2006-02-21;修回日期:2006-04-03 基金项目:江苏技术师范学院科研基金资助项目(KYY04001) 作者简介:李红卫(1966-),男,山西阳城人,江苏技术师范学院计算机科学与工程学院副教授。 JOURNALOFJIANGSUTEACHERSUNIVERSITYOFTECHNOLOGY江苏技术师范学院学报 Apr.,Vol.12,No.22006 2006年4月第12卷第2期

嵌入式操作系统精彩试题集61374

第一章嵌入式系统概论 一.填空 1. 嵌入式系统是以嵌入式应用为目的、以计算机技术为基础的计算机系统。 2. 计算机系统按应用可以分为通用计算机系统和嵌入式计算机系统。 3. 嵌入式系统按软件结构可分为嵌入式单线程系统和嵌入式事件驱动系统。 4. 嵌入式系统按是否具有实时性能可分为嵌入式非实时系统和嵌入式实时系统。 5. 嵌入式实时系统除具有嵌入式系统的基本特征外,还具实时性和可靠性的重要特点。 6. 嵌入式系统的硬件架构是以嵌入式处理器为中心,由存储器,I/O设备,通信模块以及电源等必要的辅助接口组成。 7. 嵌入式系统的软件通常固态化存储在ROM、FLASH或NVRAM中。 8. 嵌入式系统的开发由于受到系统资源开销的限制,通常采用交叉开发环境。 9. 嵌入式系统开发采用的交叉开发环境是由宿主机和目标机组成的。 10. 嵌入式系统的设计是使用一组物理硬件和软件来完成所需功能的过程。 二.选择 1. 以下哪一项不属于嵌入式操作系统(C) A.VxWorks B. WinCE C. BSD D. uClinux 2. 以下关于嵌入式系统说确的是(A) A.以开发为中心 B 对实时,成本,功耗要求严格 C.软硬件协同 D 软件可剪裁 3. 以下关于嵌入式系统说确的是(A) A.嵌入的系统中可以共存多个嵌入式系统 B.对高性能要求严格

C.软硬件缺乏协同 D.不要时性 4. 对响应时间有严格要求的嵌入式系统是(A) A.嵌入式实时系统 B.嵌入式多线程系统 C.嵌入式多核系统 D.嵌入式轮转询问系统 5. 以下哪一项属于嵌入式系统不具备的特点(B) A.采用专用处理器 B. 跨平台可移植 C.软硬件协同一体化 D.小型化与有限资源 6. 嵌入式系统硬件的核心是(B) A.存储器 B.嵌入式微处理器 C.嵌入式微控制器 D.BSP 7. 嵌入式系统的软件部分不包括(A) A.DSP B.嵌入式操作系统 C.设备驱动程序D.应用程序 8. 对性能要求高的嵌入式系统是(C) A.嵌入式实时系统 B.嵌入式多线程系统 C.嵌入式多核系统 D.嵌入式轮转询问系统 9. 嵌入式应用软件的开发阶段不包括(D) A.交叉编译和 B.开发环境的建立 C.联机调试 D.应用程序模块加载 10. 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都保存在(A) A.存储器芯片 B.磁盘 C.cache D.CDROM

嵌入式操作系统-课程教学大纲

嵌入式操作系统课程教学大纲 课程名称:嵌入式操作系统 英文名称:Embedded Operating System 课程类型:专业选修课 总学时及学分:32 适应对象:物联网工程、软件工程、计算机科学技术、网络工程 主要先修课程:C语言程序设计、汇编语言程序设计、数据结构、操作系统、计算机网络、计算机组成 执行日期: 一、课程的性质与任务 课程教学所要达到的目的是:使学生掌握嵌入式系统体系结构,了解典型嵌入式处理器架构,学习嵌入式操作系统内核包括进程调度、进程通信、文件系统、存储管理、网络管理等,了解常见嵌入式操作系统特点及其环境支持下的嵌入式软件开发与应用。 二、课程的教学目标 课程教学所要达到的目的是:让学生学习嵌入式操作系统,了解嵌入式操作系统内核组成; 使学生的获取知识能力、系统认知能力得到提升,培养学生的团队协作能力,锻炼和培养学生锲而不舍、百折不挠的科研品质。 三、教学内容及其基本要求 在学生掌握操作系统知识的基础上,以嵌入式软件的核心——嵌入式操作系统为重点,以应用为目的,使学生对嵌入式系统及开发有一个完整把握,深入理解嵌入式操作系统。结合嵌入式系统知识掌握嵌入式内核,包括进程管理与调度、同步互斥与通信、中断和时间管理、存储管理和适用于嵌入式的文件系统,为学生在嵌入式系统开发中能对内核进行灵活地裁减奠定基础,进而掌握嵌入式软件应用开发。 1嵌入式系统导论 1.1嵌入式系统概述

1.1.1嵌入式系统的发展历程 1.1.2嵌入式系统的特点 1.1.3嵌入式系统的分类 1.2嵌入式系统的应用领域 1.3嵌入式系统的实时性与可靠性1.3.1嵌入式系统的可靠性 1.3.2嵌入式系统的实时性 1.4嵌入式系统的发展趋势 2嵌入式硬件系统 2.1基本组成 2.2嵌入式微处理器 2.3总线 2.4存储器 2.5输入/输出接口设备 3嵌入式软件系统 3.1嵌入式软件系统概述 3.2嵌入式操作系统 3.3嵌入式软件开发工具 4嵌入式操作系统基础 4.1嵌入式操作系统的发展历史4.2嵌入式操作系统的体系结构4.3嵌入式操作系统的构成元素5进程管理与调度 5.1概述 5.2进程管理 5.3进程调度 5.4优先级反转 5.5多处理器调度 6进程通信

LInux 嵌入式操作系统期末试题

1.简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系 统应用的需要,在产品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 2.嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4. 性能优异 5.良好的网络支持 3.linux文件类型:1.普通文件 2.目录文件 3.链接文件 4.设备文件 a.块设备文件(硬 盘:/dev/hda1)b.字符设备(串行端口接口设备) 4.linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所 属用户组 o:其他用户第一个字符显示文件类型:-普通d目录 l 链接… 5.简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 6.编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之 后编写shell文件,删除所有用户

嵌入式操作系统的种类与特点

1.3.1 嵌入式操作系统的种类、特点与发展 1.嵌入式操作系统的种类 一般情况下,嵌入式操作系统可以分为两类: 非实时操作系统:面向消费电子产品等领域,这类产品包括个人数字助理(PDA)、移动电话、机顶盒、电子书等。 实时操作系统RTOS(Real-Time Embedded Operating System):面向控制、通信等领域,如windriver公司的vxworks、isi的psos、qnx系统软件公司的qnx等。 (1)非实时操作系统 早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。前台程序通过中断来处理事件,其结构一般为无限循环;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其它中断。 实际上,前后台系统的实时性比预计的要差。这是因为前后台系统认为所有的任务具有相同的优先级别,即是平等的,而且任务的执行又是通过FIFO队列排队,因而对那些实时性要求高的任务不可能立刻得到处理。另外,由于前台程序是一个无限循环的结构,一旦在这个循环体中正在处理的任务崩溃,使得整个任务队列中的其它任务得不到机会被处理,从而造成整个系统的崩溃。由于这类系统结构简单,几乎不需要RAM/ROM的额外开销,因而在简单的嵌入式应用被广泛使用。 (2)实时操作系统 所谓实时性,就是在确定的时间范围内响应某个事件的特性。而实时系统是指能在确定的时间内执行其功能并对外部的异步事件做出响应的计算机系统。其操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关。“在确定的时间内”是该定义的核心。也就是说,实时系统是对响应时间有严格要求的。 实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差将会引起严重后果。实时系统有两种类型:软实时系统和硬实时系统。软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成;而在硬实时系统中,不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理。通常,大多数实时系统是两者的结合。实时应用软件的设计一般比非实时应用软件的设计困难。实时系统的技术关键是如何保证系统的实时性。实时操作系统可分为可抢占型和不可抢占型两类。 嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。 从某种意义上说,没有操作系统的计算机(裸机)是没有用的。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。 操作系统的实时性在某些领域是至关重要的,比如工业控制、航空航天等领域。想像飞机正在空中飞行,如果嵌入式系统不能及时响应飞行员的控制指令,那么极有可能导致空难事故。有些嵌入式系统应用并不需要绝对的实时性,比如PDA播放音乐,个别音频数据丢失并不影响效果。这可以使用软实时的概念来衡量。

五大适合STM32的嵌入式操作系统

五大适合STM32的嵌入式操作系统 基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。1、μClinuxμClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比, μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。 μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。 在内存管理上由于μClinux是针对没有MMU的处理器设计的,不能使用处理器的虚拟内存管理技术,只能采用实存储器管理策略。系统使用分页内存分配方式,在启动时对实际存储器进行分页。系统对内存的访问是直接的,操作系统对内存空间没有保护,多个进程可共享一个运行空间,所以,

即使是一个无特权进程调用一个无效指针也会触发一个地 址错误,并有可能引起程序崩溃甚至系统崩溃。 μClinux操作系统的中断管理是将中断处理分为两部分:顶半处理和底半处理。在顶半处理中,必须关中断运行,且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的处理,而且接受中断。因为系统中存在有许多中断的底半处理,所以会引起系统中断处理的延时。 μClinux对文件系统支持良好,由于μClinux继承了Linux完善的文件系统性能,它支持ROMFS、NFS、ext2、MS-DOS、JFFS等文件系统。但一般采用ROMFS文件系统,这种文件系统相对于一般的文件系统(如ext2)占用更少的空间。但是ROMFS文件系统不支持动态擦写保存,对于系统需要动态保存的数据须采用虚拟RAM盘/JFFS的方法进行处理。在对硬件的支持上,由于μClinux继承了Linux的大部分性能,所以至少需要512KB的RAM空间,lMB的ROM/Flash 空间。 在μClinux的移植方面,。μClinux是Linux针对嵌入式系统的一种改良,其结构比较复杂。移植μClinux,目标处理器除了需要修改与处理器相关的代码外,还需要足够容量的外部ROM和RAM。 综上可知,μClinux最大特点在于针对无MMU处理器设计,

嵌入式操作系统期末考试答案

填空 1、嵌入式系统是以应用为中心、以计算机技术为基础、软硬件可裁剪、适用于应用系统,对(功能)、(可靠性)、(成本)、(体积)、(功耗)严格要求的专用计算机系统。 2、嵌入式系统开发采用的交叉开发环境是由(宿主机)和(目标机)组成的。 3、挂载设备到文件系统的命令是(mount),从文件系统中卸载设备命令是(umounts)。 4、在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面,进入vi之后,是处于 (命令)模式,要切换到(编辑)模式才能够输入文字。 5、GCC的编译流程分为4个步骤,分别为:(预处理),编译,(汇编),链接。 6、Linux系统的设备分为三类:(字符设备)、(块设备)和网络设备。 7、操作系统的功能包(处理机管理)、(存储管理)、(设备管理)、(信息管理)、(作业管理)。 选择 1、下面哪点不是嵌入式操作系统的特点。(C) (A)内核精简(B)专用性强(C)功能强大(D)高实时性 2、嵌入式Linux下常用的文件系统不包括以下哪一项(A) (A)nfs(B)romfs(C)yaffs(D)jffs 3、下面关于Shell的说法,不正确的是:(D) (A)操作系统的外壳(B)用户与Linux内核之间的接口程序(C)一个命令语言解释器(D)一种和C语言类似的程序语言 4、在Bootloader()模式下,目标机可以通过通信手段从主机更新系统。(B) (A)启动加载模式(B)下载模式(C)实时模式(D)保护模式 5、文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是: (A) (A)chmoda+xg+wexer1(B)chmod765exer1(C)chmodo+xexer1(D)chmodg+wexer1 6、在vi编辑环境中,下面()选项不是从命令行模式切换到插入模式。(C) (A)i(B)o(C)ESC(D)a 7、shell变量名命名中不包括()。(D) (A)字母(B)数字(C)下划线(D)括号 8、下列关于字符设备说法不正确的是()。(C) (A)以字节为单位逐个进行I/O操作(B)字符设备中的缓存是可有可无的 (C)支持随机访问(D)字符设备可以通过设备文件节点访问 9、以下哪一项是是硬盘设备文件()。(B) (A)fd0(B)hda(C)eth1(D)ht0 10、共享内存通信机制的缺点是()。(B) (A)需要花费额外的内存空间(B)需要使用额为的同步机制 (C)需要额外硬件支持(D)通信过程中需要反复读取内存,时间开销大 简答题 1.嵌入式操作系统在哪些方面较为突出的特点并请列举出4种目前较常用的手机嵌入 式操作系统。 四个方面:系统实时高效性硬件的相关依赖性软件固态化应用的专用性 四种手机操作系统:Window Mobile SymbianOSAndriod OSE

LInux嵌入式操作系统期末试题

简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系统应用的需要,在产 品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4.性能优异 5.良好的网络支持 linux文件类型:1.普通文件2.目录文件3.链接文件4.设备文件a.块设备文件(硬盘:/dev/hda1)b.字符设备(串行端口接口设备) linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所属用户组o:其他用户第一个字符显示文件类型:- 普通 d 目录 l 链接… 简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之后编写shell文件,删除所有用户 操作步骤:1.打开Terminal(终端): 2.输入vi shell 3.输入i 进入编辑模式 4.输入 #!/bin/bash groupadd class1 for((i=1;i<10;i++)) do username=student0$i

适合STM32的嵌入式操作系统

一下是网络收集的几种适合stm32的嵌入式操作系统,打算最近都移植一下,先做个记录。 基于STM平台且满足实时控制要求操作系统,有以下4种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这四种嵌入式操作系统的特点及不足。 1、μClinux μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。 μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU 特点进行改良,且不支持内核抢占,实时性一般。 在内存管理上由于μClinux是针对没有MMU的处理器设计的,不能使用处理器的虚拟内存管理技术,只能采用实存储器管理策略。系统使用分页内存分配方式,在启动时对实际存储器进行分页。系统对内存的访问是直接的,操作系统对内存空间没有保护,多个进程可共享一个运行空间,所以,即使是一个无特权进程调用一个无效指针也会触发一个地址错误,并有可能引起程序崩溃甚至系统崩溃。 μClinux操作系统的中断管理是将中断处理分为两部分:顶半处理和底半处理。在顶半处理中,必须关中断运行,且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的处理,而且接受中断。因为系统中存在有许多中断的底半处理,所以会引起系统中断处理的延时。 μClinux对文件系统支持良好,由于μClinux继承了Linux完善的文件系统性能,它支持ROMFS、NFS、ext2、MS-DOS、JFFS等文件系统。但一般采用ROMFS 文件系统,这种文件系统相对于一般的文件系统(如ext2)占用更少的空间。但是ROMFS文件系统不支持动态擦写保存,对于系统需要动态保存的数据须采用虚拟RAM盘/JFFS的方法进行处理。

相关主题
文本预览
相关文档 最新文档