资讯详情

orangepizero2(全志H616)

系列文章目录

一、orangepi实现定时器 二、orangepi控制舵机


前言

通过实现定时器itimerval结构体以及setitimer产生信号,通过signal函数处理信号


1.引入头文件

#include <sys/time.h> #include <signal.h> 

2.函数和结构介绍

代码如下(示例):

struct itimerval { 
                         struct timeval it_interval; //设定时间                 struct timeval it_value;//设定程序运行到这个地方需要多长时间             };   struct timeval { 
                         long tv_sec;                /* seconds */                 long tv_usec;               /* microseconds */             }; int setitimer(int which, const struct itimerval *value,struct itimerval *ovalue); 

setitimer()将value假设计时器的当前值为指向结构体ovalue不是NULL,返回计时器的原始值。ovalue一般设置为NULL which:间歇计时器有三种选择 ITIMER_REAL //值为0,计时器值实时递减,发送的信号为SIGALRM。这个值用此值 ITIMER_VIRTUAL //值为1,计时器的值在过程中递减,发送的信号为SIGVTALRM。 ITIMER_PROF //值为2,计时器值在过程和系统运行过程中递减。发送的信号是SIGPROF。 返回说明: 成功运行时,返回0。失败返回-1。errno以下值设置 EFAULT:value或ovalue是无效指针 EINVAL:其值不是ITIMER_REAL。ITIMER_VIRTUAL 或 ITIMER_PROF之中的一个


signal(SIGALRM,signal_handler);//SIGALRM信号,signal_hander信号处理函数 

3.整体代码

实现定时,每1秒打印一次hello

#include <stdio.h> #include <sys/time.h> #include <stdlib.h> #include <signal.h> static int i; void signal_handler(int signum) { 
        
    i++;
    if(i==2000){ 
        
        printf("hello\n");
        i=0;
    }
}
int main()
{ 
        
    struct itimerval itv;

    itv.it_value.tv_sec=0;  //设置启动定时器时间
    itv.it_value.tv_usec=500;

    itv.it_interval.tv_sec=0;//设置定时时间
    itv.it_interval.tv_usec=500;

    if(setitimer(ITIMER_REAL,&itv,NULL)==-1){ 
           //设置定时方式
        perror("error");
        exit(-1);
    }

    signal(SIGALRM,signal_handler);//信号处理
    while(1);
    return 0;
}

标签: itv液压螺旋连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司