RTAI简介8

来源:百度文库 编辑:神马文学网 时间:2024/04/30 09:29:21
8
下面是用户空间的‘main’函数。它定义了相当数量局部变量和rt_process.c中的实时应用任务Slow_Thread and Fast_Thread的消息结构体
int main(void)
{
int cmd0, count = 0, nextcount = 0;
struct sched_param mysched;
char wakeup;
struct { char task, susres;
int flags;
long long time;} msg = {‘S‘,};
这行把函数‘endme’绑到信号的SIGINT上(将计算机的Ctrl按键-C产生)。当例子运行的时候,用户为了终止试验,可以敲击计算机的Ctrl-C。
signal (SIGINT, endme);
接 着,进程让它自己进程安排策略和优先级并相应linux的调度。Linux调度缺省规则为SCHED_OTHER,它是linux通常使用的分时处理策 略。SCHED_FIFO在进程调度的方式上取得更高水平的控制。SCHED_FIFO用比0大的静态优先级(在这种情况下,最大允许99)。使用这测略使得进程可以抢占其他用SCHED_OTHER,或更低的优先级的进程。如果这个调用失败,把警告信息写到终端后,进程退出。
mysched.sched_priority = 99;
if( sched_setscheduler( 0, SCHED_FIFO, &mysched ) == -1 ) {
puts(" ERROR IN SETTING THE SCHEDULER UP");
perror( "errno" );
exit( 0 );
}
到此,进程打开实时FIFO‘/dev/rtf0’。小数字‘0’如同在实时模块中的#define CMDFO。如果实时应用和这程序通信,这是最基本的。
if ((cmd0 = open("/dev/rtf0", O_RDONLY)) < 0) {
fprintf(stderr, "Error opening /dev/rtf0\n");
exit(1);
}