[ Please don't reply on earlier postings when starting a new thread. ]

DOURNES Guillaume wrote:
> Hello,
> 
> I try to manage irq on my digital I/O board rtdm driver.
> So, I call rtdm_irq_request with RTDM_IRQTYPE_SHARED | RTDM_IRQTYPE_EDGE
> option to define my irq handler, in my rtdm open function.
> This irq handler works very good.
> So, I try to establish a callback system to inform my sofware when an
> valid interrupt is arrived.
> I don't know callback system, so i establish a rtdm semaphore.
> So, in my irq handler I call rtdm_sem_up, and I have an blocant ioctl
> where I call only rtdm_sem_down.
> 
> To test this method, I write a test code, where I create a rt task by
> calling rt_task_create(&Handler_IT_task, "Handler IT Task",0,50,0); and
> rt_task_start(&Handler_IT_task, &Handler_IT_task_proc, NULL);
> 
> And my task procedure is :
> 
> void Handler_IT_task_proc (void * arg)
> {
>       int ret;
>       while(1)
>       {
>               ret = rt_dev_ioctl(IO_Card_ID, DISCRETS_IOC_WAIT_IT, 0);
>               if (!ret)
>                       printf("IT detected\n");
>               else
>                       goto exit_Handler_IT_task;
>               //rt_task_suspend(&Handler_IT_task);
>       }
> exit_Handler_IT_task:
>       printf("Exit Handler IT task\n");
> }
> 
> My problem is that on IT reception, my work station freeze. But, if I
> call a suspend task after my blocant ioctl (see comment), and I call an
> task resume by a gets in my main function, all my interrupts are founded
> correctly.
> 
> I try to change the rtdm semaphore by a rtdm event, but the results are
> the same.
> 
> So, why my sofware is frozen when the Handler task procedure keep the
> hand ? Can I establish a really callback function instead of a blocant
> ioctl ?

Use CONFIG_XENO_OPT_WATCHDOG to ensure that you don't see a runaway
thread here. Alternatively, you could break out of the loop after some
iterations to check if this is the reason for your "locked-up" system.

Note that, if we should help you beyond this, we will need the driver
source code as well. How should we know otherwise when your driver
returns 0 and how long it suspends the caller?

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to