T-Kernel在Blackfin处理器上的移植分析
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时的性能指标都在微秒级。
任务切换时间 | 抢占时间(中断触发) | 中断延迟时间 | 信号量混洗时间 | |
cycles | 1716 | 1662 | 424 | 1584 |
运行时间(600MHz) | 2.9us | 2.7us | 0.7 us | 2.6us |
表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
评论