Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从linux代码到qnx代码有哪些变化?_C_Linux_Sockets_Timer_Qnx - Fatal编程技术网

C 从linux代码到qnx代码有哪些变化?

C 从linux代码到qnx代码有哪些变化?,c,linux,sockets,timer,qnx,C,Linux,Sockets,Timer,Qnx,我创建了一个套接字,通过ip地址和端口号从客户端接收数据。我创建了一个计时器,每2ms、10ms和100ms调用一次任务。上面的代码在linux上运行良好。但是如何将上述代码转换为QNX RTOS。我应该为QNX RTO做哪些更改。谁能帮帮我吗 如果我在qnx中使用相同的代码,那么它将在int fd_2ms=create_timer;时崩溃 请记住,QNX与Linux基本相同。如果我在Linux中通过更改库来使用上述代码,那么它将在create_定时器处崩溃;功能仅限!!!你能详细说明一下破裂的

我创建了一个套接字,通过ip地址和端口号从客户端接收数据。我创建了一个计时器,每2ms、10ms和100ms调用一次任务。上面的代码在linux上运行良好。但是如何将上述代码转换为QNX RTOS。我应该为QNX RTO做哪些更改。谁能帮帮我吗


如果我在qnx中使用相同的代码,那么它将在int fd_2ms=create_timer;时崩溃

请记住,QNX与Linux基本相同。如果我在Linux中通过更改库来使用上述代码,那么它将在create_定时器处崩溃;功能仅限!!!你能详细说明一下破裂的原因吗?你有编译器错误吗?链接器错误?运行时错误?请编辑您的问题,以包含这些信息,以及可能出现的编译器错误(如果有)的完整且未经编辑的日志。首先,您在Linux和QNX以及任何其他POSIX平台上使用的是错误的。timer_create只返回一个布尔成功/失败指示器,它是调用timer_settime时需要使用的timer_id。如果您的程序是为Linux工作的,那么您就很幸运了!可能您创建的第一个计时器的id为0,您只是更改了一个计时器,而不是三个不同的计时器。
int CreateSocket()
{
    //pthread_attr_t attr;

    // Socket creation for UDP

    acceptSocket = socket(AF_INET,SOCK_DGRAM,0);

    if(acceptSocket == -1)
    {
        printf("Failure: socket creation is failed, failure code\n");
        return 1;
    }
    else
    {
        printf("Socket started!\n");
    }

    memset(&addr, 0, sizeof(addr));

    addr.sin_family=AF_INET;

    addr.sin_port=htons(port);

    addr.sin_addr.s_addr=htonl(INADDR_ANY);

    rc=bind(acceptSocket,(struct sockaddr*)&addr,sizeof(addr));

    fcntl(acceptSocket, O_NONBLOCK);

    if(rc== -1)
    {
        printf("Oh dear, something went wrong with bind()! %s\n", strerror(errno));
        return -1;
    }
    else

    {
        printf("Socket an port %d \n",port);

    }
    return acceptSocket;
}


int create_timer (void)
{
    timer_t timer_id;




            int timerfd = timer_create (CLOCK_REALTIME, 0, &timer_id);
            if (timerfd < 0) {
        perror ("timerfd_create:");
                return -1;
        }
        return timerfd;
}

int start_timer_msec (int fd, int msec)
{
        struct itimerspec timspec;

        memset (&timspec, 0, sizeof(timspec));


        timspec.it_value.tv_sec = 0;
        timspec.it_value.tv_nsec = msec * 1000 * 1000;

        if (timer_settime(fd, 0, &timspec, NULL) < 0) {
                return -1;
        }
        return 0;
}

int main(int argc, char *argv[])
{


    Xcp_Initialize();

    int fd_2ms = create_timer();
    int fd_10ms = create_timer();
    int fd_100ms = create_timer();
    int rval = 0;

    if ((fd_2ms < 0) || (fd_10ms < 0) || (fd_100ms < 0)) {
        exit (1);
    }


    if ((sock = CreateSocket()) < 0) {
        perror ("Create_socket");
    //  fclose (fp);
        exit (1);
    }


    start_timer_msec (fd_2ms, 2);
    start_timer_msec (fd_10ms, 10);
    start_timer_msec (fd_100ms, 100);

    do
    {
        socklen_t len;
                int max_fd = 0;
                fd_set rdfds;

                FD_ZERO (&rdfds);

        GET_MAX_FD (max_fd, sock);
        FD_SET (sock, &rdfds);

        GET_MAX_FD (max_fd, fd_2ms);
        FD_SET (fd_2ms, &rdfds);

        GET_MAX_FD (max_fd, fd_10ms);
        FD_SET (fd_10ms, &rdfds);

        GET_MAX_FD (max_fd, fd_100ms);
        FD_SET (fd_100ms, &rdfds);

        rval = select (max_fd, &rdfds, NULL, NULL, NULL);

        if (rval < 0) {
            if (errno == EINTR)
                continue;
        } else if (rval > 0) {

                       /*Process CLI*/
                     if ((FD_ISSET (sock, &rdfds)))
            {
                                FD_CLR(sock, &rdfds);
                len = sizeof(client);

                printf("NEW DATA ARRIVED\n");
                //non blocking mode : MSG_DONTWAIT

                rc=recvfrom(sock, buf, 256, 0, (struct sockaddr*) &client, &len);

                //I am calculating the time here
                //InterruptTime = GetTimeStamp();
                //measurements[17] = InterruptTime;

                if(rc==0)
                {
                    printf("Server has no connection..\n");
                    break;
                }
                if(rc==-1)
                {
                    if (errno == SIGINT)
                        continue;
                    printf("Oh dear, something went wrong with read()! %s\n", strerror(errno));
                    break;
                }
                ConfigureISR( );

                XcpIp_RxCallback( (uint16) rc, (uint8*) buf, (uint16) port );
            }


                        if ((FD_ISSET (fd_2ms, &rdfds))) {
                                FD_CLR(fd_2ms, &rdfds);
                TASK1(Task2ms_Raster);
                start_timer_msec (fd_2ms, 2);
            }
                        if ((FD_ISSET (fd_10ms, &rdfds))) {
                                FD_CLR(fd_10ms, &rdfds);
                TASK2(Task10ms_Raster);
                start_timer_msec (fd_10ms, 10);
            }
                        if ((FD_ISSET (fd_100ms, &rdfds))) {
                                FD_CLR(fd_100ms, &rdfds);
                TASK3(Task100ms_Raster);
                start_timer_msec (fd_100ms, 100);
            }
        }
    } while (1);

    close(sock);
    //fclose (fp);

    return 0;
}