微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 工业电子 > 基于Linux的嵌入式工业测控系统

基于Linux的嵌入式工业测控系统

时间:07-30 来源:互联网 点击:
3.2 采用RTAI增强Linux实时性的实现

通过修改Linux内核相关的源文件,形成实时硬件抽象层。执行insmod命令,挂载上提供实时服务的rtai,rtai_sched,rtai_fifos模块,得到如下信息:  

Linux tick at 100Hz  
Calibrated cpu frequency 551268530Hz  
Calibrated 8254-timer-interrupt-to-scheduler latency 8000ns  
Calibrated one shot setup time 3000ns  
Module Size Used by  
rtai_sched 16608 0 unused  
rtai_fifos 33468 0 unused  
rtai 20728 1 (rati_sched rtai-fifos)  

加载上应用程序需要的RTAI模块后,就可以在RTAI-Linux环境下开发应用程序。  

3.3 基于RTAI-Linux的应用程序的开发  

针对工业测控系统的数据采集、数据处理、控制、通信等具体应用,将应用程序分为实时任务和非实时任务。实时任务利用RTAI提供的API来开发,编写成内核模块,工作在Linux的核心态。用户进程可利用Linux操作系统提供的大量资源,进行TCP/IP网络通信,开发图形用户界面程序等。实时任务之间、实时任务和非实时任务之间可通过Fifo队列和共享内存等方法通信。RTAI-Linux应用程序结构如图3-1所示。  

  
图3-1 RTAI-Linux应用程序结构图  

数据采集任务的实现在rt_process.c中的主要函数如下:  

static void data_collect()  
{  
rtf_put(FIFO,&data_value,sizeof(data_value);/*将采集的数据放入实时FIFO中*/  
rt_task_wait_period();  
}  
int int_module(void)  
rtime tick_period;  
rt_set_periodic_mode(); /*将定时器设置为周期模式*/  
rt_task_init(&rt_task,data_collect,l,Stack_size,task_priority,1,0);/*初始化数据采集任务*/  
return ()  
}  
void cleanup_module(void)  
{  
stop_rt_timer();  
rtf_destroy(FIFO);  
rt_task_delete(&rt_task);  
return;  
}  
数据显示程序的实现在disaplay.c中的主要函数:  
int main(void)  
{  
if((fifo=open("/dev/rtf()",()_rdonly)){  
fprintf(stderr,"Error opening/dev/rtf()\n");  
exit(1);  
}  
read(fifo,&data_value,sizeof(data_value));/*用户进程从实时FIFO中读取数据*/  
printf("data%f\n",data_value)  
}  
  
4、结论  

本文给出了一种应用于测控系统的基于Linux的嵌入式系统的设计方案,能保证测控任务完成的实时性、可靠性,可以连到工业以太网,实现远程监控,在工业控制领域有很好的应用前景。  

本文作者的创新点:在嵌入式系统软件的设计与实现上,提供了开发实时应用程序的接口;利用实时应用接口(RTAI)来增强Linux的实时性,并引入实时硬件抽象层结构(rthal)、实时调度器、实时FIFO等实时服务;给出了在RTAI-Linux环境下开发工业测控系统中实时应用程序的方法。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top