微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 利用RTLinux开发嵌入式应用程序的方案

利用RTLinux开发嵌入式应用程序的方案

时间:03-07 来源:互联网 点击:

关Linux环境下中断处理的细节)。

硬(实时)中断是安装实时Linux的前提。要安装中断处理程序,先调用rtl_request_IRq(…),然后调用rtl_free_irq()释放它。依赖于不同的系统,实时Linux下硬(或实时)中断的延迟是15μs的数量级。较快的处理器具有较好的延迟。如果想在实时处理程序和常规Linux驱动程序中处理同一设备IRQ,必须为每一个硬中断单独设置IRQ。

列表5给出了安装实时中断处理程序的过程。RTLinux在执行实时中断处理程序时将禁止IRQ。应注意,该代码须在退出实时中断处理程序前调用rtl_hard_enable_irq()才能重新使能中断。

有两个问题影响直接从实时中断处理程序调用Linux内核功能:内核禁止所有中断及不定义执行内容。还应注意的是,这里也不能执行浮点操作。利用实时中断处理程序来控制线程执行是避免出现这些问题的好办法。本例采用pthread_wakeup_np()功能来唤醒一个实时线程。中断处理程序可处理即时的工作,余下的由该线程解决。

SMP结构的优点

实时Linux都支持多处理器架构。对称多处理器(SMP)结构采用了高级可编程中断控制器(APIC),奔腾级处理器都有片上本地APIC,可为本地处理器传送中断。SMP(甚至单处理器母板)都有I/O APIC,可收集来自外设的中断请求,并将它们传送给本地APIC。旧的8259 PIC速度很慢,所处理的中断向量数不充分,迫使设备共享中断,使得中断处理更慢。但是,APIC可解决这些问题。通过为每个设备请求设置一个特定的IRQ,系统可减少中断延迟,APIC还可加速同步代码。

实时Linux可充分利用APIC。在SMP系统中,实时调度程序利用APIC,而不是采用过时的8254芯片来完成时序分配。由于PC的兼容性,8254位于每一个ISA总线上,而且每一个再编程设备的调用都要占用处理器周期。一个千兆赫CPU要浪费数百个处理器周期来等待8MHz定时器(大约2.5μs)。APIC工作在总线频率,而且可立即执行所有的定时器操作,这意味着必须利用本地APIC时钟在AMP机器上获取更高的周期性频率(双P-III-500 CPU可在100kHz运行周期性实时线程,而无明显的性能损失)。

实时Linux能很好地执行多处理任务,它为每个CPU实施单独的进程。调用pthread_create()可创建一个在现有CPU上运行的线程。还可用pthread_attr_setcpu_np()将该线程分配给一个特定的CPU,以改变线程属性。在调用这一功能之前,必须首先初始化线程属性。

RTLinux v. 3包括reserve_cpu功能,可预留SMP平台上的一个CPU,专供RTLinux使用。它可运行于2.4x内核,RTAI也具有几乎同样的功能。

如果想将任务分给某一特定的CPU,请留意“pset”方案(http://isunix.it.ilstu.edu/thockin/pset/)。利用该内核可将一个SMP处理器专门分配给一个用户应用程序,甚至可从Linux处理器组中调用一个处理器专用于实时任务。

同步基元

早期的实时Linux没有同步基元。现在,POSIX型的旗语、互斥和信号在最新的实时Linux版本中都已出现。虽然在实时设计中采用这些同步基元还存在问题,但同步或用信号表示实时任务和用户应用程序很有意义,然而,这要求软件开发者具有高超的技能,这一问题已超出本文的讨论范围。

快速学习pthread_mutex_init()、pthread_mutex_lock()、pthread_mutex_trylock()、pthread_mutex_unlock()和pthread_mutex_destroy()等同步功能的最好方法是查看。/examples/mutex/mutex.c。特别要提醒的是。/examples/mutex/sema_Test.c文件是学习旗语的很好起点。

实时Linux发展方向

实时Linux与Linux一样仍然处于不断发展之中。每一个新的版本都添加了更多的特性和功能。实时Linux正朝着更好的POSIX 1003.x实现方向发展,最新的特性包括用户空间进程的实时支持、互斥、信号、旗语、实时存储器管理和扩展的SMP支持等。如果还未确定下一个项目采用哪个实时系统,可下载一种实时Linux版本了解一下。其实,Linux已经是一种成熟的OS,而且具备实时扩展版本,它是嵌入式应用的最佳选择之一。

RTLinux的特点

在Linux 操作系统中,调度算法(其于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽以及虚拟内存的使用等因素,都会导致系统在时间上的不可预测性,决定了Linux操作系统不能处理硬实时任务。RTLinux为避免这些问题,在Linux内核与硬件之间增加了一个虚拟层(通常称作虚拟机),构筑了一个小的、时间上可预测的、与Linux内核分开的实时内核,使得在其中运行的实时进程满足硬实时性。并且RTLinux和Linux构成一个完备的整体,能够完成既包括实时部分又包括非实时

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top