Thanks everyone, but I've got it sorted out now. I upgraded from the
development RT-Linux (3.0 pre ?) to the latest 3.0 kernal and it seems
to have solved the problem of the one-shot pthread_make_periodic
function not resetting (I can't remeber changing anything else). Here's
the code for interest:
void *can_update(void *pparams)
{
volatile sched_can_msg_t *msg;
can_output_t can_output_data;
hrtime_t time, sched_time;
int i = 0;
while(1) {
msg = can_objects->can_messages;
time = gethrtime();
sched_time = time + 10000000LL;
for(i = 0; i < can_objects->no_entries; i++) {
if(msg->id >= 0) {
if(time > (msg->last_sent +
msg->period)) {
can_output_data.msg.port = msg->channel;
can_output_data.msg.id = msg->id;
can_output_data.msg.datalen =
msg->datalen;
memcpy(&can_output_data.msg.data, &msg->data,
sizeof(can_output_data.msg.data));
rtf_put(CAN_DRV_TX_FIFO,
&can_output_data, sizeof(can_output_t));
msg->last_sent = gethrtime();
}
if(sched_time > (msg->last_sent +
msg->period)) {
sched_time = msg->last_sent +
msg->period;
}
}
msg++;
}
pthread_make_periodic_np(pthread_self(), sched_time, 0);
pthread_wait_np();
}
return 0;
}
Regards
Karl Rentsch
> karl rentsch wrote:
>
> Hi all,
>
> I've got a problem I hope someone can help me with. I'm trying to put
a
> thread to sleep but I don't want to tie up the system using usleep()
or
> nanosleep(). I've tried using pthread_make_periodic_np configured as
a
> one shot timer (ie. it needs to repeat several times but for different
> time intervals) but it doesn't seem to work
> Any help would be much appreciated
> Thanks
> Karl Rentsch
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
--
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/