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

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指向的结构体设为计时器的当前值,如果value不是NULL,将返回计时器原有值。

代码:

#include <stdio.h>
#include <time.h>
#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;
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值