硬实时操作系统-RTLinux
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/免费下载。
- 简介RTLinux下的一种实时应用通信机制(05-15)
- RTlinux的介绍(08-15)
- 基于RTLinux的软件无线电侦察预处理系统(05-15)
- 利用RTLinux开发嵌入式应用程序的方案(03-07)