- From: Michael Thomas <Michael.Thomas_at_dynetics.com>
- Date: Mon, 4 Oct 2004 12:54:20 -0500
Sounds like a slick robot app! But it might need some tweaking to fit my
purpose. First, I need almost 15kHz. I was hoping it could get that fast
because the data is handed off to other hardware for processing. (How much
processing is performed inside the loop that gets 1kHz?)
Second, I need to programmatically know about each period to keep my I/O
coordinated - hence the question about interrupts. Would this template keep
my inputs and outputs interleaved 1-to-1?
// with comedi commands running
While (!stop_flag){
i=0;
while (i<AI_SIZE){ // update (overwrite) each ai sample on dpram
i += read(comedi_fileno(daq), *(dp_ram_ai+i), AI_SIZE-i);
}
// ao from 1-scan-old ai ready, write it
// (desperately wishing my ao board supported TRIG_FOLLOW)
write(comedi_fileno(ao), *dp_ram_ao, AO_SIZE);
}
Also, as an engineer who "also writes software", I do middle-school C, not
kernel hacking. KNOPPIX 3.4 has a 2.6.6 boot option (I've been using
2.4.26), and I heard 2.6 supports preemption, but how do I write a program
using it? I'm on a dual processor machine, so could I safely lock one
processor indefinitely? (RTAI would be *way* over my head - I'll probably
have enough trouble learning to make this a kernel module. I assume I'll
need to, given the timing... one thing at a time!)
Michael Thomas
-----Original Message-----
From: comedi-admin_at_comedi.org [mailto:comedi-admin_at_comedi.org] On Behalf Of
Bernd Porr
Sent: Monday, October 04, 2004 8:56 AM
To: Nils Juergens
Cc: comedi_at_comedi.org; Tao Geng
Subject: Re: nervous about command timing
Hi!
I do this usually with two comedi commands. One to aquire the data and
one which sends out the stuff. Under 2.6 with the preemptive option I
get 1kHz realtime I/O with just a "while (1)"-loop. My colleague Tao is
controlling a walking robot in that way. I've copied the mail to him.
/Bernd
www: http://www.berndporr.me.uk/
http://www.linux-usb-daq.co.uk/
Mobile: +44 (0)7840 340069
Work: +44 (0)141 330 5237
University of Glasgow
Department of Electronics & Electrical Engineering
Room 519, Rankine Building, Oakfield Avenue,
Glasgow, G12 8LT
Nils Juergens wrote:
> On Fri, 01.10.04, Michael Thomas <Michael.Thomas_at_dynetics.com> wrote:
>
>
>>trigger? That still wouldn't help my user code stay synced up. It just
>>seems there should be a better way.
>
>
> If it's a real time problem (it smells like one :-)) ) you need a real
time
> system, e.g. RTAI.
>
> It might work like this:
>
> * create an RTAI task
> * make task periodic
>
> in the task (via kcomedilib)
> * read samples (comedi_do_insn())
> * do stuff (calculations etc.)
> * write samples (comedi_do_insn())
>
> I think it's also possible to combine this method and comedi_command (for
> increased performance and decreased jitter in the sampling periode).
>
> hth,
> Nils
>
_______________________________________________
comedi mailing list
comedi_at_comedi.org
https://cvs.comedi.org/cgi-bin/mailman/listinfo/comedi
Received on 2004-10-04Z16:54:20