Problem with RTAI and mouse device

Fernando Ibañez Alameda fibanez at robotiker.es
Tue Jul 26 16:18:36 CEST 2005


      Hi all,

      We are working with  rtai3.1 (kernel 2.4.26 Patch hal16-2.4.26).

      Our application has two parts: control (four RTAI task that are
blocked reading from one of the four different mailboxes defined, several
peridic task that run every  milisecond, and two routines that handle irq 3
and irq 7) and user interface (a QT application). This one needs a mouse
pointer (PS2 mouse). Both parts (control and QT application )run very well
together when the mouse is not plugged into the PS2 connector. Also the QT
application works fine with mouse and without RTAI control application.

      The problems arise when working with mouse: each time the mouse is
plugged into the PS2 connector (the kernel is built with mouse and PS2
support), just after 'insmodding' RTAI and control modules (rtai_hal,
rtai_lxrt,rtai_shm,rtai_mbx,rtai_sem and our application RTAI module) the
system freezes, as if RTAI 'does not like' mouse interrupt ...........

      Any ideas ?? Looking at rtai mailing archive, we have increased the
heap size dedicated to each rtai task from 2000 to 10000, but it does not
work.........

      Thanks in advance,

      The init module of our control application is:

int init_module (void)
{
    if ( (rt_mbx_init(&colaCONTROL, sizeof(MENSAJE) * 10)) == 0)
        printk("<1> Cola de mensajes de CONTROL funcionando...........\n");
    else{
        printk("<1> No se ha creado la cola de mensajes de
CONTROL...........\n");
        return 0;
    }
    if ( (rt_mbx_init(&colaAVANCE, sizeof(MENSAJE) * 10)) == 0)
        printk("<1> Cola de mensajes de AVANCE funcionando...........\n");
    else{
        printk("<1> No se ha creado la cola de mensajes de
AVANCE...........\n");
        return 0;
    }
    if ( (rt_mbx_init(&colaGIRO, sizeof(MENSAJE) * 10)) == 0)
        printk("<1> Cola de mensajes de GIRO funcionando...........\n");
    else{
        printk("<1> No se ha creado la cola de mensajes de GIRO...........
\n");
        return 0;
    }
    if ( (rt_mbx_init(&colaCORTE, sizeof(MENSAJE) * 10)) == 0)
        printk("<1> Cola de mensajes del terminal CORTE
funcionando...........\n");
    else{
        printk("<1> No se ha creado la cola de mensajes del terminal
CORTE...........\n");
        return 0;
    }

    //
    // SHARED MEMORIES
    //
    if ((ptrShMemUser = (SHMEM_USER *)rtai_kmalloc(MAGIC_SHMEM_USER,
SIZE_SHMEM_USER)) <= 0){
      printk("<1> Error memoria compartida de usuario...........\n");
      return(-1);
    }
    else {
      memset(ptrShMemUser, 0x00, SIZE_SHMEM_USER);
      printk("<1> Memoria compartida de usuario funcionando...........\n");
    }
    if ((ptrShMemMaq = (SHMEM_MAQ *)rtai_kmalloc(MAGIC_SHMEM_MAQ,
SIZE_SHMEM_MAQ)) <= 0){
      printk("<1> Error memoria compartida de máquina...........\n");
      return(-1);
    }
    else {
      memset(ptrShMemMaq, 0x00, SIZE_SHMEM_MAQ);
      printk("<1> Memoria compartida de máquina funcionando...........\n");

    }
    if ((ptrShMemComandos = (struct SComandos
*)rtai_kmalloc(MAGIC_SHMEM_COMANDOS, SIZE_SHMEM_COMANDOS)) <= 0){
      printk("<1> Error memoria compartida de comandos...........\n");
      return(-1);
    }
    else {
      memset(ptrShMemComandos, 0x00, SIZE_SHMEM_COMANDOS);
      printk("<1> Memoria compartida de comandos funcionando...........
\n");
    }

    // RTAI TASK 1
    //
    if ((rt_task_init(&TASKMaqEstControl,RT_MaqEstControl,0,10000,1,0,0))
== 0)
      printk("<1> Máquina de estados de CONTROL de MÁQUINA funcionando
...........\n");
    else
      printk("<1> Máquina de estados de CONTROL no se carga ...........
\n");

    rt_task_resume(&TASKMaqEstControl);
    rt_task_init(&TASKLeerUserPupitre,RT_LeerUserPupitre,0,10000,3,0,0);

    tick_period = start_rt_timer (nano2count(MILISEG));
    if (tick_period == 0){
      printk ("<1> Error de TIMER ..............\n");
      return 0;
    }

    now = rt_get_time();
    rt_task_make_periodic (&TASKLeerUserPupitre, (now+tick_period),
tick_period);
    printk("<1> Tarea periódica de lectura de señales del PUPITRE
funcionando...........\n");


    //
    // RTAI TASK 2
    //
    if ((rt_task_init(&TASKMaqEstAvance,RT_MaqEstAvance,0,10000,2,0,0)) ==
0)
      printk("<1> Máquina de estados de AVANCE funcionando ...........\n");
    rt_task_resume(&TASKMaqEstAvance);
    rt_task_init(&TASKPeriodicaAv,RT_PeriodicaAv,0,10000,3,0,0);

    rt_task_make_periodic (&TASKPeriodicaAv, (now+tick_period),
tick_period);
    printk("<1> Tarea periódica de AVANCE funcionando...........\n");

    if (rt_request_global_irq(IRQ_EncoderAvance, RutinaIntEncoderAvance) !
= 0){
        RT_PRINTK ("<1> \nAV: No se ha podido instalar el handler de INT
%d.\n", IRQ_EncoderAvance);
            return 0;
    }else{
      printk("<1> Interrupción AVANCE cargada...........\n");
    }

   // RTAI TASK 3
   //
    if ((rt_task_init(&TASKMaqEstGiro,RT_MaqEstGiro,0,10000,2,0,0)) == 0)
      printk("<1> Máquina de estados de GIRO funcionando ...........\n");
    rt_task_resume(&TASKMaqEstGiro);
    rt_task_init(&TASKPeriodicaGiro,RT_PeriodicaGiro,0,10000,3,0,0);

    rt_task_make_periodic (&TASKPeriodicaGiro, (now+tick_period),
tick_period);
    printk("<1> Tarea periódica de GIRO funcionando...........\n");
    //RUTINA DE INTERRUPCION.
    if (rt_request_global_irq(IRQ_EncoderGiro, RutinaIntEncoderGiro) != 0){
        RT_PRINTK ("\nGIRO: No se ha podido instalar el handler INT %d\n",
IRQ_EncoderGiro);
            return 0;
    }else{
      printk("<1> Interrupción GIRO cargada...........\n");
    }

    // RTAI TASK 4
    //
    if ((rt_task_init(&TASKMaqEstCorte,RT_MaqEstCorte,0,10000,2,0,0)) == 0)
      printk("<1> Máquina de estados de CORTE funcionando ...........\n");
    rt_task_resume(&TASKMaqEstCorte);
    rt_task_init(&TASKPeriodicaCorte,RT_PeriodicaCorte,0,10000,3,0,0);

    rt_task_make_periodic (&TASKPeriodicaCorte, (now+tick_period),
tick_period);
    printk("<1> Tarea periódica de CORTE funcionando...........\n");

    return 0;

}


Fernando Ibañez Alameda
ROBOTIKER ENERGÍA, TECNALIA
Parque Tecnológico, Edificio 202. E-48170 Zamudio (Bizkaia) (SPAIN)
Tel:  +34 94 600 22 66, Fax: +34 94 600 22 99
fibanez at robotiker.es, www.robotiker.com

********AVISO LEGAL / DISCLAIMER********
Este mensaje puede contener información confidencial, en propiedad o
legalmente protegida. Si usted no es el destinatario, le rogamos lo
comunique al remitente y proceda a borrarlo, sin reenviarlo ni conservarlo,
ya que su uso no autorizado está prohibido legalmente. / This message may
contain confidential, proprietary or legally privileged information. If you
are not the intended recipient of this message, please notify it to the
sender and delete without resending or backing it, as it is legally
prohibited.
****************************************************






More information about the Rtai mailing list