基于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环境下开发工业测控系统中实时应用程序的方法。
通过修改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环境下开发工业测控系统中实时应用程序的方法。
- 基于ARM与DSP的嵌入式运动控制器设计(04-25)
- 多核及虚拟化技术在工业和安全领域的应用(05-23)
- 基于ARM核的AT75C220及其在指纹识别系统中的应用(05-24)
- 基于FPGA安全封装的身份认证模型研究(05-27)
- 基于nRF2401智能无线火灾监控系统设计(04-01)
- 智能视频多媒体技术的应用(05-31)
