settimer示例

来源:互联网 发布:网络兼职被骗已追回 编辑:程序博客网 时间:2024/06/03 08:28
/*Description : setitimer() set the interval to run functionSynopsis    : #include <sys/time.h>              int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);              struct itimerval {                struct timerval it_interval;                struct timerval it_value;              };              struct timeval {                long tv_sec;                long tv_usec;              }            */#include <stdio.h>    // for printf()#include <unistd.h>   // for pause()#include <signal.h>   // for signal()#include <string.h>   // for memset()#include <sys/time.h> // struct itimeral. setitimer()#include <stdlib.h>#include <sys/ioctl.h> #include <fcntl.h> #include <linux/i2c-dev.h> #include <linux/i2c.h> #define CHIP "/dev/i2c-0" #define CHIP_ADDR 0x06 //remote slave device#define SELF_ADDR 0x05 //self i2c controller address#define I2C_SLAVE_RDWR 0x0709#define READ_SIZE 5#define WRITE_SIZE 40char readbuff[READ_SIZE],writebuff[WRITE_SIZE];struct i2c_rdwr_ioctl_data ioctldata;int fd;void SendMsg(int signum){    int ret;    ret = ioctl(fd, I2C_RDWR,(unsigned long )&ioctldata);    if (0 > ret)    {           printf("SendI2cMsg:call I2C_RDWR error\n");        return ret;    }}int main() {  // Get system call result to determine successful or failed    int res = 0;    struct i2c_msg msg;    int ret,i;      // Register printMsg to SIGALRM    signal(SIGALRM, SendMsg);    fd=open(CHIP,O_RDWR);    if (fd < 0)    {        printf("can not open file\n");        return 0;    }    if (ioctl(fd, I2C_SLAVE, CHIP_ADDR) < 0)    {         /* 设置芯片地址 */         printf("ioctl:set slave address failed\n");         goto close;      }    for(i = 0; i < WRITE_SIZE; i++)        writebuff[i] = i+1;    msg.len = WRITE_SIZE;    msg.addr = CHIP_ADDR;    msg.flags = 0;    msg.buf = writebuff;    ioctldata.nmsgs = 1;    ioctldata.msgs = &msg;    struct itimerval tick;      // Initialize struct    memset(&tick, 0, sizeof(tick));      // Timeout to run function first time    //first time     tick.it_value.tv_sec = 1;  // sec    tick.it_value.tv_usec = 0; // micro sec.      // Interval time to run function    #if 1    tick.it_interval.tv_sec = 0;    tick.it_interval.tv_usec = 100000;    #endif      // Set timer, ITIMER_REAL : real-time to decrease timer,      //                          send SIGALRM when timeout    res = setitimer(ITIMER_REAL, &tick, NULL);    if (res)     {        printf("Set timer failed!!/n");    }      // Always sleep to catch SIGALRM signalclose:    close(fd);    while(1)     {        pause();    }    return 0;  }
0 0
原创粉丝点击