实时操作系统移植

2024-06-23

实时操作系统移植(精选8篇)

实时操作系统移植 篇1

随着计算机技术和微电子技术的推进,嵌入式技术这门新兴学科产生并且迅速发展,因此传统的单机、单任务模式已经无法满足现代嵌入式设备在功能上的需求,在这种情况下,引入操作系统是嵌入式系统发展的必然趋势。

将嵌入式设备引入操作系统,对于整个系统的硬件和软件资源,操作系统都可以合理有效地管理,这对整个系统的性能有了很大程度的提升。而当执行一个复杂的应用程序时,嵌入式操作系统可将它分解为若干个实现特定独立功能的子任务模块,模块之间则通过任务通信机制、任务管理来实现一个完整的功能,这种“自下而上”的结构化设计同时也便于系统开发。

FreeRTOS(Free Real Time Operating System)作为一个轻量级嵌入式实时操作系统,凭借其开源和完全免费的优势,满足了大多数中小型嵌入式系统对RTOS的需求,得到了越来越广泛地应用。FreeRTOS拥有源代码公开、可移植、可裁剪、调度策略灵活及轻量级等特点,适用于绝大多数处理器,在国外业界倍受开发者青睐。在此,笔者对实时操作系统FreeRTOS在S3C44b0x上的移植进行了分析研究,并设计相关实验进行验证,最后指出FreeRTOS操作系统的优势与不足。

1 FreeRTOS内核分析①

FreeRTOS内核管理(图1)包括任务管理、时间管理、内存管理和通信管理4部分[1]。

FreeRTOS通过任务控制块对任务施行管理;时间管理包括时钟的产生管理和任务延时管理;内存管理中,FreeRTOS为用户提供了4种不同的内存分配管理方案,用户可以根据需求选择合适的一种;此外,内核中还提供任务通信管理机制,分为消息管理和任务同步管理。其中同步机制又包括信号量和互斥量,FreeRTOS没有消息邮箱同步机制,所有的同步机制都是基于消息队列来实现的[2]。

2 FreeRTOS任务管理

2.1 FreeRTOS任务模型

FreeRTOS对任务数量没有限制。相较于其他实时操作系统,FreeRTOS有一个突出的特点,即在任务的优先级管理中允许不同任务之间可以设置相同的优先级。在FreeRTOS中任务可设置0~255个不同的优先级,设置的数值决定了任务的优先级别,数值越大对应任务的优先级别越高,空闲任务的优先级最低,对应的数值默认为0,它能执行的前提是CPU中不存在其他更高优先级的任务需要执行。除此之外,每当创建一个任务时,系统都会为它分配独立的任务堆栈空间和一个任务控制块TCB,而FreeRTOS整个内存空间的大小用户可以在系统配置文件中进行相应配置[3]。

2.2 FreeRTOS任务调度策略

FreeRTOS实时操作系统内核在工作时可设置为两种类型,即可剥夺方式和不可剥夺方式[4]。当系统内核设置为可剥夺工作方式时,最高优先级的任务一旦就绪,总能得到CPU的控制权,系统允许优先级别高的任务抢占剥夺优先级别低的任务的CPU使用权。同时,FreeRTOS允许不同的任务之间使用相同优先级,任务调度器可以通过时间片轮询方式来执行优先级别相同的任务。此外,FreeRTOS支持抢占式和协作式混合任务调度策略。从抢占式调度时序图(图2)可以看到,task1、task2、task3和系统空闲任务idle task,所对应的优先级分别为5、2、2、0;在t3和t6时刻,任务task2处于就绪状态,剥夺空闲任务idle task对于CPU的使用权,进入运行状态,在t7时刻,CPU的使用权则被更高优先级的任务task1剥夺。

FreeRTOS支持固定优先级任务调度,即当有两个任务处于就绪状态时,系统将优先执行优先级别高的,但在某些应用场合中系统需改变任务的优先级[5]。如遇到两个相同优先级别的任务时,系统在固定优先级调度策略中,可以通过采用FIFO(先进先出)的调度机制,即先获得CPU执行权的任务先执行,实现CPU时间片轮询的调度方式,从而处理相同优先级别的任务[1,6]。如图2所示,优先级相同的任务task2和task3在t3时刻都处于就绪状态,由于task2先进就绪链表,从而task2先获得CPU执行权,按照时间片轮询调度原则执行task2与task3。

2.3 任务同步通信

FreeRTOS操作系统中,任务间的同步通信是通过信号量与互斥量两种机制来实现的,其中信号量包括计数信号量、二值信号量和递归信号量[7,8]。这两种任务同步通信机制都是基于队列机制来实现的。通过获取信号量,需执行的任务获得CPU执行权,执行完后再通过释放信号量来让出CPU使用权。需要注意的是,通信的信号量必须在使用之前先创建[1,9]。

计数信号量的作用是事件计数和资源管理。在事件计数中,通过获取和给出信号量,对信号量的计数值减1或加1,来计数已发生的事件数与已处理的事件数之间的差值。在资源管理中,计数值用来统计资源的可用数目。具体的做法是:在初始化创建时先设定一个可用资源总数,当一个任务需获取资源的使用权时,先获得信号量同时计数信号量的值减1;在任务执行完后将给出信号量释放资源,信号量计数值加1;当系统没有可用资源时其计数值为0[1,10]。

二值信号量实质就是一个特殊的队列的宏[1,11]。定义一个二值信号量为深度为1的一个队列,队列不满时即为空,此时信号量的值为0或1,所以称为二值信号量。二值信号量和互斥量极为相似,两者不同的地方是互斥量包含了优先级继承机制,而二值信号量并没有包括。因此,在任务与任务、任务与中断之间同步运用最好选择二值信号量;而两个任务间相互排斥时更适合运用互斥量[12]。

利用二值信号量实现任务与中断同步的时序图如图3所示。在t2时刻中断发生,执行相应的中断服务函数,在中断服务函数中调用x Semaphore Give From ISR函数释放信号量。在FreeRTOS中只有带ISR结尾的API函数才能在中断处理函数中被调用。Handler_Task同步任务的优先级必须比被中断前执行的任务优先级高。中断服务例程释放信号量,同步任务被唤醒并获得CPU使用权。在t3时刻中断服务函数处理完之后,同步任务随之执行,执行完后释放信号量。同步任务又进入阻塞状态,等待下一次中断的到来。在中断服务例程中快速处理少量的操作,大量处理置于同步任务当中完成,如此便完成了中断与任务之间的同步通信。

3 FreeRTOS的移植

3.1 内核源代码

与大多数嵌入式实时操作系统一样,FreeR-TOS也针对不同编译器和不同微处理器为开发者提供了移植接口的模板。但并非所有型号都有,开发者可以根据自己选用的编译器和微处理器类型选择相应或相近的模板作为参照来进行移植。在此,笔者以ARM7_LPC2129_Kiel_RVDS例程为模板,移植到S3C44b0x处理器的目标板和ADSv1.2编译器上。此外,FreeRTOS在设计时,大部分内核代码都是由C语言编写,只有很少一部分与硬件相关的代码是用汇编实现[1,12],以便于开发者移植应用。

如图4所示,FreeRTOS支持的与硬件无关的内核所有源代码包含在4个.c文件中,分别是queue.c、tasks.c、list.c和croutine.c,其中前3个是FreeRTOS内核接口,croutine.c实现了常规功能封装,一般用于在内存资源极为有限的系统中,这里不考虑。另一部分与硬件相关的源代码,LPC2129例程中包含port.c、portasm.s、portmacro.inc和portmacro.h共4个接口文件,在移植过程中只需对这部分做相应修改即可。

3.2 移植接口实现

当以汇编代码来实现操作系统进行任务切换时,portmacro.h和portmacro.inc这两个宏文件起到保存和恢复现场的作用,分别保存寄存器R0~R14的值。相关程序如下:

参考上述代码可以根据堆栈“后进先出”的原则写出portRESTORE_CONTEXT恢复现场部分的代码,这里不做赘述。

portmacro.h文件中定义了堆栈的增长方向、一些操作系统的数据类型及临界区管理函数等与编译器相关的宏定义。

portasm.s文件在移植过程中需要根据不同CPU提供的时钟和不同的编译器语法进行修改从而给操作系统提供时钟滴答、软中断等功能。此处,编译器需修改为ADSv1.2编译器以识别语法,相关处理要以不同处理器时钟为准,这里选用S3C44b0x定时器0为系统提供时钟嘀嗒,需自行实现如下代码:

port.c文件中包含为系统任务创建堆栈初始化、启动任务调度、时钟中断和临界保护的代码。另外需自行实现的一部分代码是,为临界保护提供的开/关CPU中断函数,这两个函数是通过对S3C44b0x中CPSR寄存器中断位写1或清0,在portasm.s文件中以汇编的形式实现的,具体代码如下:

4 实验测试

4.1 任务调度实验测试与分析

根据任务的调度算法原理,系统总是运行进入就绪态任务级最高的任务。为此,首先创建一个主任务,优先级为2,在主任务中再创建3个子任务分别是灯闪烁任务Task_LED、RTC系统时钟显示任务Task_Rtc_Disp和流水灯任务Task_Group Led,优先级分别为5、2、2。主代码如下:

系统执行流程如图5所示。

串口打印的任务调度画面如图6所示。可以看出,Task_LED任务的优先级最高为5,CPU首先执行Task_LED灯闪烁任务,其他任务优先级相同,以时间片轮换调度执行,输出结果与任务调度策略分析的任务执行策略吻合。

4.2 任务同步通信测试与分析

以二值信号量为例,进一步说明FreeRTOS操作系统中的任务间进行同步通信的过程。在二值信号量被使用之前首先需要被创建,创建一个二值信号量的代码如下:

当二值信号量被创建成功后,根据其宏定义会释放出信号量。由于主任务的优先级最高,因此主任务通过x Semaphore Take函数首先获得信号量,获得CPU的执行权,最先执行Task_Main任务,代码如下:

通过PC串口终端打印出来的任务调度执行情况画面如图7所示。可以看出,信号量创建完成后发出并由Task_Main任务最先获取,当执行完Task_Main任务后,主任务调用x Semaphore Give函数,随后让出CPU使用权,之后调用延迟函数v Task Delay使主任务进入阻塞态。灯闪烁任务通过x Semaphore Take函数获得信号量,获得CPU执行权,并开始执行,依此类推。可以看出,每个任务之间同步执行策略与任务同步执行策略的分析相符。

5 结束语

通过分析FreeRTOS实时操作系统内核,操作系统完成了从ARM7_LPC2129芯片到ARM7_S3C44b0x芯片、Kiel_RVDS编译器到ADSv1.2编译器的移植,并通过任务调度和任务同步通信实验测试证明,FreeRTOS具有内核小、移植简单及功能完善等特点,为嵌入式系统的开发与应用提供了一定参考。虽然FreeRTOS在我国仍处于初步应用阶段,但凭借其开源、内核小、开发周期短及支持较多处理器架构和多种集成开发环境等优势,在我国将会成为嵌入式开发者较好的选择。

摘要:分析了实时操作系统FreeRTOS的原理、内核组成与任务管理机制。完成FreeRTOS实时操作系统在S3C44b0x硬件平台上跨平台、跨编译器的移植。同时设计了固定优先级调度与二值信号量任务间的同步通信实验,验证了FreeRTOS操作系统移植的正确性和实验设计的合理性。

关键词:FreeRTOS,移植,S3C44b0x,任务同步通信,任务调度

参考文献

[1]余晓光.基于实时操作系统FreeRTOS的Lwip协议的移植研究[D].昆明:昆明理工大学,2013.

[2]王铮,靳世久,李健,等.嵌入式实时操作系统C/OSII在管道泄漏检测中的应用[J].化工自动化及仪表,2006,33(5):55~57.

[3]黄义仿,朱晓然,赵荣珍,等.基于小波分析和矩不变量的转子故障量化特征提取研究[J].化工机械,2007,34(6):309~312.

[4]李志丹,姜印平,李亚南.基于S3C44B0X和SL811HS的USB主/从机模块设计[J].化工自动化及仪表,2006,33(4):37~39.

[5]Sakairi T,Palachi E,Cohen C,et al.Model Based Control System Design Using Sys ML,Simulink,and Computer Algebra System[J].Journal of Control Science and Engineering,2013,2013:1~14.

[6]Bauer A,Leucher M,Schallhart C.Runtime Verification for LTL and TLTL[J].ACM Transactions on Software Engineering and Methodology,2011,20(4):14.

[7]江杰,赵凤鸣,陈洪翰,等.Ethernet Powerlink调度机制与实时通信剖析[J].自动化仪表,2013,34(2):84~88.

[8]孙伟,陈杨,张明伟,等.基于ARM CM3和RTOS的矿用电磁调速电机控制器软件设计[J].煤矿机械,2014,35(9):236~238.

[9]甘勤操,陈西曲.基于V4L2的嵌入式视频监控系统的研究[J].武汉轻工大学学报,2014,33(1):61~64.

[10]梁艳.基于Open CV的ARM嵌入式网络视频监控系统[J].微型机与应用,2013,32(9):29~31.

[11]段永颢,陈睿.基于启发式的静态中断数据竞争检测方法[J].计算机工程与设计,2013,34(1):140~145.

[12]Mu Y M,Wang R,Zhang Z H,et al.Automatic Test Method Research on the Word Part of Document Format Translator[J].Chinese Journal of Clectronics,2013,22(1):55~60.

实时操作系统移植 篇2

摘要:

实时系统在工业、商业和军事等领域都有非常广泛的用途,并且已经有很多实际的应用。一般来说,实时系统通常是比较复杂的,因为它必须处理很多并发事件的输入数据流,这些事件的到来次序和几率通常是不可预测的,而且还要求系统必须在事先设定好的时限内做出相应的响应。因此,实时操作系统的实时性是第一要求,需要调度一切可利用的资源完成实时任务。这就要求我们设计好实时操作系统,了解实时操作系统的改善措施对我们非常重要。

关键字:实时操作系统;特点;实现技术;改善措施。

一、计算机实时操作系统的概念

实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。

二、实时操作系统的特点

1、高精度计时系统

计时精度是影响实时性的一个重要因素。在实时应用系统中,经常需要精确确定实时地操作某个设备或执行某个任务,或精确的计算一个时间函数。这些不仅依赖于一些硬件提供的时钟精度,也依赖于实时操作系统实现的高精度计时功能。

2、多级中断机制

一个实时应用系统通常需要处理多种外部信息或事件,但处理的紧迫程度有轻重缓急之分。有的必须立即作出反应,有的则可以延后处理。因此,需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事件进行及时响应和处理。

3、实时调度机制

实时操作系统不仅要及时响应实时事件中断,同时也要及时调度运行实时任务。但是,处理机调度并不能随心所欲的进行,因为涉及到两个进程之间的切换,只能在确保“安全切换”的时间点上进行,实时调度机制包括两个方面,一是在调度策略和算法上保证优先调度实时任务;二是建立更多“安全切换”时间点,保证及时调度实时任务。

三、实时性能主要实现技术

实时操作系统的实时性是第一要求,需要调度一切可利用的资源完成实时任务。根据响应时间在微秒、毫秒和秒级的不同,可分为强实时、准实时和弱实时三种。强实时系统必须是对即时的事件作出反应,绝对不能错过事件处理时限。例如测控领域就是要求强或接近强实时系统。在机顶盒、PDA、信息家电等应用领域,系统负荷较重的时候,允许发生错过时限的情况而且不会造成太大的危害,准和弱实时系统就可满足应用。一个强实时的操作系统通常使用以下技术:

1、占先式内核

当系统时间响应很重要时,要使用占先式内核。当前最高优先级的任务一旦就绪,总能立即得到CPU 的控制权,而CPU 的控制权是可知的。使用占先式内核使得任务级响应时间得以最优化。

2、调度策略分析

任务调度策略是直接影响实时性能的因素。强实时系统和准实时系统的实现区别主要在选择调度算法上。选择基于优先级调度的算法足以满足准实时系统的要求,而 且可以提供高速的响应和大的系统吞吐率。当两个或两个以上任务有同样优先级,通常用时间片轮转法进行调度。对硬实时系统而言,需要使用的算法就应该是调度 方式简单,反应速度快的实时调度算法了。尽管调度算法多种多样,但大多由单一比率调度算法(RMS)和最早期限优先算法(EDF)变化而来。前者主要用于 静态周期任务的调度,后者主要用于动态调度,在不同的系统状态下两种算法各有优劣。在商业产品中采用的实际策略常常是各种因素的折中。

3、任务优先级分配

每个任务都有其优先级。任务越重要,赋予的优先级应越高。应用程序执行过程中诸任务优先级不变,则称之为静态优先级。在静态优先级系统中,诸任务以及它们的时间约束在程序编译时是已知的。反之,应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。

4、时间的可确定性

强实时操作系统的函数调用与服务的执行时间应具有可确定性。系统服务的执行时间不依赖于应用程序任务的多少。系统完成某个确定任务的时间是可预测的。

四、实时操作系统中遇到的问题

1、优先级反转

这是实时系统中出现得最多的问题。优先级反转是指一个任务等待比它优先级低的任务释放资源而被阻塞,如果这时有中等优先级的就绪任务,阻塞会进一步恶化。它严重影响了实时任务的完成。

2、任务执行时间的抖动

各种实时内核都有将任务延时若干个时钟节拍的功能。优先级的不同、延时请求发生的时间、发出延时请求的任务自身的运行延迟,都会造成被延时任务执行时间不同程度的提前或滞后,称之为任务执行时间的抖动。

3、任务划分

程序在CPU 中是以任务的方式在运行,所以我们要将系统的处理框图转化为多任务流程图,对处理进行任务划分。任务划分存在这样一对矛盾:如果任务太多,必然增加系统任 务切换的开销;如果任务太少,系统的并行度就降低了,实时性就比较差。

五、实时操作系统改善措施

跟据上述讨论的实时操作系统中遇到的问题我们提出相应的改善措施,如下所示:

1、对于优先级反转的改善措施

为防止发生优先级反转,一些商业内核(如VxWorks)使用了优先级继承技术,当优先级反转发生时,优先级较低的任务被暂时地提高它的优先级,使得该任务能尽快执行,释放出优先级较高的任务所需要的资源。但它也不能完全避免优先级反转,只能称其减轻了优先级反转的程度,减轻了优先级反转对实时任务完成的影响。

优先权极限是另一种解决方案,系统把每一个临界资源与1个极限优先权相联系,这个极限优先权等于系统此时最高优先权加1。当这个任务退出临界区后,系统立即把它的优先权恢复正常,从而保证系统不会出现优先权反转的情况。采用这种方案的另一个有利之处,是仅仅通过改变某个临界资源的优先级就可以使多个任务共享这个临界资源。

2、对于任务时间抖动的改善措施 可能的解决方案有:

a.增加微处理器的时钟频和时钟节拍的频率; b.重新安排任务的优先级; c.避免使用浮点运算等。

强实时系统中,我们必须综合考虑,充分利用各种手段,尽量减少任务执行时间的抖动。

3、对于任务划分的改善措施

在任务划分时要遵循H.Gomma 原则: a. I/O原则:不同的外设执行不同任务;

b. 优先级原则:不同优先级处理不同的任务; c. 大量运算:归为一个任务; d. 功能耦合:归为一个任务; e. 偶然耦合:归为一个任务;

f. 频率组合:对于周期时间,不同任务处理不同的频率。

实时操作系统移植 篇3

随着嵌入式设备的广泛应用, 嵌入式系统和实时系统越来越受到重视。由于Linux系统全面的功能、广泛的芯片支持以及免费的特点, 利用Linux搭建嵌入式操作系统越来越成为人们的首选方案。然而, Linux是一个通用的操作系统, 其关闭中断时间过长和上下文切换时间的不确定性, 决定了它无法直接应用于嵌入式实时环境中。针对实时性应用, 由新墨西大学的Victor Yodaiken等人开发了RTLinux, 采用嵌入式的、高效的可抢先的实时调度核心, 增加了一个仿真程序来替换Linux的底层中断程序。是源代码开放的具有硬实时特性的多任务操作系统。

本文对RTLinux的结构和实时性进行了分析, 给出了内核编译的方法和移植到S34C2410开发板的步骤, 并开发应用程序对RTLinux的实时性进行了验证。

(二) RTLinux的结构

RTLinux将一个小的可抢占的实时内核植入标准Linux内核底层, 与Linux内核共享控制处理器。来自硬件的属于实时内核的中断将直接被处理, 非实时中断则通过中断仿真程序由Linux内核处理。因此, 实时内核的操作可以得到立即响应, 而且Linux内核不能延迟实时任务的执行。其原理结构图如图1所示:

RTLinux将标准Linux内核作为简单实时操作系统子内核里优先权最低的现场来运行, 并仿真了Linux内核所看到的中断控制器。这样, 在Linux进程和硬件中断之间, 本来由Linux内核完全控制, 现在在Linux内核和硬件中断的地方加上了一个RTLinux内核的控制。Linux的控制信号都要先交给RTLinux内核进行处理。

RTLinux在默认的情况下采用优先级的调度策略, 即系统调度器根据各个实时任务的优先级来确定执行的先后次序。优先级高的先执行, 优先级低的后执行, 这样就保证了实时进程的迅速调度。RTLinux将任务调度器本身设计成一个可装载的内核模块, 用户可以根据自己的实际需要, 编写适合自己的调度算法。在高速的处理器上能够获得低于10us的中断反应时间, 其优势在于实时和非实时的线程是被分离的。

(三) RTLinux内核编译

RTLinux内核的编译实际上是在Linux内核上打上一个RTLinux补丁, 其方法如下:

1. 下载内核及补丁

下载内核文件 (2.4.28内核) 及补丁 (RT-Linux3.2-rc1) , 将下载的两个文件放置到/var/tmp目录。用tar命令释放内核源代码, 然后将RT-Linux打包到Linux核中。打包命令如下:

2. 配置内核

首先通过命令make mrproper删除源代码目录中残留的.o文件和其它从属文件。然后make menuconfig, 启动内核配置程序。

3. 根据实际需要配置内核

Linux的内核配置程序提供了一系列配置选项。对于每一个配置选项, 用户可以回答"*"、"m"或""。其中"*"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块, 在需要时, 可由系统或用户自行加入到内核中去;""表示内核不提供相应特性或驱动程序的支持。不合理的配置可能造成内核编译失败。

4. 编译内核

首先, 建立编译时所需的从属文件:make dep;然后, 清除内核编译的目标文件:make clean;最后, 进行内核编译内核:make bzImage。内核编译成功后, 会在/usr/src//rtlinux/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。

5. 启动新内核

在此之前, 如果用户在配置内核时设置了可加载模块, 则需要对这些模块进行编译, 以便将来使用insmod命令进行加载。启动新内核具体步骤如下:

第一步:将/usr/src/rtlinux/linux/arch/i386/boot/bzImage文件拷贝到/boot目录下;

第二步:生成镜像文件rtlinux, 执行成功后会在/boot文件夹下生成rtlinux.img;

第三步:配置/boot/grub/brug.conf文件, 然后保存退出;

第四步:重新启动系统, 进入RTLinux;

第五步:编译RTLinux, 使用make devicds和make install命令安装实时模块, 此时应确保mbuff, rtl_fifo, rtl, rtl_posixio, rtl_sched, rtl_time等动态加载到RTLinux;

第六步:重启后进入RTLinux, 编译成功。

(四) RTLinux移植

RTLinux移植的目标板选用S3C2410开发板实现, 主要包括三个部分:交叉编译环境建立, Bootloader移植和RTLinux内核移植。

1. 交叉编译环境

交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括binutils、gcc和glibc几个部分。整个过程如下:

(1) 建立编译目录

(2) 建立内核头文件

(3) 建立二进制工具binutils

(4) 建立初始编译器bootstrap gcc

(5) 建立c库glibc

(6) 建立全套编译器full gcc

2. Bootloader移植

Bootloader是嵌入式系统的引导加载程序, 它在操作系统内核运行之前运行, 主要对硬件设备进行初始化、建立内存空间的映射图, 从而配置嵌入式系统的软硬件环境。在此, 我们选用的是U-Boot。U-Boot是德国DENX小组开发的用于多种嵌入式CPU的Bootloader程序, U-Boot支持多种包括Linux、VxWorks、NetBSD、LynxOs等在内的多种嵌入式系统以及PowerPC、ARM、x86等诸多常用系列的处理器。

首先定义开发板名称为:test2410, 并在u-boot中建立自己的开发板类型。然后修改Makefile:@./mkconfig$ (@:_config=) arm arm920t test2410 NULL S3C24x0。在目录中建立test2410, 并在include/configs/中建立配置头文件, 根据自身设置指定交叉编译工具的路径。然后就可以依照开发板的内存区的配置情况, 修改lowlevel_init.S文件。修改步骤完成后, 对其进行重编译, 测试能否成功。最后通过仿真器烧写到flash中, 就可以从NAND flash启动了。

3. 内核移植

对RTLinux内核的移植过程可以参照普通Linux内核的移植。修改Makefile, 设置flash分区, 包括分区信息的设置, 启动时初始化配置等操作;配置并编译内核, 成功后下载到开发板。

(五) 应用程序设计

1. 程序结构

由图1可知, RTLinux有两个内核。当有实时任务需要处理时, RTLinux运行实时任务;无实时任务时, RTLinux运行Linux的非实时进程。因此, 每个应用程序包括实时任务和非实时任务。实时任务是一种可由多个线程构成的内核任务, 工作在操作系统核心态的实时区, 要求尽可能简单, 只包含直接与时间相关的代码;而位于非实时区的用户进程可利用常规Linux操作系统提供的大量资源, 主要实现为数据的处理、传输以及用户界面等。实时任务与运行在Linux内核中的进程之间通过FIFO与共享内存的方式进行通讯和数据交换。图2为应用程序结构图。

2. 实时部分

通过API函数init_module完成对实时部分的初始化, cleanup_module实现关闭实时模块的任务。开发了上下文切换测试程序, 现给出主函数中循环部分的关键代码:

3. 非实时部分

非实时部分开发了一个应用程序, 在控制台下编写。其关键代码如下:

将应用程序移植到开发板中并进行测试, 其中断延迟的平均值在2.5微秒左右, 明显小于标准Linux的中断响应时间。因此RTLinux是符合实时运算标准的操作系统。

(五) 结论

RTLinux是一个具有硬实时能力的实时操作系统。可以广泛应用于工业控制、远程通信、仪器工业、多媒体等领域。本文对RTLinux的嵌入式系统结构和实时性进行分析, 完成了内核的编译和移植, 并开发了应用程序进行测试。在此基础上可以对应用程序做进一步开发, 以实现各种不同的嵌入式实时性应用。

摘要:对嵌入式实时操作系统RTLinux的结构和实时性进行了分析, 给出了内核编译的方法, 以及移植到S34C2410开发板的过程, 包括交叉编译环境建立、Bootloader移植和RTLinux内核移植。系统应用程序开发由实时部分和非实时部分构成, 给出了各部分设计的关键代码, 并进行了验证。测试结果表明, RTLinux符合实时性操作系统的要求。

关键词:嵌入式实时操作系统,RTLinux,移植,Bootloader

参考文献

[1]William Stallings.Operating Systems Internals and Design Principles[M].北京:电子工业出版社, 2001.

[2]陈文智, 王总辉.嵌入式实时系统RTLinux的实现和测试[J].计算机工程与应用, 2001 (19) :157-159.

[3]张帆.基于RTLinux的硬实时性研究[J].武汉理工大学学报, 2006 (28) :164-166.

[4]李华军, 等.RTLinux在列车检测系统中的应用[J].计算机工程, 2009 (35) :232-235.

实时性远程答疑系统 篇4

摘要:本文主要探讨了远程教育中实时性远程答疑系统的作用、特点、功能及其实现。它在远程教育中是非常重要的一环,对远程教育效果的提高起着重要的作用。

关键字:远程教育远程答疑系统答疑

一、前言

随着我国科学技术的进步和综合国力的增强,社会对高素质人才的培养,在质量和数量上都提出了新的要求。由于传统的教育模式即校内课堂教育需要投入巨额资金和大量高水平的教师,因此传统的教育模式在短期内难以得到大规模的发展,此外,校内课堂教育也难于满足在职成人继续教育和终身教育的要求。近年来,随着网络技术的发展和网络应用的普及,远程教育被认为是网络时代的新的教育形式,正在迅速发展,远程教育可以利用网络的丰富教学资源,提供各种形式的教学活动。如何处理好远程教育中学生在学习中遇到的问题是衡量远程教育效果的关键,所以说,远程答疑系统是远程教育中的重要一环。

为此,我们开发实时的远程答疑系统,通过网络实现了老师与学生进行远程交互。

二、系统的特点

本系统的一个特点就是能够实时的、准确并详细的解决学生在学习中遇到的问题,解决了基于网络数据库式答疑系统中出现的实时性差、解答不准确、答案不齐全的缺点。本系统运行时脱离网页,使学生在等待老师回答的同时,不影响浏览其它的网页。当老师把答案传递给学生时,系统会发出声音进行提示。有利于激发学生更大的学习兴趣,从而获得更好的学习效果。

三、系统的功能

本系统同时实现了答疑功能和提问功能以及学生自我测验的功能。

1、答疑功能

①学生在客户端输入问题,然后发送给服务器端;②老师在服务器端接收到学生的问题后,把准确的答案发给学生;③学生在客户端浏览老师的解答。

2、提问功能

①老师把要提出的问题发给所有的学生;②各个学生进行回答,然后再发给服务器端;③老师对学生的回答进行检查,然后再把正确答案发给所有学生。

3、学生自我测验模块功能:

当答疑时,学生如果想对自己这段时间内学习的效果做一个检查,可以选择测试选项,客户端会向服务器端发出请求,当服务器收到请求后,随机从习题数据库中抽取习题,然后发送给客户端,在客户端显示,学生对试题进行解答后再把答案发送给服务器端程序,服务器端程序再从数据库中检查答案是否正确,如果不正确,把正确的.答案传给学生。

四、系统组成及解决方案

根据系统功能的要求,本系统由服务器端程序和客户端程序组成,只要客户机和服务器都连上网络就可以进行工作。

五、系统功能的实现

本系统是由VB编写的,主要运用VB中的Winsock控件来实现客户端与服务端的链接,以及相互之间数据的发送和接收。

1、服务器端程序的设计

首先加载Winsock控件,并设置好接收和发送的端口,程序运行时进行监听和响应客户端程序的链接请求。链接成功后,把客户端的IP地址、学生姓名等信息存储起来,并给此客户端分配一个Winsock控件,然后把学生的姓名追加在下拉列表框内,以备老师选中其中一个学生进行回答或提问,也有利于老师了解有多少学生链接到服务器端上。

2、客户端程序设计

客户端运行时,自动把服务器的IP地址及端口号填写在程序中,学生只要输入自己的姓名,点击连接按钮就可以与服务器进行链接。链接成功后,就可以提出及回答问题。

3、习题数据库的设计

习题数据库用Access实现,分章节把一些较典型的习题及答案收集起来,并建立索引,以备学生从习题库中随机地抽取习题。老师可以随时对数据库中的习题进行添加,删除或者修改,以适应不同的需要。这种管理是十分必要的,首先,学习过程中,学生反复练习的一些习题显然应该换以新的内容;其次,随着学习的深入和学生水平的提高,可能会出现诸如习题难度不适应今后的学习,学习内容在一定程度上已经得到发展,导致相应试题失去了它的价值等问题。因此通过老师对习题库的管理,使它能够及时更新内容,日臻完善。

六、结束语

以上介绍了本系统,它的特点是实时性强,能够及时地、正确地处理学生的问题。但实时性的同时,要求答疑时老师和学生必须同时连接在网上,这同时也是本系统的一个弱点。作为传统教育教学的补充,Internet技术的发展,使得远程教育系统技术也在不断的更新。远程教育的明天会更辉煌,它将使任何人在任何时候和任何地方都能接受到所需要的教育,为人类经济繁荣,社会进步做出巨大的贡献。

参考文献

[1]王纯贤,吴焱明。 基于WWW的通用课程自动辅导系统[J].计算机系统应用,2000.8:21―23

[2]扬国才,王建峰,王玉昆。 基于Web的远程自学型教学系统设计及实现[J].计算机应用,2000.20.(4) :61―63

[3]宋红,李珍香。计算机网络与远程教育[J].计算机与现代化 2000.70 (6) :56―60

[4]

实时操作系统移植 篇5

μC/OS-Ⅱ是一个源码公开、可移植、可固化、可裁剪及占先式的实时多任务操作系统。每时每刻, 它总是运行就绪任务中优先级别最高的任务。其绝大部分源码是用ANSI C编写, 小部分汇编语言代码已被压缩到最低限度, 使之可运行于不同构架的微处理器。至今μC/OS-Ⅱ已在超过40种不同架构的微处理器上实现稳定运行。

数字信号处理器 (Digital Signal Processor) 是微电子学、数字信号处理、计算机技术这三门学科综合研究的成果, 在20 世纪70 年代末诞生了首个基于数字的信号处理器。随着时间的推移, DSP不断向高性能、低功耗方向发展。本文中讨论的TMS320F2812是C2000系列中性能较高的一款芯片。随着DSP性能的提高, DSP所能处理的事务越来越复杂, 编制的软件规模越来越大。如何提高软件的复用率、保证软件的实时性、降低软件开发难度是每个DSP开发者必须面对的问题。为此, 引进实时操作系统是许多DSP系统较好的解决方案。

1移植操作系统的必要性

关于TMS320F2812是否适合引入操作系统有两种看法, 一种认为2000系列作为工业控制使用, 可以做一些控制算法, 不如ARM 9那样适合用来做大系统, DSP没有必要移植操作系统; 另一种认为操作系统确实会带来额外的开销, 只要开销在允许的范围内就可以移植操作系统。我们可以先分析一下2812这款芯片本身, 2812最高运行频率为150MIPS, 做1024点的FFT变换, 实测时间在1ms量级上, 而实时操作系统的系统时钟一般在10ms~100ms之间, 可以看出CPU负荷是很低的。2812采用流水线进程, 任务切换会终止流水线, 频繁的任务切换会影响DSP性能。对于2812来说, A/D转换无疑是最频繁的引起任务切换的中断源。以10KSPS的采样率算, 每0.1ms 就有一次A/D转换, 如果以这样的速度切换, 2812宝贵的流水线资源会浪费大半。幸好我们可以采取补救措施, 如采用1024个字节的FIFO或双口RAM, 在采样到1024个数据后引发一次中断, 这样可以把中断切换时间降到系统可以接受的100ms左右。

通过以上分析, 我们认为只要系统时间要求不是特别苛刻, 在能作适当的处理将任务切换速度降低到一定程度的基础上, 2812是适合移植操作系统的。我们选择μC/OS–II移植到TMS320F2812上主要是基于以下原因: ① μC/OS-Ⅱ是为数不多的源码公开的实时操作系统;② μC/OS-Ⅱ的内核具有高度可删减性, 内核ROM的占用可小至4kb。TMS320F2812芯片能提供128kb的FLASH, 18kb的RAM, 足够μC/OS-Ⅱ使用; ③可以在μC/OS-Ⅱ官方网站下载到一些相近处理器 (TMS320LF2407) 的移植代码。

μC/OS-Ⅱ主要分为四个部分:实时操作系统内核, 与处理器相关部分, 与应用相关部分, 用户的应用系统。

2 μC/OS-Ⅱ实时操作系统内核对系统资源的管理

μC/OS-Ⅱ并非一个完整的实时操作系统, 它只是一个基于优先级的抢占式实时内核。在很多其他实时操作系统中, 程序开发人员利用操作系统提供的API函数进行应用程序的开发, 而μC/OS-Ⅱ则有所不同。要想在μC/OS-Ⅱ内核上进行应用程序的开发, 需要程序开发人员在实时内核的基础上建立自己的实时操作系统。和其它嵌入式操作系统一样, μC/OS-Ⅱ也不具有通用性, 用户要在目标处理器上创建一个多任务的实时嵌入式系统, 首先要将操作系统移植到目标处理器上, 然后把应用程序嵌入到在移植好的操作系统平台上。

μC/OS-Ⅱ的软件体系结构如图1所示。 应用程序代码是用户根据需要编写与应用相关的代码并以此定制合适的内核服务, 实现对μC/OS-Ⅱ的裁剪;与处理器无关代码就是操作系统的内核, μC/OS-Ⅱ内核提供所有的系统服务。本文采用内核将应用程序与底层硬件有机结合成一个实时系统, 与处理器相关代码可看作是内核与硬件之间的中间层, 实现同一内核在不同目标硬件体系的衔接, 根据不同处理器, 这部分代码也不同, 由用户自行编写。

3 μC/OS-Ⅱ在TMS320F2812上的移植

开发工具选用TI公司提供的CCS2000的3.3版本集成开发环境, 移植工作主要集中在与处理器相关的3个文件的编写上, 他们分别是:OS_CPU.H, OS_CPU_C.C 和OS_CPU_A.ASM。其中OS_CPU.H 文件主要包含与编译器相关的数据类型定义、堆栈类型定义、两个宏定义以及几个函数的说明。OS_CPU_C.C文件包含6个与移植有关的C语言函数。OS_CPU_A.ASM文件中包含4个用汇编语言编写的函数。

3.1与编译器有关的代码

μC/OS-Ⅱ不能使用C 语言中short、int 和long等数据类型, 因为他们都与处理器类型相关, 隐含了不可移植行性。所以, 针对不同处理器, 用户必须根据具体处理器特点编写OS_CPU.H

文件。如16位无符号整型的定义如下: typedef unsigned int INT16U;

μC/OS-Ⅱ需要先禁止中断访问代码的临界区, 并且在访问完毕后重新允许中断。μC/OS-Ⅱ定义了两个宏OS_ENTER_CR ITICAL () 和OS_EXIT_CR ITICAL () 禁止和允许中断。此外, 还需要定义堆栈增长方向以及系统软中断。对于TMS320F2812, 允许在的C语言中嵌入汇编语言, 实现方法如下:

3.2操作系统有关的函数

在OS_CPU_C.C文件中, 要求用户根据需要编写OSTaskStkInit () 函数和5 个hook函数, 其中只有函数OSTaskStkInit () 是用户必须定义的, 而其他5个hook函数是为了方便用户使用扩展功能而设定的, 可以定义为空函数。函数OSTaskStkInit () 用于创建任务时, 建立并初始化堆栈。

OSTaskCreate () 和OSTaskCreateExt () 通过调用OSTaskStkInit () 来初始化任务的堆栈结构, 使得建立好的进入就绪态任务的堆栈与系统发生中断并将环境变量保存完毕时的栈结构一致, 从而可以利用中断返回指令使就绪的任务运转起来。

3.34个汇编语言函数

OSStartHighRdy () 在多任务系统启动函数OSStart () 中调用。主要功能是将就绪表中最高优先级任务的栈指针装载到SP中, 并强制中断返回。这样就绪的最高优先级任务就如同从中断里返回到运行态一样, 使得整个系统得以运转。对TMS320F2812 而言, 这段代码编写如下:

每一次任务切换时都使用了软中断, 并将中断向量指向0SCtxSw () , 该函数所要做的就是执行任务级的任务切换, 保证CPU永远运行就绪表中优先级最高的任务。这跟OSSTartHighRdy () 类似, 但前者是由OSStart () 调用, 只是执行启动多任务的功能, 而0SCtxSw () 是任务调度函数OSSched () 通过宏0S_TASK_SW () 调用的, 执行的是多任务的调度功能, 不仅要使高优先级任务得以恢复运行, 还得将待切换出去的任务各运行环境保存起来。

OSIntCtxSw () 在退出中断服务函数OSIntExit () 中调用, 实现中断级任务切换。具体完成的任务是:调整栈指针 (因为调用函数会使任务栈结构与系统任务切换时堆栈标准结构不一致) , 保存当前任务SP, 载入就绪最高优先级任务的SP, 恢复就绪最高优先级任务的环境变量, 中断返回。这样就完成了中断级任务切换。

OSTickISR () 是系统时钟节拍中断服务函数。主要通过调用OSTimeTick () 函数检查处于延时状态的任务是否达到延时时间, 或正在等待事件的任务是否超时。这是一个周期性中断, 为内核提供时钟节拍, 频率越高系统负荷越重。其周期的大小决定了内核所能给应用系统提供的最小时间间隔服务, 一般只限于ms级, 对于要求更加苛刻的任务需要用户自己建立中断来解决。

4与应用相关的代码

与应用相关的代码是用户根据自己的应用系统来定制合适的内核服务功能。包括两个文件: OS_CFG.H 和INCLUDES.H。OS_ CFG.H用来配置内核, 用户根据需要对内核进行定制, 设置系统的基本情况。比如系统可提供的最大任务数量、是否定制邮箱服务、是否需要系统提供任务挂起功能、是否允许钩子函数等等。INCLUDES.H是系统头文件, 包括了整个实时系统所需要的内核和用户的头文件。

5 μC/OS-Ⅱ在TMS320F2812上的运行

以上完成了μC/OS-Ⅱ在TMS320LF2812的移植工作。为了测试移植代码的运行情祝, 本文中建立四个μC/OS-Ⅱ的任务, 在main函数建立一个最高优先级为0的task0任务, 然后调用OSStart () 开始任务调度。tast0任务首先运行, 它先启动系统时钟定时器 (产生100Hz的系统时钟) , 然后创建了2个任务A B, 优先级分别是5, 10。然后tast0开始每搁1秒钟挂起自己一次。tast0的程序主要代码如下:

因为最高优先级的task0的挂起, A、B任务得到运行的机会。其中B任务运行2秒钟后发信号调用A任务的运行。A任务运行3秒后结束, B任务运行5秒结束。其中每个任务每一秒发出一个正在运行的标志。整个系统的仿真情况如下:

6结束语

μC/OS-Ⅱ是一个很有优势的嵌入式实时操作系统。已在多种机构微处理器上成功移植应用, 本文成功地将嵌入式操作系统μC/OS-Ⅱ移植到了TMS320F2812上, 实现了整个平台稳定可靠的运行, 更深入了解了实时操作系统原理。将嵌入式操作系统引入到基于DSP的产品开发中, 不仅能够提高系统运行的可靠性和实时性, 还可以缩短产品的开发周期, 简化产品设计, 有利于产品功能的进一步扩展。

摘要:讨论在DSP上移植嵌入式操作系统的必要性, 并分析了嵌入式实时操作系统μC/OS-Ⅱ的特点和内核结构, 然后详述将其移植到芯片TMS320F2812上的过程。通过运行结果表明:该系统稳定可靠.经测试, 其多项性能指标均达到设计要求。

关键词:μC/OS-Ⅱ,TMS320F2812,嵌入式系统,移植

参考文献

[1]JeanJ.Labrosse, 邵贝贝等.嵌入式实时操作系统UC/OSII (第2版) [M].北京:北京航空航天大学出版社, 2003.

实时操作系统移植 篇6

1 移植分析

1.1 移植条件

μC/OS-Ⅱ由于其实现原理相对来说, 较为简单, 它只是一个小的实时内核, 因此, 其移植会比其他内核容易实现。将μC/OS-Ⅱ内核移植到一个嵌入式系统中去, 这个系统要满足以下几个条件

(1) 编译器-处理器的C编译器能产生可重入代码。重入代码就是可以被多个任务同时调用的一个函数或是一段代码, 在调用的过程中, 数据不会被破坏。可重入代码最大的特点在于它可以被执行的过程中断, 当恢复执行后, 继续执行, 数据不会由于执行的中断而被破坏, 这种数据保护性是执行多任务操作的基础。

(2) 处理器支持中断, 可以产生定时中断。多任务的协调切换是通过处理品中断完成的, 这是多任务操作系统实现的基本条件。ARMT7DMI-S处理器上可以产生定时器中断, 处理器产生的定时中断, 使μC/OS-Ⅱ系统灵活的实现多任务之间的切换。

(3) C语言开关控制处理器中断。程序中的打开或关闭中断是用来完成中断处理器中对应的寄存器的关闭与打开功能的。μC/O S-Ⅱ控制系统的中断关闭或打开是通过宏调用实现的。以ARM7TDMI-S为核心的LPC21O4处理器, 可以通过相应寄存器的设置来完成。

(4) 处理器支持堆栈操作。处理器的一个重要功能就是实现堆栈指针和CPU寄存器可内容的读出、并存储到内存中, 实现系统的实时调度。μC/OS-Ⅱn系统会在任务调度时, 保存当前任务现场, 将正在进行的任务的CPU寄存器存放在任务的堆栈中, 完成任务后, 再将原来任务的现场进行恢复, 从另一任务的堆栈中将原来的工作寄存器恢复完成。现场保护与恢复必须同出入堆栈来实现, ARM7系列的TDMILPC2104嵌入式处理器具有上述功能, 因此, μC/OS-Ⅱ系统可以被移植到这个处理器上。

1.2 编译器的选择

当前, ARM处理器核的C语言编译器有很多, 其中以SDT和ADS为典型代表, 其中, 后者是前才的升级版。GCC也是C语言编译器, 主要用于Linux操作系统, 也是使用比较广泛的一种, 但是与ADS相比, 其编译效率相对较低, 与ADS相差2-3倍, 这种低性能不利于芯片功能的实现。因此, 适合选择ADS编译程序作为调试。

1.3 任务模式的取舍

ARM7TDMI-S处理器核具有七种模式, 分别是用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式和快速中断模式。其中用户模式不是特权模式, 没有与相应的异常相联系, 因此, 是工作模式的首选。而系统模式属于特权模式中的一种, 但是它也不与相应异常相联系, 但是会出现任务代码多而对整个程序产生影响, 因此, 可以作为备用任务模式。用户可以根据自身情况通过系统提供的接口进行两种模式的切换。

2 系统μC/OS-Ⅱ的移植

μC/OS-Ⅱ移植主要涉及的函数的调用与文件编写。通过对μC/OS-Ⅱ软件/硬件结构图进行分析, 探知移植μC/OS-Ⅱ到LPC2104需要分为6步骤实现:

(1) 在OS_CPU.H中设置不依赖于编译器的数据类型。C/OS-Ⅱ的移植首先要定义其适合其特点的数据类型, 那么就要对数据类型进行重新定义, 保证移植的成功。对于与编译器有亲的short, int和long数据类型, 是不可进行移植的。

(2) 在OS_CPU.H中使用软中断SWI声明底层接口。在ADS中关键字SWl声明一个不存在的函数, 那么调用该函数就在调用这个函数的地方插入一条swl指令, 并且可以制定功能号。使用不同的的功能号区分不同的函数, 实现的主要函数的功能。

底层函数将堆栈的增长方向进行了定义, 并利用软中断的方式定义了开关中断和运行最高任务函数。只有使用函数正常调用执行软中断, 并且向中断向量定义软中断函数, 才能完成开关中断和运行最高任务函数。

(3) OSIntCtxSw () 。OSIntExit () 执行切换功能是通过调用OSIntCtxSw () 来实现的。因为OSIntCtxSw () 是在ISR中被调用的因此, 被中断的任务处理器寄存器都会被保存到堆栈之中, 而采用软中断方式的任务切换函数OSIntCtxSw () 由于被调用前, 所有的处理器已经被保存到堆栈中了, 因此, OSIntCtxSw () 与OS_TASK_SW可以采用同一代码段。

(4) OSTickISR () 。此函数的实现原理借鉴了专业人士提出的μC/OS-Ⅱ简化移植方法, 用户可以通过向系统提供一个周期性的时钟源, 使时间延迟和超时功能的实现。

(5) OSTaskInt () 。OSTaskInt () 包括OSTaskCreat和OSTaskExt调用, 它实现的主要功能是当初始化任务堆栈结构完成后, 重新返回到堆栈指针地址, 并保存到任务控制块0S_TCB中。

(6) 钩子函数。只有OS_CFG.H中的OS_CPU_HOOKS_EN为1时才会产生O S T a s k C r e a t H o o k () , O S T a s k D e l H o o k () OSTaskSWHook () , OSTaskStatHook () , OSTimeTickHook () , 而这5个函数可以无代码, 本移植为使用扩展功能, 故定义OS_CPU_HOOKS-EN为0, 所以不必实现这5个函数。

摘要:实时操作系统μC/OS-Ⅱ在ARM处理器LPC2104上的移植是易于实现的。本文分析了μC/OS-Ⅱ所具备的移植条件, 并探讨了如何实现这个移值过程。

关键词:实时操作系统,ARM处理器,LPC2104上的移植

参考文献

[1]乔志华, 许谨, 曹江涛.嵌入式操作系统μC/OS-Ⅱ在LPC2104上的移植与应用[J].自动化技术与应用, 2006 (3) .

[2]李勇, 郑萍, 熊利.嵌入式μC/OS-Ⅱ在LPC2104上的移植及通信设计.微计算机信息[J].2006 (2) .

[3]小徐.ARM新锐Cortex-A7核心架构解析[J].电脑迷, 2013 (1) .

实时操作系统移植 篇7

μC/OS-Ⅲ(Micro C OS Three,微型的C语言编写的操作系统第3版)是一个可升级的、可固化的、基于优先级的实时内核,Micrium公司于2011年8月公开原码,它具备良好的移植性,可以在多种微控制器中运行, 加快了嵌入式软件应用开发。相比上一代μC/OS-Ⅱ, μC/OS-Ⅲ可以将多个任务设置在同一优先级上,并按时间片轮转调度,且任务数量是无限制的[1]。而随着ARM在嵌入式领域的不断发展,Cortex-M3器件在嵌入式领域可谓风生水起,它高效的NVIC(Nested Vectored Inter-rupt Controller)、高性能的RISC(Reduced Instruction Set Computer)以及固定的存储器位置意味着以它为内核的微控制器都可以方便地移植软件,因此在Cortex-M3上使用μC/OS-Ⅲ实时内核是极为方便的[2]。

1 F28M35x器件和μC/OS-Ⅲ

F28M35x器件内部集成了Cortex-M3内核和DSP-C28内核,可以通过核间通信交互协作[3]。高达132 KB的片上RAM、完善的外设和高速的时钟意味着它可以胜任许多任务:从通信到实时控制。M3内核高效的架构和快速的中断响应,使其适合使用嵌入式实时内核[4]。 Cortex-M3配备的MPU还具备特权级和用户级操作,增加安全性[5]。

μC/OS-Ⅲ 和Cortex-M3是密切相连的,主要包括NVIC(嵌套向量中断控制器)、Pend SV(可挂起的系统服务请求)、Sys Tick(系统节拍定时器)等。NVIC是与M3内核紧密相联的中断控制器,它支持中断嵌套、动态优先级、中断屏蔽等,移植μC/OS-Ⅲ离不开它。Pend SV典型的应用场合是上下文切换,它通过操作系统挂起中断,其优先级被设置为所有中断中最低,所有其他的中断服务都执行完毕时它才会被执行,最终实现任务切换。而Sys Tick作为系统的心跳,会寻找优先级最高的任务,在多任务调度中起着关键的作用[6]。

在Micrium网站可以找到μC/OS-Ⅲ源代码,配合TI提供的Mware库和Code Composer Studio IDE及control-SUITE,移植工作就可以轻松展开。

2 μC/OS-Ⅲ移植工作

2.1文件结构

μC/OS-Ⅲ工程中的文件可以分为5个部分:实时内核相关、CPU相关、板级支持、芯片级支持、常用库支持。为了让芯片正常工作,需要修改板级的代码如时钟配置和初始化。其次,对于不同编译器、不同微控制器, 内核和CPU部分的代码也需要调整。μC/OS-Ⅲ还提供了独立于编译器和CPU的数据类型、函数接口等,方便修改。此外,字符串处理、数学库等也独立提供,方便不同平台移植。

2.2内核相关

与内核相关的文件名都以os开头,其最重要的核心内容在os_cpu_a.asm中,也是修改的首要对象。内核最重要的工作是负责任务调度。在创建好任务并开始运行μC/OS-Ⅲ时,CPU首先要选择最高优先级且已就绪的任务来执行,这个事件由OSStart High Rdy()来执行, 它在OSStart()中调用一次。内容包括:将Pend SV中断优先级设为最低,将进程栈指针PSP清零准备首次上下文切换,将主栈指针MSP设为为其分配的内存地址,挂起Pend SV中断并开启中断。注意它只运行一次。修改后的内容如图1所示。其中NVIC寄存器和分配的堆栈地址宏是事先定义的,在CCS(Code Composer Studio) 中用.word关键词,此外,全局符号用.global,外部引用用.ref关键词。

在这之后就开始了多任务调度模式。在Cortex-M3中,上下文切换只需手动保存和恢复R4-R11和PSP寄存器,x PSR,PC,LR,R12,R0-R3由硬件自动管理[7]。由于Pend SV的优先级已经被设为最低,因此可利用它的缓期执行特点来切换任务,当执行一个系统调用如延时或时间片轮转调度时可触发上下文切换,它会在其他重要的任务都完成后才会执行动作。因为当其他中断在执行时如果产生了上下文切换,将产生错误中断。而Pend SV的机制会确保这一切准确无误且不会占用太多CPU资源。修改方式类似OSStart High Rdy()。

在u C/OS-Ⅲ中,任务调度由OSSched()来进行,它不断找出优先级最高且就绪的任务,并挂起Pend SV中断来调度。它在系统延时、事件同步中都会被调用到, 而中断到任务的调度则在OSInt Exit()中,即退出中断时引用,最终也是通过挂起Pend SV来调度的。

2.3 CPU相关

与CPU相关的改动主要在cpu_a.asm中。这里定义了开关中断、临界区函数等内容。临界区又叫关键代码段,在执行时绝对不能被打断,因此中断必须被关闭。 将中断信息保存起来然后在退出临界区前再恢复,才能保证系统正确执行。 这些由CPU_SR_Save和CPU_SR_Restore来执行,它们是成对使用的。修改后的代码如图2所示。

任务调度过程中,可以利用Cortex-M3的指令CLZ查找优先级最高的任务,而不必采用以往查表的方式。 CLZ指令可找出一个字的第一个有效位的位数,将它写成一段汇编指令如图2所示,它在OS_Prio Get Highest中引用,用于优先级调度。

此外,在cpu.h中给出处理器的数据类型、字长、栈、 临界区等定义。Cortex-M3字长为32位,堆栈类型为满递减堆栈[8](FD)。

2.4板级支持

在bsp.c中包含了板级初始化的内容,包括配置时钟、配置Sys Tick中断、配置LED的GPIO,如图3所示。 在TI提供的例程中可以找到完善的初始化方法,它们更加简洁。注意在此处即可打开Sys Tick中断,周期为1 ms。中断入口为OS_CPU_Sys Tick Handler,将它写入到启动文件的中断向量表中。这些内容修改完以后,再选择自己手头板载的LED灯管脚来配置。在TI的TM-DXDOCKH52C1开发板上LED灯使用了PC6,PC7引脚。打开GPIOC时钟并将引脚配置为输出。如果使用了CCS提供的启动文件,要将中段向量地址手动传入到RAM中,可以使用Int Flash VTable()来实现。

完成所有修改以后就可以编译工程了。

3任务调度

在创建自己的任务以前先了解一下任务优先级的概念。在μC/OS-Ⅲ中任务的优先级在创建任务时被传入,其值越大优先级越低,因此优先级0为最高优先级, 空闲任务的优先级为优先级最大值减去1。优先级最大值默认为10。

接下来需要了解任务是如何调度的。通常来说在使用系统延时OSTime Dly HMSM或OSTime Dly时,等待同步事件如信号量到来,即任务进入阻塞状态时系统会进行任务调度,开始执行已经就绪的任务中优先级最高的任务。此外,系统内部时基任务OSTick Task也可以用于任务切换,它在创建时被设置的默认优先级为7,用户可以修改它的优先级,通常来说它的优先级应该设置为比重要任务的优先级稍低,但高于那些希望被抢占的任务。例如有一个低优先级的任务是一个死循环而没有阻塞,高优先级的任务在就绪时希望去抢占这个低优先级的任务,在μC/OS-Ⅲ中就是由OSTick Task这个任务来实现的,但OSTick Task的优先级应该要高于那个低优先级的任务[9]。

现在分别创建Task LED1,Task LED2,Task UART三个任务,分别控制2盏LED灯和输出OSTask Ctx Sw Ctr任务切换值,并赋予不同优先级,如图4所示。可以看到灯开始闪烁并且串口有信息输出,可见任务调度是成功的。 在μC/OS-Ⅲ中可以创建足够多的任务,只要内存足够使用[10]。学会了任务创建和任务调度以后,操作系统最基础的使用方法就已经掌握了。

4结语

本文对μC/OS-Ⅲ实时内核进行了深入探讨并阐述了核心内容,通过将其移植到F28M35x器件平台中实现多任务调度,了解了 μC/OS-Ⅲ 的使用原理。 由于 μC/OS-Ⅲ可在众多器件中移植,因而应用的开发将变得十分容易,可以简化软件框架的部署,将更多精力用于应用层设计,为工程开发提供了更多的选择。

参考文献

[1]宫辉,龚光华,黄土琛.从μC/OS-Ⅱ到μC/OS-Ⅲ的各种改进[J].单片机与嵌入式系统应用,2012,12(10):79-81.

[2]LABROSSE J J.μC/OS-Ⅲ:the real-time kernel[M].US:Texas Instruments,2015.

[3]Texas Instruments.SYS/BIOS inter-processor communication(IPC)1.25 user′s guide[R].US:Texas Instruments,2012.

[4]Texas Instruments.TI SYS/BIOS v6.35 real-time operating system user′s Guide[R].US:Texas Instruments,2013.

[5]Texas Instruments.Concerto F28M35x technical reference manual[R].US:Texas Instruments,2015.

[6]ARM.Cortex-M3 technical reference manual[R].Cambridge:ARM,2010.

[7]YIU J.ARM Cortex-M3权威指南[M].2版.北京:清华大学出版社,2014.

[8]LABROSSE J J.Hardware-accelerated RTOS:μC/OS-ⅢHWRTOS and the R-IN32M3[R].US:Texas Instruments,2014.

[9]黄土琛,宫辉,邵贝贝.μC/OS-Ⅲ对任务调度的改进[J].单片机与嵌入式系统应用,2012,12(11):78-80.

实时操作系统移植 篇8

1 材料与方法

1.1 材料

1.1.1 实验动物及分组

近交系雄性BN(brown norway,CrlVr)大鼠18只,220~260 g,近交系雄性LEW(lewis,CrlVr)大鼠6只,200~240 g,均由北京维通利华实验动物技术有限公司提供,SPF级饲养于新疆医科大学第一附属医院实验动物科学研究部(国际AAALAC实验室),术前12 h禁食。实验采取完全随机设计,随机数字法将BN大鼠分为两组各6只,分别作为耐受组(BN→BN)及排斥组(LEW→BN)的受体。实验征得新疆医科大学第一附属医院伦理委员会审查同意。

1.1.2 主要试剂与仪器

DEPC(美国Sigma),Trizol Reagent(美国Invitrogen),反转录试剂盒及SYBR GreenⅠreal-time PCR试剂盒(大连Takara),PCR产物纯化试剂盒(北京TIANGEN),其他试剂均为国产分析纯。生化仪(美国Beckman)、显微镜及显微图片采集系统(德国Leica),低温高速离心机(美国BIO-RAD),PCR仪(C1000TM,美国BIO-RAD),real-time RT-qPCR仪(CFX96TM,美国BIO-RAD),核酸蛋白测定仪(NanoDrop1000,美国Thermo),凝胶成像仪(美国BIO-RAD)。

1.2 方法

1.2.1 大鼠肝移植模型的复制及标本采集

采用KAMADA两袖套法行大鼠原位肝移植术[4],术后单笼喂养,连续3 d肌内注射青霉素[50 000u/(kg·d)];术后7 d处死受体,下腔静脉取血3 m L,4℃静置,3 000 r/min分离血清备用;无菌采取移植肝,迅速液氮冻透后-80℃保存备用;另取肝组织于4%中性福尔马林中固定24 h,用于病理学检测。

1.2.2 肝功能检测及病理组织检测

生化分析仪测定血清中丙氨酸氨基转移酶(ALT)、天冬氨酸转移酶(AST)的含量。固定好的肝组织石蜡包埋,HE染色,光镜观察肝组织病理学变化。参照Banff标准[5]RAI评分比较两组移植肝的排斥情况。

1.2.3 引物设计

选择β-actin作内参,参考大鼠PD-L1和β-actin在Genebank中的基因序列(NM-001191954.1和NM-031144.2),用Primer 5软件和Oligo软件进行分析,根据同源性高的区域设计引物,引物由Takara(中国)生物公司合成(见表1)。

1.2.4 总R NA的提取和c DNA的逆转录

Trizol法提取肝脏组织总RNA,用NanoDrop核酸蛋白测定仪定量总RNA,甲醛变性凝胶电泳分析其纯度。按照反转录试剂盒说明书反转录合成c DNA,PCR产物-20℃保存备用。

1.2.5 PD-L1及β-actin退火温度的确定

根据PD-L1和引物β-actin的Tm值,分别设置温度梯度45~55℃和50~60℃进行PCR扩增,选择最佳退火温度。

1.2.6 实时荧光定量PCR反应

以c DNA为模板进行PCR扩增,将PD-L1和β-actin的PCR产物纯化后分别10倍梯度稀释为10-2~10-7和10-3~10-8,各6个浓度梯度作为模板,并ddH2O2代替模板设置阴性对照,进行荧光定量PCR扩增,建立标准曲线。反应条件为预变性95.0℃3 min,变性95.0℃10 s,退火30 s,PD-L1、β-actin退火温度分别为50.7℃和53.9℃,分别40个循环,每个循环后采集荧光生成扩增曲线。65~95℃按0.5℃增值进行熔解曲线分析,以评价PCR反应及引物的特异性。根据PD-L1和β-actin PCR扩增标准曲线,分析E-values、R2values和斜率(Slope),判定所建立的实时荧光定量PCR方法的可靠性。通过10倍梯度稀释的模板进行PCR扩增以检验其敏感性,同时,以上述6个浓度梯度的c DNA为模板,分别进行5次PCR扩增,分别计算5次PCR的Ct值的均数、标准差和变异系数(CV),以判定稳定性和可重复性。2%琼脂糖凝胶电泳鉴定PCR扩增产物。

1.2.7 检测移植肝PD-L1 mR NA的表达

利用所建立的real-time TR-q PCR方法检测大鼠肝移植耐受组和排斥组移植肝中PD-L1和β-actin的初始模板量(SQ值),以PD-L1/β-actin作为PD-L1m RNA的相对表达量。

1.3 统计学分析

采用SPSS 17.0统计软件包进行统计分析,数据以均数±标准差表示,组间比较采用t检验,检验水准为α=0.05。

2 结果

2.1 术后受体大鼠一般情况及肝功能分析

排斥组术后第5天开始精神萎靡,眼眶分泌物增多,皮肤黄疸;第7天对外界刺激反应迟钝,腹水;耐受组术后第7天活动减少,余未见明显异常。耐受组ALT、AST均低于排斥组,差异有统计学意义(均P<0.01)(见表2)。

注:覮与排斥组比较,P<0.01

2.2 组织病理学分析

耐受组无明显急性排斥反应发生(见图1A),而排斥组肝脏排斥损伤严重(见表2),汇管区有大量的淋巴细胞、中性粒细胞、单核细胞浸润及纤维细胞出现,肝小叶结构紊乱,可见肝细胞空泡样变,有点状和灶状坏死(见图1B)。

2.3 P D-L1和β-actin退火温度的确定

分析PCR溶解曲线,按Ct值越小,峰高越高,检测的灵敏度越高的原则,分别选择PD-L1和β-actin的最佳退火温度为50.7℃和53.9℃。

2.4 P D-L1和β-actin实时荧光定量R T-P C R特异性

分析2个基因片段的PCR扩增熔解曲线,熔解温度均在84.0℃,并且为特异单峰,无其他杂峰(见图2),阴性对照未见任何扩增曲线。2%琼脂糖凝胶电泳可见两基因扩增条带均在150 bp左右,未见异常扩增杂带(见图3)。表明没有发生非特异性扩增反应,无引物二聚体产生,所设计的引物特异性高。

2.5 P D-L1和β-actin实时荧光定量R T-P C R敏感性分析

以10倍梯度稀释纯化的PD-L1及β-actin PCR产物为模板,荧光定量PCR检测结果显示,6个稀释度均获得较好的扩增曲线,且指数增长期的曲线平行,反映了PCR的扩增效率相近;而不同稀释度之间的Ct值相差均匀,符合定量PCR的Ct值与起始拷贝数之间严格的线性关系(见图4)。

2.6 P D-L1和β-actin实时荧光定量R T-P C R可靠性

分析两者的标准曲线,E values、R2 values和斜率(Slope)分别为:PD-L1(E=101.2%,R2=0.996,Slope=-3.604),β-actin(E=98.8,R2=0.998,Slope=-3.580)。

2.7 P D-L1和β-actin实时荧光定量R T-P C R稳定性和可重复性

分别对6个不同浓度的样本重复检测5次得到的Ct值进行汇总,分别计算其均数,标准差和5次检测结果的变异系数(CV)。其中β-actin稀释103倍时变异系数最大(2.04%),PD-L1稀释105倍时变异系数最小(0.93%),变异系数均小于2.5%,表明该方法具有较好的稳定性和可重复性(见表3)。

2.8 实时荧光定量R T-P C R检测P D-L1 m R N A结果

以PD-L1基因与β-actin基因的初始模板量之比作为PD-L1 m RNA的相对表达量,结果显示术后第7天大鼠移植肝PD-L1基因相对表达耐受组[(0.95±0.10)×10-2]高于排斥组[(0.81±0.09)×10-2],差异有统计学意义(t=2.62,P=0.026,P<0.05)(见图5)。

3 讨论

免疫耐受是解决肝移植免疫排斥的最佳手段,因此关于肝移植免疫耐受的研究仍然是目前肝移植学科研工作者最关注的热点。PD-L1作为共刺激分子之一,与其受体PD-1结合能提供负性刺激信号,抑制T细胞的活化[6]及相关细胞因子的产生[7],起着促进移植免疫耐受的重要作用。MORITA等[8]实验研究表明,在异体小鼠肝移植免疫耐受模型中,移植物细胞中PD-L1表达增高。

笔者研究的病理排斥评分及肝功能均显示,LEW→BN排斥明显,是大鼠肝移植急性排斥反应模型较好的匹配方式。笔者研究还对大鼠PD-L1 m RNA的表达建立了稳定的real-time RT-qPCR检测法,并在建好的肝移植模型中运用,探讨其在大鼠肝移植免疫耐受中的作用。

SYBR GreenⅠ染料法是根据实时监测SYBR GreenⅠ结合双链DNA产生的荧光来定量目标模板[9,10],从而反映组织目的基因的表达,具有不需要探针、可减少实验准备和运行投入的特点[11],成为最常用的real-time q PCR,具有特异性高、灵敏度好的特点[12]。但荧光染料SYBR GreenⅠ能结合任何双链DNA序列,可产生假阳性信号,所以其特异性完全由引物决定。PCR产物琼脂糖凝胶电泳显示,2个基因都只有相应大小的单一扩增条带,熔解曲线为特异性单峰,表明引物特异性好。6个稀释度均获得较好的扩增曲线,且指数增长期的曲线平行,PCR的扩增效率相近;而不同稀释度之间的Ct值相差均匀,提示敏感性高。对6个不同浓度的样本重复检测5次,Ct值变异系数均小于2.0%,表明该方法具有较好的稳定性和可重复性;标准曲线显示2个基因的扩增效率均在100%左右,说明结果可靠稳定。realtime RT-qPCR检测PD-L1的m RNA灵敏度高、准确性,特异性好,操作简单,可实现自动化与高通量检测。

综上所述,笔者成功建立了大鼠源PD-L1的real-time RT-qPCR检测方法,为研究PD-L1基因在肝移植免疫耐受中的作用提供了新的手段。

实验还运用建立的real-time RT-qPCR方法检测大鼠肝移植耐受组和肝移植排斥组移植肝中PD-L1基因的表达,结果显示,耐受组PD-L1表达比排斥组高,提示PD-L1可能在大鼠肝移植免疫耐受中起着重要的促进作用。可能存在当宿主高表达PD-L1时,机体出现T细胞活化受到抑制或T细胞无能,宿主免疫细胞对移植肝的免疫攻击减弱,进而达到诱导肝移植免疫耐受的目的。这为肝移植免疫耐受的诱导提供了新的思路,但是其具体机制有待进一步研究。

参考文献

[1]SHARPE AH,WHERRY EJ,AHMED R,et al.The function of programmed cell death1and its ligands in regulating autoim-munity and infection[J].Nat Immunol,2007,8(3):239-245.

[2]孙岩,陈晰,付星华,等.淋巴细胞功能相关抗原1单抗对大鼠肝移植慢性排斥反应影响的实验研究[J].中国现代医学杂志,2010,20(13):1975-1981.[2]SUN Y,CHEN X,FU XH,et al.Experimental study of LFA-1 monoclonal antibody on chronic liver rejection in Rats[J].China Journal of Modern Medicine,2010,20(13):1975-1981.Chinese

[3]DONG H,STROME S,SALOMAO DR,et al.Tumor-associated B7-H1promotes T-cell apoptosis:a potential mechanism of im-mune evasion[J].Nat Med,2002,8(8):793-800.

[4]KAMADA N,CALNE RY.A surgical experience with five hun-dred and thirty liver transplantation in the rat[J].Surgery,1983,93(1):64-69.

[5]ANTHONY J,DEMETRI S,KENNETH P,et al.Banff schema for grading liver allograft rejection:an intemational consensus document[J].Hepatol,1997,25:658-663.

[6]KARIN S,JUDITH S,MANFRED W,et al.PD-1-PD-L1 Pathway is involved in suppressing alloreactivity of heart infil-trating T cells during murine GVHD across minor histocompati-bility antigen barriers[J].Transplantation,2007,84(2):214-222.

[7]HOLETS LM,CARLETTI MZ,KSHIRSAGAR SK,et al.Differ-entiation-induced posttranscriptional control of B7-H1in human trophoblast cells[J].Placenta,2009,30(1):48-55.

[8]MORITA M,FUJINO M,JIANG G,et al.PD-1/B7-H1Inter-action Contribute to the Spontaneous Acceptance of Mouse Liver allograft[J].Am J Transplant,2009,10(1):40-46.

[9]KANTI P,SALLENE W,ANITA A,et al.Design and validation of real-time reverse transcription-PCR assays for detection of pandemic(H1N1)2009virus[J].J Clin Microbiol,2009,47(11):3454-3460.

[10]张轶庠,张朝霞,杨江根,等.实时荧光定量PCR检测CD 258在前列腺癌组织中的表达[J].中国现代医学杂志,2010,20(2):188-191.[10]ZHANG YX,ZHANG ZX,YANG JG,et al.Study on CD 258 gene expression in prostate cancer tissues using real-time fluo-rescence quantitative PCR[J].China Journal of Modern Medicine,2010,20(2):188-191.Chinese

[11]陈建,李敏伟,张国兵,等.SYBR荧光实时定量PCR检测非小细胞肺癌组织与外周血中RRM1和ERCC1及BRCA1基因表达水平[J].医学版:浙江大学学报,2010,39(6):628-633.[11]CHEN J,LI MW,ZHANG GB,et al.Detection of RRM1,ER-CC1and BRCA1gene expression in non small cell lung cancer tissues and peripheral blood by SYBR real time fluorescent quantitative PCR[J].Medical Sciences:Journal of Zhejiang Uni-versity,2010,39(6):628-633.Chinese

上一篇:现代性贫困观的贫困下一篇:不等式恒成立解题策略