首先感谢xtang推荐的两篇文章,我通过两个方法改进了程序的实时性,一是用定时器脉冲触发,不用循环delay;二是加快系统的tick,把它变成100us。但是我有疑问当程序结束之后,系统会自动恢复到1ms么?
在做sigevent设置的时候出现问题:
…
// — setup timer and timer event
event.sigev_notify = SIGEV_PULSE;
event.sigev_coid = ConnectAttach ( ND_LOCAL_NODE, 0, chid, 0, 0 );
event.sigev_priority = getprio(0);
event.sigev_code = 1023;
event.sigev_value.sival_ptr = (void*)pulse_id;
assert ( event.sigev_coid != -1 );
…
if((pidClientIdentifier = spawn(“testprioup”, 0, NULL, &inInheritance,
szArguments, NULL)) == -1)
printf("[Server] Failed to launch client: %s
“, strerror
(errno));
else
printf(”[Server] Client created with PID = %d
",
pidClientIdentifier);
…
程序运行到spawn处就会一直block, 我在另一个例子程序中查到sigevent设置
#define Pulse_Timer _PULSE_CODE_MINAVAIL
event.sigev_notify = SIGEV_PULSE;
event.sigev_coid = ConnectAttach(ND_LOCAL_NODE, 0, chid, _NTO_SIDE_CHANNEL, 0);
event.sigev_priority = getprio(0);
event.sigev_code = Pulse_Timer;
程序运行正常,不知是为什么?