原程序是基于linux 2.6的,大概如下:
1.原程序创建了如下接收消息的线程,线程函数为 bufrecv_main;
-pthread_create(&desc->thid, &ctrl->pattr, bufrecv_main, desc);
2.在线程函数bufrecv_main中通过层层调用,最后调用了一个名为hxdrv_read的函数
int hxdrv_read(struct hxdrv_descriptor* desc,size_t count)
{
...此处省落一些代码
wait_event_interruptible(irq_rx_recv_queue, irq_rx_recv_flag != EVENT_NON);//个人理解此处应该是睡眠当前线程
...
rc = receive_pio_buf(desc);//实现接收消息功能
}
3.程序在初始化时注册了一个中断处理函数,主要机制是当有消息到来时,会触发中断,并调用此处理函数;
在中断处理函数中,会调用如下函数;
wake_up_interruptible(&irq_rx_recv_queue)//应该是唤醒上面被睡眠的线程,好执行接收消息的那个具体函数;
我的问题是:
我需要把程序移植到vxworks下,应该如何移植?
有没有什么方法,直接替换上面的睡眠和唤醒函数,而不需要其它大的改动啊?
------解决方案--------------------
vxworks也是POSIX接口兼容的,应该不用太大改动吧
------解决方案--------------------
创建一个信号量irq_rx_recv_queue
中断中用semGive通知线程
线程中用semTake等待