zoukankan      html  css  js  c++  java
  • (linux自学笔记)linux内核定时器的使用

    原文地址:

    http://www.cnblogs.com/hebaichuanyeah/

    很显然linux的内核定时器基于时钟节拍(和ucos一样)。ucos的时钟节拍可由void OS_CPU_SysTickInit (INT32U cnts)函数设置。在linux中,时钟节拍在param.h中定义。

    timer驱动程序

    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/fs.h>
    #include <linux/init.h>
    #include <linux/delay.h>
    #include <linux/poll.h>
    #include <linux/irq.h>
    #include <asm/irq.h>
    #include <linux/interrupt.h>
    #include <asm/uaccess.h>
    #include <mach/regs-gpio.h>
    #include <mach/hardware.h>
    #include <linux/platform_device.h>
    #include <linux/cdev.h>
    #include <linux/miscdevice.h>
    #include <linux/sched.h>
    #include <linux/gpio.h>
    #include <mach/gpio-bank-n.h>
    
    #define DEVICE_NAME     "timer_device"
    #define DEVICE_MAJOR    240
    
    struct timer_list time_char_device;
    
    void timer_handle(void)
    {
        //改变定时器值
        mod_timer(&time_char_device,jiffies+HZ);
        printk("<0>timer handle
    ");
    }
    
    static int s3c6410_timer_open(struct inode *inode, struct file *file)
    {
        //初始化
        init_timer(&time_char_device);
        //中断处理函数
        time_char_device.function = &timer_handle;
        //定时器值
        time_char_device.expires = jiffies+HZ;
        //加入定时器
        add_timer(&time_char_device);
    
        return 0;
    }
    
    
    static int s3c6410_timer_close(struct inode *inode, struct file *file)
    {
        //删除定时器
        del_timer(&time_char_device);
        return 0;
    }
    
    
    
    static struct file_operations timer_device_fops =
    {
        .owner      =   THIS_MODULE,
        .open       =   s3c6410_timer_open,
        .release    =   s3c6410_timer_close,
    
    };
    
    
    
    static int __init timer_device_init(void)
    {
        int ret;
        printk ("<0>timer init
    ");
        //注册字符设备
        ret = register_chrdev(DEVICE_MAJOR,DEVICE_NAME,&timer_device_fops);
        if (ret <0)
        {
            printk ("<0>register %s char dev error
    ","timer");
            return -1;
        }
        printk ("<0>success
    ");
        return 0;
    }
    
    static void __exit timer_device_exit(void)
    {
        //注销设备
        unregister_chrdev(DEVICE_MAJOR,DEVICE_NAME);
        printk ("<0>module exit
    ");
    }
    
    module_init(timer_device_init);
    module_exit(timer_device_exit);
    
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("hebaichuan");

    测试程序

    #include <stdio.h>  
    #include <stdlib.h>  
    #include <unistd.h>  
    #include <sys/ioctl.h>  
      
    #define key_exit 5
    
    int main(int argc, char **argv)  
    {  
        int fd;  
            
        fd = open("/dev/timer_device",0);  
        if(fd<0) 
        {  
            printf("open devie error
    ");  
            return -1;  
        }  
      
        sleep(10);
        close(fd);  
        return 0;  
    }  

    程序运行结果

  • 相关阅读:
    java集合(5)-List集合
    String.matches()的用法
    1.在配置XML文件时出现reference file contains errors (http://www.springframework.org/schema/beans/...解决方案
    SVN教程(包括小乌龟) 全图解
    刚刚进公司不会SVN 菜鸟感觉好蛋疼-----------SVN学习记
    第二部分初始阶段 第六章 用例
    第二部分初始阶段 第五章 进化式需求
    SQL中分页与distinct冲突解决方案
    Java项目打war包的方法
    H5不能少的功能-滑动分页
  • 原文地址:https://www.cnblogs.com/hebaichuanyeah/p/3535321.html
Copyright © 2011-2022 走看看