当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]1 概述在嵌入式RTOS(Real Time Operating System)领域,日本T-Engine组织推出的T-Kernel以其开源免费,小体积强实时性内核,统一的接口规范等特点显出了优势;ADI. Blackf

1 概述

在嵌入式RTOS(Real Time Operating System)领域,日本T-Engine组织推出的T-Kernel以其开源免费,小体积强实时性内核,统一的接口规范等特点显出了优势;ADI. Blackfin系列处理器在嵌入式控制和数字信号处理领域应用非常广泛,同时结合了MCU(Micro Controller Unit)和DSP特点,非常适合于运行RTOS系统。

本文分析T-Kernel内核调度原理和Blackfin处理器内核结构,归纳了T-Kernel在Blackfin处理器BF533系统移植过程中的三个主要问题:中断管理,任务切换和系统调用入口三个模块的实现方法,并讨论了系统稳定性和实时性的测试以保证系统的稳定性和实时性。

2 T-Kernel概述

2.1 T-Kernel的系统结构

 


图1 T-Kernel的位置

T-Kernel的系统结构如图1所示,各功能模块是以子系统(subsystem)的形式存在的,如设备管理模块。

T-Kernel的内核是系统默认的子系统,它为应用层提供系统服务(SVC)接口,同时管理着其他子系统。子系统为应用层提供扩展服务(Extended SVC)调用接口。系统中各子系统运行在相互独立的地址空间中,保证了系统的模块化,易于扩充和裁减。

2.2 T-Kernel的系统状态和任务调度

T-Kernel规范[1]中对系统状态做了明确的划分和定义,移植相关的状态有:(1)任务态 (Task Portion),指系统运行在应用层最高优先级的就绪任务中;(2)任务无关态 (Task Independent Portion),指系统的中断和异常处理过程。任务无关态具有最高的执行优先权,可以中断其它状态的执行。

T-Kernel内核采用了基于优先级的可抢先调度策略,优先级相同的任务采用先进先出的时间片轮转调度,允许任务动态更改优先级。

T-Kernel的任务调度和切换是分离的过程。内核中维护着按照优先级排列的就绪任务TCB(Task Control Block)指针链表队列。全局指针ctxtsk指向当前运行任务的TCB。有更高优先级任务就绪时,全局指针schedtsk指向其TCB,此为任务调度过程;任务调度发生后,必须在条件满足时,系统触发软中断异常进行任务切换,将ctxtsk更新为schedtsk,程序转入新任务运行。

3 Blackfin处理器概述

Blakcfin处理器内核包含双算术处理单元的DSP引擎,执行RISK指令集,结合了优异的数字信号处理功能和完善的控制功能。.

Blackfin内核相关的寄存器除了堆栈和返回地址寄存器:SP(Stack Pointer),FP(Frame Pointer),RETS(Subroutine Return Address Register),RETI(Interrupt Return Address Register),通用数据寄存器R0~R7,通用地址寄存器P0~P7,还包含数字信号处理相关寄存器 L0~L3,LB0~LB1,LC0~LC1,LT0~LT1,ASTAT,A0~A1,I0~I3, B0~B3,M0~M3. 在任务切换和中断前后处理中,需要进行寄存器保存恢复及相应的设置[2]。

Blackfin处理器内核支持15个优先级的中断。ILAT寄存器显示当前触发的中断;IMASK寄存器控制各优先级中断的使能和禁止;IPEND寄存器显示当前执行的中断,其第4位IPEND[4]是全局中断的使能和禁止位。T-Kernel运行在第15级(最低)中断处理程序中,这样系统运行于Supervisor Mode,可以获得对处理器操作的最大权限[2]。

T-Kernel系统运行在ADSP-BF533 EZ-KIT LITE开发板,开发环境是ADI VisualDSP++4.5 Environment.

4 T-Kernel在BF533上的移植

4.1 系统中断管理

T-Kernel对处理器中断资源进行动态管理,在运行时任务可以动态更改中断向量表、注册和取消中断,通过系统服务tk_def_int(Define Interrupt Handler) 来实现。

在中断管理模块的移植中,需要考虑以下三点:

(1)保证中断状态寄存器IMASK的全局性

在进行上下文保存恢复和临界区管理时,必须维持IMASK寄存器为全局变量。如果每个任务都拥有一个局部的IMASK值,则一个任务等待的中断可能在另一个任务运行时被禁止,造成系统对中断无法实时响应。同时,tk_def_int函数需要实现不同任务对各级中断定义的互斥功能,以保证全局 IMASK的有效和系统的稳定。

(2)中断前后处理

中断前后处理是中断管理移植的关键,影响到系统稳定性和中断处理的实时性。它对于任务是不可见过程,执行不能被中断。其主要操作包括:保存和恢复上下文;设置标志变量标示任务无关态的嵌套;更改堆栈指针使中断子程序运行在处理器内部RAM;取得当前触发的最高优先级中断号对应的子程序地址进行调用;在中断后处理判断是否进行任务切换。

系统为中断程序分配独立的内部堆栈,使中断程序运行的地址空间独立于任务和虚拟存储地址,加快了中断程序的处理速度,在系统进入省电模式停止了外部存储器时也不影响对中断唤醒的响应。在T-Kernel系统中,中断处理属于任务无关态,其执行优先级高于任务态,在中断处理程序中发生的任务调度,需要延迟到中断结束才能进行切换。当任务无关态运行无嵌套,系统允许任务切换,schedtsk不等于ctxtsk三个条件满足时,中断结束后即转入任务切换。

(3)T-Kernel的系统时钟中断

T-Kernel的系统时钟中断使用Blackfin内核的core timer 6号中断。其前后处理步骤与(2)相同,为了保证系统稳定性和实时性,一般为系统时钟的中断程序分配单独的堆栈,使其在高速内部RAM中执行。

4.2 任务切换模块的移植

任务切换包括任务间上下文切换和中断到任务上下文切换,前者在临界区结束时触发软中断进入dispatch_entry()完成,后者则在中断后处理中调用tk_ret_int()开始执行。

 


图2 任务切换流程图

dispatch_entry()和tk_ret_int()的处理过程都是保存ctxtsk任务的上下文,替换ctxtsk为schedtsk,恢复其上下文,执行流程如图2所示。二者的不同在于dispatch_entry()软中断的优先级为14级,而tk_ret_int()在中断后处理中被调用,仍处于中断过程,其优先级由中断处理程序的优先级决定;这样可能出现tk_ret_int()嵌套dispatch_entry()的情况,所以在从tk_ret_int()切入新任务或低功耗状态之前需要判断是否需要清除IPEND寄存器中断执行的标志。当没有就绪任务时,schedtsk值为空,系统转入低功耗状态。[!--empirenews.page--]

T-Kernel系统中的每个任务可以定义一个特定的任务异常处理程序,任务异常处理被触发后,优先于该任务得到执行。

4.3系统调用入口移植

T-Kernel对应用层调用系统服务和扩展服务进行了限制,只能调用相应的接口函数(以tk_***_***()命名的API),在接口函数中触发软中断进入Call_entry(),在Call_entry()函数中才能取得实际服务函数(以_tk_***_***()命名)的入口地址执行[3]。处理流程如图3所示。系统调用可能发生在中断过程中,所以Call_entry()软中断异常的优先级需要设为最高。Fncd是每个服务函数唯一的标识码,从中可以判断出该函数是系统服务还是子系统的扩展系统服务,后者需要通过svc_ientry()函数调用。

 


图3 T-Kernel系统调用处理流程

5 移植测试

移植测试工作主要分为稳定性测试和实时性测试两部分。测试的目的是保证移植工作的正确性。

通过新建15个不同优先级的任务进行休眠暂停请求异常处理和请求信号量等操作,同时定义计时器中断唤醒任务,可以测试系统的稳定性。移植系统的实时性可以通过任务的建立时间,结束时间,任务的切换时间,抢占时间,中断延迟时间,信号量混洗时间等指标来确定。

任务切换时间为系统在两个具有相同优先级独立任务之间切换所需的时间。抢占时间定义为系统控制从低优先级任务转移到高优先级任务所花费的时间。中断延迟时间指从中断响应到中断子程序语句得到执行的时间间隔。信号量混洗时间指一个信号被释放到等待该信号量的任务被激活的时间延迟[6]。部分的测试结果如表5.1所示。移植代码编译为速度优化100%,时间单位是Blackfin处理器cycles寄存器所记录的运行时钟周期。可以看到,系统运行在600MHz时的性能指标都在微秒级。

 

表1 部分适时性测试时间结果

6 总结

本文针对Blackfin处理器(BF533)平台上移植T-Kernel的应用需求,分析和归纳了移植的主要过程,总结了中断管理、任务切换和系统调用接口三部分的移植方法,对系统的稳定性和实时性进行相应的测试以保证移植工作的正确性。移植过程揭示了T-Kernel内核任务调度的原理和技术细节,对于其它RTOS的开发有很大的借鉴意义。

文中所讨论的移植方法,没有包括对于MMU(Memory Management Unit)管理模块的移植,因为在绝大多数嵌入式实时性应用中,由于对速度和资源的限制,并不开启处理器的MMU功能,如果在数据和信息处理的应用中有需求,可以针对特定处理器的MMU模块进行相关代码的移植。

(特别感谢上海易律电子刘湘毅的技术支持)

参考文献

[1] T-Engine Forum T-Kernel Specification Version 1.00.00 2005

[2] ADI ADSP-BF533 Blackfin Processor Hardware Reference Revision 3.0 Feb 2004

[3] Mohit Sindhwani, Anatomy of a T-Engine System Call, page:www.onghu.com/te 2006

[4]T-Engine Forum T-Kernel Implementation guide to New Hardware Rev.1.00.01 2006.06.2

[5]黄天戍,李秀红 RTOS数据采集系统中实时处理与高速性的设计考虑[J] 微计算机信息 No.28 P.95-97 2005

[6] 李庆诚,顾健 嵌入式实时操作系统性能测试方法研究 单片机与嵌入式系统应用

NO.8 P.19-21 2005

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

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 隧道灯 驱动电源
关闭