微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 硬实时操作系统-RTLinux

硬实时操作系统-RTLinux

时间:04-13 来源: 点击:

read_mutex_lock //锁定mutex,如果mutex已被锁定,阻塞当前线程直到解锁;

  pthread_mutex_trylock //锁定mutex,如果mutex已被锁定,函数立即返回;

  pthread_mutex_unlock //解锁mutex;

  互斥信号类型有PTHREAD_MUTEX_NORMAL (default POSIX mutexes)和PTHREAD_MUTEX_SPINLOCK (spinlocks)

3 RTLinux的编程实例分析

  下面结合一个具体的程序parport.c[4],对RTLinux的编程特点加以说明。程序parport.c中的实时线程在并口的2、3脚(并口的数据D0和D1)上周期输出信号1,而对应硬件中断7的实时中断服务程序将在并口的2、3脚输出信号0。连接并口的2脚和10脚(并口的确认信号线,对应于计算机的硬件中断7),则可在并口的2、3脚上产生一个方波信号。parport.c源程序如下:

#include

#include

#include

#include

#include

#include

pthread_t thread;

unsigned int intr_handler(unsigned int irq,struct pt_regs *regs){//中断服务函数

outb(0, 0x378); //输出字节0到并口数据线

rtl_hard_enable_irq(7); //使能硬件中断7

return 0;

}

void * start_routine(void *arg){ //实时线程

struct sched_param p; //定义实时线程控制参数的数据结构

p. sched_priority = 1; //设置优先级为1

pthread_setschedparam (pthread_self(), SCHED_FIFO, &p);//设置实时线程的控制参数

pthread_make_periodic_np(pthread_self(),gethrtime(),100000);//启动周期为10ns的实时线程

while (1){

pthread_wait_np(); //实时线程挂起

outb(3, 0x378); //实时线程周期执行,输出3到并口数据线

}

return 0;

}

int init_module(void) {//初始化模块

int status;

rtl_irqstate_t f;

rtl_no_interrupts(f); //保存当前的中断状态标志到变量f,并禁止中断

status=rtl_request_irq(7, intr_handler); //设置硬件中断7的处理程序

rtl_printf(″rtl_request_irq: %dn″, status); //输出的控制台

outb_p(inb_p(0x37A) | 0x10, 0x37A); //使能并口中断(硬件上)

rtl_hard_enable_irq(7);//使能中断7(软件上)

rtl_restore_interrupts(f); //按照变量f恢复当前的中断状态标志,并使能中断

return pthread_create (&thread, NULL, start_routine, 0);//创建实时进程thread

}

void cleanup_module(void) { //清除模块

rtl_free_irq(7); //禁止中断7

pthread_delete_np (thread); //删除实时进程thread

}

程序parport.c的make文件如下:

all: parport.o

include rtl.mk

clean:

rm -f *.o

按照如下命令对程序进行编译:

make

运行程序可采用以下命令:

modprobe rtl_sched //调入所需的处理模块

insmod parport.o //调入parport.o模块

  连接并口的2脚和10脚,即可通过示波器在并口的3脚上观测到输出的方波信号。

  可以看到,RTLinux的实时程序被编写成可加载的Linux内核模块,它能被动态地加入内存,不能执行Linux系统调用,模块的初始化代码对实时任务的结构作初始化,把实时任务的时限、周期和释放时间等实时参数传递给RTLinux。

  通过对Linux最小的改动,提供一种可靠且廉价的硬实时操作系统RTLinux。RTLinux开发者可以充分利用Linux提供的各种方便来编写任务的非实时部分,加速自己的任务进度。目前RTLinux的最新版本为3.1,支持Linux2.4内核,程序源代码可以通过网站http://www.rtlinux.org/免费下载。

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

网站地图

Top