当前位置: 代码迷 >> VxWorks >> wake_up_interruptible怎么移植到vxwork下
  详细解决方案

wake_up_interruptible怎么移植到vxwork下

热度:275   发布时间:2016-04-28 11:25:30.0
wake_up_interruptible如何移植到vxwork下
原程序是基于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等待
  相关解决方案