资讯详情

树莓派外设开发——定时器

1.综述 实现定时功能的方法有两种: (1)unsigned alarm(unsigned seconds)函数,结合signal函数 (2)itimerval结构体以及setitmer产生信号,组合signal信号处理函数处理产生的定时信号 2.首先unsigned alarm(unsigned seconds)函数 seconds为定义的几秒 代码如下

#include <stdio.h> #include <unistd.h> #include <signal.h>  void signal_handler() { 
            printf("hello\n");     alarm(1);///再次启动定时器   } int main() { 
             signal(SIGALRM,signal_handler);     //定时器为1s     alarm(1);///启动定时器     while(1);//防止程序退出      return 0; }  

定时一秒简单实现

3.itimerval结构体以及setitmer产生信号,组合signal信号处理数处理产生的定时信号 这种方法可以生成ms,us定时可用于舵机控制 具体方法如下: itimerval结构体

  struct itimerval   { 
            /* Value to put into `it_value' when the timer expires. */     struct timeval it_interval;     /* Time to the next timer expiration. */     struct timeval it_value;   };  

it_interval:设定时间 it_value:设置开始生效,启动定时器的时间

struct timeval { 
          __time_t tv_sec;  /* Seconds. */   __suseconds_t tv_usec; /* Microseconds. */ }; 

分别表示秒和微妙 setitimer()将value如果计时器的当前值设置为指向结构体ovalue不是NULL,返回计时器的原始值。

代码:

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

void signal_handler()
{ 
       
	static int i;
	i++;
	
	if(i == 2000){ 
       
		printf("hello\n");
		i = 0;
	}



}

int main(int argc, char const *argv[])
{ 
       
	struct itimerval itv;
	//设值定时时间
	itv.it_interval.tv_sec = 0;
	itv.it_interval.tv_usec = 500;

	//设置定时开始前,启动定时器的时间
	itv.it_value.tv_sec = 1;
	itv.it_value.tv_usec = 0;

	//设定定时方式
	setitimer(ITIMER_REAL,&itv,NULL);
	//信号处理
	signal(SIGALRM,signal_handler);
	//防止程序退出
	while(1);
	return 0;
}

标签: itv液压螺旋连接器

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

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

 深圳锐单电子有限公司