新闻中心

EEPW首页 > 汽车电子 > 设计应用 > 基于交流采样的实时微内核的设计

基于交流采样的实时微内核的设计

作者:■ 西安交通大学工业自动化系 余群兵 陈刚 魏巍 潘超军时间:2005-04-27来源:eaw收藏

摘    要:本文从的等间隔要求出发,提出了基于的实时的设计方法,详细介绍了实时设计中保证等间隔采样的具体措施,并给出了该内核的具体应用实例。
关键词:

引言
在微机型电力设备中,系统一般通过交流采样获取信号,然后采用傅氏滤波或快速傅立叶变换(FFT)等有等间隔采样要求的滤波算法提取信号特征量。在采样率为几十Ksps及以下时,定时触发A/D实现等间隔采样可通过简单硬件电路或微控制器内部定时器来实现。在传统的前后台软件设计方法中,一般是在定时器周期性中断服务程序中执行交流采样任务,其它功能绝大部分在后台的无限循环内完成。随着微控制器集成度的增加和应用要求的复杂化,前后台系统在大量的片内外设的使用和管理、任务实时性保证、程序可靠性和可移植性等方面显得力不从心。RTOS可以有效的解决上述诸多问题,它体现了一种新的程序设计思想和开放的框架,降低了程序的复杂度。
目前许多厂商提供的RTOS对中小应用系统成本影响较大,单片机、及有限的硬件资源也难于支撑整个系统的正常运行,且保证精确、频繁的等间隔交流采样也较困难。基于以上考虑,为了在保证等间隔采样的同时确保系统中计算、测频、保护、控制输出、数据存储、通讯、按键、液晶显示、实时时钟等诸多任务的实时性和降低软件设计的难度,本文提出了以采样间隔为内核粒度的微内核软件设计方法,并在TMS320LF2407A上实现了内核的代码级设计,代码约1K字,关键部分用汇编语言实现。

基本硬件配置
实时微内核采用了RTOS的任务调度方法,把CPU时间分成若干时间片,并根据某种调度算法把时间片分配给各个任务。微机型电力设备大都具备繁重的测量和运算任务,且响应时间非常重要,是典型的实时工业控制系统,因此采用抢先式微内核结构。
在抢先式内核的多任务处理中,用中断来实现任务环境(context)切换是一种较理想的机制。图1所示的是一个基于抢先式多任务内核的基本硬件配置。
定时器周期性地产生中断,强制CPU把控制权交给内核,周期中断服务程序调用任务调度函数,并切换至处在就绪态的最高优先级任务。定时器周期性中断产生时钟节拍(Clock Tick) 或内核粒度,时钟节拍是任务定时、任务延时和任务超时判断的时钟源,也是多任务调度实现和系统正常运行的基础。
为了严格满足交流采样等间隔的要求,可利用片内外设的特点对基本硬件配置做图2所示的改进。详细过程为:定时器GP Timer1周期性连续增计数,周期性的触发片内A/D转换,并在转换结束产生中断。由于A/D转换结束中断对等间隔要求不高,而等间隔采样通过上述方式已严格保证,因此满足微机型电力设备测量和运算的基本要求。

内核设计与实现
每个任务都是一个无限循环,它们具有各自独立的堆栈空间和不同的静态优先级。在实时微内核根据任务的状态进行任务调度时,任务状态也相应改变。因此,可用OSTSW和OSTID两个unsigned int变量来标识任务状态,并采用位影像法表示,每一位对应一个任务的状态:挂起、就绪或运行。任务状态字OSTSW可理解为任务就绪表,标识任务的就绪与否,其中高位表示高优先级任务,运行任务号OSTID则标识当前运行的任务。为了提高系统运行的稳定性和可移植性,任务堆栈及任务状态字等内核相关的数据区都放在DSP内部RAM中。考虑到DSP片内的RAM容量和实际应用要求,系统最多可容纳8个任务。
任务调度
内核进行任务调度时总是把CPU时间分配给就绪态任务中优先级最高的任务,调度过程如下:先将被挂起任务的微处理器寄存器压栈,然后找出处在就绪态的最高优先级任务,并对任务状态作相应改变,最后把它的寄存器值从栈中恢复到寄存器中并返回,实现任务的切换。任务调度分中断级调度和任务级调度两种,前者在周期性中断结束时调用,后者则在每个任务执行完成时调用。事实上,在中断级任务调度中,任务调度所做的仅仅是改变了恢复时的堆栈指针,而任务级调度则人为模仿了一次中断,因此两者调度部分基本相同,代码也是共用的。
由于等间隔采样是系统通过中断方式实现的,因此中断级任务调度仅增加了找出就绪态中最高优先级任务的执行代码。下面给出内核关键部分即任务调度的汇编实现。
OSCtxSw: CALL I$$SAVE,*
;任务环境保存
OSCtxSw_0: LDP #0
  CLRC SXM
  LACC _OSTSW,15
;找出优先级最高的就绪态任务
  MAR  *,AR2 
  LAR AR2,#0
  RPT #7
  NORM *+  ;用NORM指令逐位查找
  LAR AR0,_OSTID
  CMPR  0
  BCND NSwR,TC  
  SAR  AR2,_OSTID
;设置优先级最高的就绪态
;任务的任务号为当前任务号
  LAR  AR2,
#_OSStkPtr
  MAR *0+
  SAR  AR1,*  ;保存被切换任务的栈顶指针
  MAR *0-
  LAR  AR0,_OSTID
  MAR    *0+
  LAR    AR1,*  ;装载待运行任务的栈顶指针
NSwR: B I$$REST,*,AR1 ;任务环境恢复
任务定时和延时
当任务延时精确度要求较高或延时要求比较固定时,可采用任务定时的方法,由内核为任务直接提供延时服务;而当任务延时要求低或者延时要求比较灵活时,可由任务提出延时申请,再由内核处理延时操作。区分任务定时和延时将进一步提高内核的效率和实时性。
任务通讯
有多种方法可以保护任务之间共享数据和提供任务之间的通讯,但根据实际需要,仅设若干标志位作为任务信号,实现任务间的同步与互斥、标志事件发生与否等等。为了简化设计,让系统易于把握,尽量将关系密切的任务合并,从而尽可能减少任务间的通讯。

交流采样与内核粒度
由于微机型电力设备中交流采样是设备功能实现的基础,因此实时微内核的设计要以确保等间隔采样为前提。通过图2所示的方法,采样等间隔得到有效保证。其中,A/D转换结束中断取代定时器周期性中断,提供给实时微内核作为周期性中断实现时钟节拍。当某次时钟节拍被延迟,并不会影响到下一个时钟节拍的到来,因而整体上仍满足系统要求。周期性A/D转换结束中断处理程序内,系统要完成A/D转换结果处理以及多任务调度等系统调用。
在这里,内核粒度与交流采样的时间间隔对应,而周波(工频周期为20ms)采样点数一般为几十至几百个点,故内核粒度为几十ms至几百ms不等。但内核粒度越小,加在系统上的开销就越大,对存储空间也有更高的要求。mC/OS-II 内核粒度要求在10ms~200ms之间。但在某些要求较高的场合,大多数任务需要在周波内精确控制,且延时精度要求到ms级甚至更高,mC/OS-II难以满足要求。而使用采样间隔作为内核粒度,并对内核进行简化设计,可满足大多数交流采样系统的应用要求。

微内核的设计实例
图3为中压微机型继电保护装置的结构框图。为了突出微内核结构使编程模块化、简单化的优点,作为系统基础部分的交流采样在实例中不再列出,仅以总线式按键和液晶实现人机交互的一个简单例子来说明。
液晶屏上一般都要求显示实时时钟,为了秒位走时均匀,需要每隔1s重新绘制屏幕。当有按键操作时,则要求立即更新屏幕,否则产生延迟,反应显得迟缓,影响交互效果。系统每隔20ms检测是否有键按下,检测到按键时让按键响应任务就绪。按键响应任务处理完按键事件后,向内核提出恢复显示任务请求,然后挂起。当没有更高优先级就绪态任务时,执行显示任务。在没有按键的情况下,显示任务执行完当前操作后向内核提出延时服务申请,1s延时结束后任务重新运行,自动刷新屏幕。实现的示意性代码如下:
void Task_Display(void)
file://显示任务,6号任务
{ while (1)   
 { if(EnableShow)
ShowWindow(); file://显示单窗口
  OSTimeDly(1600);     file://延时1s
 }
}
void Task_KeyEvent(void)    file://按键响应任务,5号任务
{ while(1)
 { KeyHandle();        file://按键处理
  OSTimeDly
Resume(6); file://显示更新,撤销显示任务的延时
  OSTaskSuspend(5);    file://键盘响应任务挂起
 }
}
void OSTime20msHook(void)    file://20ms定时的Hook
{   if(KeyPressed&&EnableHandle)  file://如果有键按下并允许处理
 OSTSW|=OSTSM5;    file://让按键响应任务就绪
}

结语
本文提出了基于交流采样的实时微内核的设计方法,并在基于DSP的中压继电保护、绝缘在线检测等多个系统中得到实际应用。内核设计充分考虑了微机型电力设备信号测量和实时性要求以及资源有限的特点,吸收了诸多商用RTOS的优点,因而能够满足大部分交流采样系统的要求。同时,DSP在电力设备中的广泛使用使得上述设计方法具有一定的通用性,可以作为基于DSP的微机型电力设备的嵌入式软件开发平台。■

参考文献
1孙玉芳.嵌入式计算设计原理.北京:机械工业出版社,2002.2
2袁勤勇.嵌入式系统构件.北京:机械工业出版社,2002.2
3 朱一凡.面向关键任务实时嵌入式操作系统设计技术研究.仪器仪表标准化与计量, 2002.6



评论


相关推荐

技术专区

关闭