Hi all,
I am a new user of RTAI, RTnet and even Linux. 
I am using rtai-3.4-cv rtnet-0.9.8 and linux-2.6.17.
I want to *receive* UDP/IP data in a simple periodic fashion with sampling time 
constraint of 1ms. I am using the RTAI lxrt in hard real time mode.
I have followed the codes given in the example and put the rt_dev_recv(sockfd, 
msgStr,sizeof(msgStr), MSG_DONTWAIT) in a periodic task.
the segments are as follows:
static struct sockaddr_in local_addr;static struct sockaddr_in 
server_addr;static void *SendRcvFun(void *arg){    RT_TASK *handler;    //local 
handler    static struct {        unsigned long indx;        RTIME time;    } 
msg = {0,0};        int sockfd = 0;        int ret    = 0;    char msgStr[100] 
= "Hello world";    /* Set variables to zero.  */    memset(msgStr, 0, 
sizeof(msgStr));    memset(&local_addr, 0, sizeof (struct sockaddr_in));    
memset(&server_addr, 0, sizeof(struct sockaddr_in));
    /* Check arguments and set addresses. */
        local_addr.sin_family      = AF_INET;        local_addr.sin_addr.s_addr 
= INADDR_ANY;        local_addr.sin_port        = 
htons(11000);//htons(atoi(11000));
        server_addr.sin_family = AF_INET;        inet_aton("139.30.6.66", 
&server_addr.sin_addr);        server_addr.sin_port = htons(11000);
 
    rtf_create(FIFO, 2000);    mlockall(MCL_CURRENT | MCL_FUTURE);    sockfd = 
rt_dev_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);    if (sockfd < 0) {        
printf("Error opening socket: %d\n", sockfd);        exit(1);    }
                            //    if (!(handler= 
rt_task_init_schmod(nam2num("SRTSK"), 0, 0, 0,SCHED_FIFO, 0xFF))) {             
   printf("CANNOT INIT SendRcvFun\n");        rt_dev_close(sockfd);             
   exit(1);        }    rt_set_periodic_mode();    start_rt_timer(0);    period 
= start_rt_timer(nano2count(TIMERTICKS));    rt_task_make_periodic(handler, 
rt_get_time()+period, period);
    rt_make_hard_real_time();    /* Bind socket to local address specified as 
parameter. */    ret = rt_dev_bind(sockfd, (struct sockaddr *) &local_addr, 
sizeof(struct sockaddr_in));    /* Specify destination address for socket; 
needed for rt_socket_send(). */    rt_dev_connect(sockfd, (struct sockaddr *) 
&server_addr, sizeof(struct sockaddr_in));    //ret = rt_dev_recv(sockfd, 
msgStr, sizeof(msgStr), 0);    /* Send a message. */    rt_dev_send(sockfd, 
msgStr, sizeof(msgStr), MSG_DONTWAIT);    //rt_dev_recv(sockfd, msgStr, 
sizeof(msgStr), MSG_DONTWAIT);    //ret = rt_dev_sendto(sockfd, msgStr, 
sizeof(msgStr), 0);    endSendRcvFun = 0;
    while (!endSendRcvFun) {        rt_dev_send(sockfd, msgStr, sizeof(msgStr), 
MSG_DONTWAIT);        ret = rt_dev_recv(sockfd, msgStr, sizeof(msgStr), 
MSG_DONTWAIT);
        msg.indx = ret;        msg.time = rt_get_time_ns();        
rtf_put(FIFO, &msg, sizeof(msg));        //printk("h");        
rt_task_wait_period();    }    stop_rt_timer();    rt_make_soft_real_time();    
rt_dev_close(sockfd);    rt_task_delete(handler);    rtf_destroy(FIFO);    
printf("deletedTask\n");    return 0;}
 
Running this code gives an error that the LXRT has changed mode and getting 
hanged. Could anybody please help me in this regard.
_Monotosh Das_ 


_________________________________________________________________
Get the new Windows Live Messenger!
http://get.live.com/messenger/overview
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
RTnet-users mailing list
RTnet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rtnet-users

Reply via email to