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;
}
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)