嵌入式操作系统应用在高速实时信号处理系统中
| 板传送控制参数,读取定时接口板中存储的信处检测结果数据,响应外部中断,显示目标信息以及获得外部输入的控制信息。考虑到C语言的平台无关性和代码简介高效性,应用程序采用C语言编写。 系统划分为6个任务:(1)系统监控:启动和监控其他任务。(2)数据传输:响应VME中断,与定时接口板进行数据通信。(3)数据处理:对信处检测结果数据进行处理,扣除虚假目标并转换格式以方便显示。(4)终端显示:显示检测目标结果和系统状态信息到屏幕。(5)指令控制:响应控制开关的命令和获取惯导数据。(6)错误处理:对出现错误的任务做出响应的处理,并在终端显示。 中断服务程序响应定时VME7号中断,程序如下: if(intConnect( (VOIDFUNCPTR*)0xf0,intHdlr,0)==ERROR) { puts(″intInit:Error in connecting to the ISR″); return(ERROR);} if(sysIntEnable(7)==ERROR)/*响应7号VME中断*/ { puts(″intInit:Error in Enable ISR 7″); return(ERROR);} 图4显示了各任务的优先级。从中可以看到中断服务程序的优先级最高,因为实时系统要及时响应外部中断信号。 ![]() 指令控制任务首先获取外部开关命令和惯导数据,以消息的形式发送给数据传输任务。当中断来临时,中断服务程序马上释放同步信号量syncSemId。数据传输任务一直等待这个信号量,当获取到这个信号量时,立即把从指令控制任务收到的消息转换成模式字写到接口板的双口RAM中,接着读取信处检测结果数据。数据处理子任务获取同步信号量syncSemId2后对收到的信处检测结果数据进行处理,这一任务最耗时。终端显示任务以消息的形式接收上一任务的处理结果,并显示处理结果及系统目前的运行状态信息。信号量广泛应用于同步和对临界资源的保护,信号量的建立如下: if((syncSemId=semBCreate(SEM_Q_FIFO,SEM_EMPTY))==NULL) /*建立同步信号量*/ { puts(″nintInit:semBCreate failed″); return(ERROR);} if((inputGuardSemId=semMCreate(SEM_Q_PRIORITY|SEM_ INVERSION_SAFE|SEM_DELETE_SAFE))==NULL) /*建立互斥信号量*/ { puts(″nintInit:semMCreate failed″); return(ERROR);} 系统监控任务包括初始化各任务及实时监控各任务运行是否正常。当检测到某任务运行不正常时,启动错误处理任务。错误处理任务根据情况给予相应处理,并在终端显示。当系统发生严重错误时,系统会自动重启。 本文设计的信号处理机主要应用于直升机火控系统,现已经过验收,各项指标符合要求。随着设计的改进,系统功能将进一步完善,结构会更加通用模块化,从而实现不改变整个硬件系统平台,只对程序进行相应的修改,便可应用于其他领域的信号处理系统中。 |

