2014-02-25 43 views
0
char buf[256]; 
char buf2[30]; 


SOCKET sock; 
SOCKET fd; 
uint16 port = 18017; 





VOID CALLBACK TASK1(Task2ms_Raster) 
{ 

    uint32 startTime, stopTime; 
    startTime= GetStopWatch(); 

    /* Trigger DAQ for the 2ms XCP raster. */ 
    if(XCPEVENT_DAQ_OVERLOAD & Xcp_DoDaqForEvent_2msRstr()) 
    { 
     ++numDaqOverload2ms; 
    } 

    /* Update those variables which are modified every 2ms. */ 
counter32 += slope32; 

    /* Trigger STIM for the 2ms XCP raster. */ 
    if(enableBypass2ms) 
    { 
     if(XCPEVENT_MISSING_DTO & Xcp_DoStimForEvent_2msRstr()) 
     { 
    ++numMissingDto2ms; 
     } 
     } 
    stopTime = GetStopWatch(); 
    duration10ms = (uint32)(stopTime - startTime); 
} 

VOID CALLBACK TASK2(Task10ms_Raster) 
{ 
    uint32 startTime, stopTime; 
    startTime = GetStopWatch(); 
    //printf("hi1\n"); 

    /* Trigger DAQ for the 10ms XCP raster. */ 
    if(XCPEVENT_DAQ_OVERLOAD & Xcp_DoDaqForEvent_10msRstr()) 
    { 
     ++numDaqOverload10ms; 
    } 

    /* Update those variables which are modified every 10ms. */ 
    counter16 += slope16; 

    /* Trigger STIM for the 10ms XCP raster. */ 
    if(enableBypass10ms) 
    { 
     if(XCPEVENT_MISSING_DTO & Xcp_DoStimForEvent_10msRstr()) 
     { 
      ++numMissingDto10ms; 
     } 
    } 

    /* Perform XCP command processing. */ 
    //Xcp_CmdProcessor(); 
    stopTime = GetStopWatch(); 
    duration10ms = (uint32)(stopTime - startTime); 
} 


VOID CALLBACK TASK3(Task100ms_Raster) 
{ 
    uint32 startTime, stopTime; 
    startTime = GetStopWatch(); 

    /* Trigger DAQ for the 100ms XCP raster. */ 
    if(XCPEVENT_DAQ_OVERLOAD & Xcp_DoDaqForEvent_100msRstr()) 
    { 
     ++numDaqOverload100ms; 
    } 

    /* Update those variables which are modified every 100ms. */ 
    counter8 += slope8; 


    /* Trigger STIM for the 100ms XCP raster. */ 
    if(enableBypass100ms) 
    { 
     if(XCPEVENT_MISSING_DTO & Xcp_DoStimForEvent_100msRstr()) 
     { 
      ++numMissingDto100ms; 
     } 
    } 

    stopTime = GetStopWatch(); 
    Xcp_CmdProcessor(); 
    duration100ms = (uint32)(stopTime - startTime); 
} 




HANDLE TimerTask(unsigned int period,WAITORTIMERCALLBACK task,void* arg) 
{ 


    HANDLE HTimer =NULL; 

    //set the timer to call the timer routine in 2ms 
    if(!CreateTimerQueueTimer(&HTimer, NULL, (WAITORTIMERCALLBACK)task,(PVOID) arg, 0, period*1000, 0)) 
    { 
     printf("CreateTimerQueueTimer failed (%d)\n", GetLastError()); 
     return NULL; 
    } 


    return HTimer; 
} 


int startWinsock(void) 

{ 

    WSADATA wsa; 

    return WSAStartup(MAKEWORD(2,0),&wsa); 

} 


int CreateSocket() 
{ 
struct sockaddr_in server, client; // creating a socket address structure: structure contains ip address and port number 
WORD wVersionRequested; 
WSADATA wsaData; 
long rc, len; 
double Task2ms_Raster, Task10ms_Raster, Task100ms_Raster ; 
HANDLE h1, h2, h3; 
//u_long iMode = 1; 
//int sockoptval = 1; 


rc=startWinsock(); 

if(rc!=0) 

    { 

    printf("Fehler: startWinsock, fehler code: %d\n",rc); 

    return 1; 

    } 

    else 

    { 

    printf("Winsock gestartet!\n"); 

    } 

    // create socket 
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    if (sock ==INVALID_SOCKET) { 
     printf("Could not Create Socket\n"); 
     return 1; 

    } 

    else 

    { 

    printf("Socket created\n"); 

    } 





    // create socket address of the server 
    memset(&server, 0, sizeof(server)); 


    // IPv4 - connection 
    server.sin_family = AF_INET; 
    // accept connections from any ip adress 
    server.sin_addr.s_addr = htonl(INADDR_ANY); 
    // set port 
    server.sin_port = htons(port); 


    //Binding between the socket and ip address 
    rc= bind (sock, (struct sockaddr *)&server, sizeof(server)); 
    if(rc==SOCKET_ERROR) 

{ 

    printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); 

    return 1; 

} 

else 

{ 

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

} 


    //Listen to incoming connections 
    rc=listen(sock, 10); 

    if(rc==SOCKET_ERROR) 

{ 

    printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); 

    return 1; 

} 

else 

{ 

    printf("acceptSocket ist im listen Modus....\n"); 

} 

     len = sizeof(client); 
     fd = accept(sock, (struct sockaddr*) &client, &len); 


     if(fd ==INVALID_SOCKET) 
     { 

    printf("Fehler: accept, fehler code: %d\n",WSAGetLastError()); 

    return 1; 

} 

else 

{ 

    printf("Neue Verbindung wurde akzeptiert!\n"); 

     while(rc!=SOCKET_ERROR) 
    { 
    rc=recv(fd,buf,256,0); 
    if(rc==0) 
    { 
     printf("Server hat die Verbindung getrennt..\n"); 
     break; 
    } 
    if(rc==SOCKET_ERROR) 
    { 
     printf("Fehler: recv, fehler code: %d\n",WSAGetLastError()); 
     break; 
    } 
    XcpIp_RxCallback((uint16) rc, (uint8*) buf, (uint16) port); 



h1=TimerTask(2,TASK1,&Task2ms_Raster); 
h2=TimerTask(10,TASK2,&Task10ms_Raster); 
h3=TimerTask(100,TASK3,&Task100ms_Raster); 

// buf[rc]='\0'; 
// printf("Client sendet: %s\n",buf); 
// sprintf(buf2,"Du mich auch %s",buf); 
// rc=send(connectedSocket,buf2,strlen(buf2),0);jsd 

    } 
} 
    closesocket(sock); 
    closesocket(fd); 
    XcpIp_OnTcpCxnClosed((uint16) port); 
    WSACleanup(); 
    return 0; 

} 






int main() 
{ 


Xcp_Initialize(); 
CreateSocket(); 

return 0; 
} 



void XcpApp_IpTransmit(uint16 XcpPort, Xcp_StatePtr8 pBytes, uint16 numBytes) 
{ 
    long sentbytes; 


    if ((long)XcpPort==port){ 
      sentbytes=send(fd,(char*)pBytes,(long)numBytes,0); 
    } 
    XcpIp_TxCallback(port,(uint16)sentbytes); 
} 

我使用Windows操作系统的处理程序为每个2ms,10ms和100ms调度任务计时器。有人帮我创建一个计时器的Linux操作系统?上面的代码对于Windows操作系统工作正常。如何在linux中创建高分辨率定时器

回答

相关问题