阅读背景:

如何连续运行该计时器任务?

来源:互联网 
static void timerHandler(int sig, siginfo_t *si, void *uc)
{
  timer_t *tidp;

  tidp = si->si_value.sival_ptr;

  if (*tidp == firstTimerID)

    TASK1(Task2ms_Raster);
  else if (*tidp == secondTimerID)
    TASK2(Task10ms_Raster);
  else if (*tidp == thirdTimerID)
    TASK3(Task100ms_Raster);
}

static int makeTimer(char *name, timer_t *timerID, int expireMS, int intervalMS)
{
  //sigset_t mask;
  struct sigevent te;
  struct itimerspec its;
  struct sigaction sa;
  int sigNo = SIGRTMIN;

  /* Set up signal handler. */
  memset(&sa, 0, sizeof(sa));
  sa.sa_flags = SA_SIGINFO;
  sa.sa_sigaction = timerHandler;
  sigemptyset(&sa.sa_mask);
  if (sigaction(sigNo, &sa, NULL) == -1)
  {
    perror("sigaction");
  }

  /* Set and enable alarm */
  te.sigev_notify = SIGEV_SIGNAL;
  te.sigev_signo = sigNo;
  te.sigev_value.sival_ptr = timerID;
  timer_create(CLOCK_REALTIME, &te, timerID);

  its.it_interval.tv_sec = 0;
  its.it_interval.tv_nsec = intervalMS * 1000000;
  its.it_value.tv_sec = 0;
  its.it_value.tv_nsec = expireMS * 1000000;
  timer_settime(*timerID, 0, &its, NULL);

  return 1;

}

int CreateSocket()
{

  socklen_t len = sizeof(client);
  // 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");

  }

  //non blocking mode
  /* rc = ioctl(acceptSocket, FIONBIO, (char *)&flag);
   if (rc < 0)
   {
   printf("\n ioctl() failed \n");
   return 0;
   }*/

  //Bind the socket
  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));

  if (rc == -1)
  {
    printf("Failure: listen, failure code:\n");

    return 1;
  }
  else
  {
    printf("Socket an port %d \n", port);

  }

  if (acceptSocket == -1)
  {
    printf("Fehler: accept, fehler code:\n");

    return 1;
  }
  else
  {
    while (rc != -1)
    {

      rc = recvfrom(acceptSocket, buf, 256, 0, (struct sockaddr*) &client,
          &len);
      if (rc == 0)
      {
        printf("Server has no connection..\n");
        break;
      }
      if (rc == -1)
      {
        printf("something went wrong with data %s", strerror(errno));
        break;
      }

      XcpIp_RxCallback((uint16) rc, (uint8*) buf, (uint16) port);
      makeTimer("First Timer", &firstTimerID, 2, 2);   //2ms
      makeTimer("Second Timer", &secondTimerID, 10, 10);    //10ms
      makeTimer("Third Timer", &thirdTimerID, 100, 100);  //100ms
      while (1)
        ;;

    }
  }

  close(acceptSocket);

  return 0;

}

int main()
{
  Xcp_Initialize();
  CreateSocket();
  return 2;
}

void XcpApp_IpTransmit(uint16 XcpPort, Xcp_StatePtr8 pBytes, uint16 numBytes)
{
  if ((long) XcpPort == port)
  {
    sentbytes = sendto(acceptSocket, (char*) pBytes, (long) numBytes, 0,
        (struct sockaddr*) &client, sizeof(client));
  }
  XcpIp_TxCallback(port, (uint16) sentbytes);
}
static void timerHandler(int sig, siginfo_t *si



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: