当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]在以计算机技术、通讯技术相结合的信息时代的快速发展和互联网的广泛应用的形势下,3C(Computer、Communication、Consumer)合一的趋势已经形成。

在以计算机技术、通讯技术相结合的信息时代的快速发展和互联网的广泛应用的形势下,3C(Computer、Communication、Consumer)合一的趋势已经形成。

1.引言

从上世纪八十年代开始,开始出现各种各样的商用嵌入式操作系统,这些操作系统大部分都是为专用或通用系统而开发,如VxWorks、Windows CE、pSOS、Palm OS、OS-9、LynxOS、QNX、LYNX 等,它们的优点是为用户提供良好的开发环境,提高了应用系统的开发效率,运行效率高、实时性好,缺点是价格昂贵且源代码封闭。这就不仅影响了开发者的积极性,而且使得整个产品的成本急剧上升。

结合国内实情,嵌入式系统需要的是一套高度简练、界面友好、质量可靠、应用广泛、易开发、多任务、价格低廉的实时操作系统。

在嵌入式产品的开发中,有必要寻找一种廉价的嵌入式实时操作系统,以降低产品的开发成本和系统复杂度。由于Linux的具备的诸多优点,对Linux进行适当的改造后作为廉价的嵌入式实时操作系统是一个值得探讨的、具有实际意义的问题。

2.Linux的特点

Linux是个与生俱来的网络操作系统,成熟而且稳定。Linux是源代码开放软件,不存在黑箱技术,任何人都可以修改它,或者用它开发自己的产品。 Linux系统是可以定制的,系统内核目前已经可以做得很小。一个带有中文系统及图形化界面的核心程序也可以做到不足1MB,而且同样稳定。Linux作为一种可裁减的软件平台系统,是发展嵌入式产品的绝佳资源,遍布全球的众多Linux爱好者又能给予Linux开发者强大的技术支持。因此,Linux作为廉价的嵌入式实时操作系统的选择,是非常有发展前途的。[2][3]

(1)与硬件芯片的紧密结合

嵌入式Linux的一大特点是:与硬件芯片(如SOC等)的紧密结合。它不是一个纯软件的Linux系统,而比一般操作系统更加接近于硬件。嵌入式Linux的进一步发展,逐步地具备了嵌入式RTOS的一切特征:实时性及与嵌入式处理器的紧密结合。

(2)开放的源代码

嵌入式Linux的另一大特点是:代码的开放性。代码的开放性是与后PC时代的智能设备的多样性相适应的。代码的开放性主要体现在源代码可获得上,Linux代码开发就像是“集市式”开发,任意选择并按自己的意愿整合出新的产品。

对于嵌入式Linux,事实上是把BIOS层的功能实现在Linux的driver层。目前,在Linux领域,已经出现了专门为Linux操作系统定制的自由软件的BIOS代码,并在多款主板上实现此类的BIOS层功能。

3.RT-Linux的实现机理

RT-Linux对Linux内核进行改造,将Linux内核工作环境做了一些变化,如图1所示:

从上图可以看出,在Linux内核和硬件中断的地方,加上了一个RT-Linux内核的控制。Linux的控制信号都要先交给RT-Linux内核先进行处理。在RT-Linux内核中实现了一个虚拟中断机制,Linux本身永远不能屏蔽中断,它发出的中断屏蔽信号和打开中断信号都修改成向RT- Linux发送一个信号。如在Linux里面使用“sti”和“cli”宏指令来屏蔽和使能中断,是通过向x86处理器发送一个指令,而RT-Linux 修改了这些宏指令,使得只是让RT-Linux里面的某些标记做了修改而已。对所有的中断,分成Linux中断和实时中断两类,如果RT-Linux内核收到的中断信号是普通Linux中断,那就设置一个标志位;如果是实时中断,就继续向硬件发出中断。在RT Linux中执行sti将中断打开之后,那些设置了标志位表示的Linux中断就继续执行。因此,cli并不能禁止RT Linux内核的运行,却可以用来中断Linux。Linux不能中断自己,而RT-Linux可以。

RT-Linux的设计原则:在实时内核模块中的工作尽量少,如果能在Linux中完成而不影响实时性能的话,就尽量在Linux中完成。因此,RTLinux内核尽量做的简单,在 RT-Linux内核中,不应该等待资源,也不需要使用共享旋转锁(SpinLock),实时任务和Linux进程间的通信也是非阻塞的,从来不用等待进队列和出队列的数据。

RT-Linux将系统和设备的初始化交给了Linux完成,对动态资源的申请和分配也交给了Linux。RT-Linux使用静态分配的内存来完成硬实时任务,因为在没有内存资源的时候,被阻塞的线程不可能具有硬实时能力。

4.改变Linux内核的体系结构

Linux的内核体系采用的是Monolithic,在这种体系结构中,内核的所有部分都集中在一起,而且所有的部件在一起编译连接。这样虽然能使系统的各部分直接沟通,有效地缩短任务之间的切换时间,提高了系统的响应速度,实时性好并提高了CPU的利用率,但在系统比较大的时候体积也比较大,与嵌入式系统容量小、资源有限的特点不符合。而另外一种内核体系结构 MicroKernel, 在内核中只包括了一些基本的内核功能如创建和删除任务、任务调度、内存管理和中断处理等部分,而文件系统、网络协议栈等部分都是在用户内存空间运行。这种结构虽然执行效率不如Monolithic内核,但大大减小了内核的体积,同时也极大地方便了整个系统的升级、维护和移植,因此更能满足嵌入式系统的特点需要。为此,为使嵌入式Linux的应用更加广泛,可以考虑将Linux目前的Monolithic内核结构中的部分结构改造成MicroKernel体系结构。通过这种折中办法,可以使得到的Linux既具有很好的实时性,又能满足嵌入式系统体积小的要求。

5.RT-Linux的编程接口(API)及编程方法示例

(1)RTLinux的编程和控制接口(API)。

通过使用RTLinux的编程和控制接口(API),可以提供对实时任务的创建和删除、任务的调度和控制等功能。API函数主要有如下几类:

1)中断控制API函数;2)时钟控制和获取;3)线程的创建和删除;4)POSIX方式的驱动接口;5)FIFO设备驱动程序;6)串口驱动程序的API函数;7)mbuff驱动API函数;8)浮点运算API函数。

(2) RTLinux的编程方法示例

该程序的原理是测出在RT-Linux中进行实时任务调度过程中调度需要花费时间的多少。算法如下:

/*实时任务端*/

对于每500个周期

等待上一个周期的任务完成

获得当前时间和上次周期任务完成时间的差,就是调度的时间

循环

向FIFO输出500个周期中完成的最大值和最小值。

/*应用程序端*/

读取FIFO设备,获取最大值和最小值

在屏幕上打印出来

这种编程方法是进行RT Linux编程的通用方法,将一个任务分为实时部分和非实时部分,在实时部分完成的是实时任务;在非实时部分主要是完成显示等不需要实时的功能。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭