当前位置: 首页 > news >正文

网站设计制作一条龙免费哈尔滨建设网站哪家专业

网站设计制作一条龙免费,哈尔滨建设网站哪家专业,dw如何做商业网站,国外网站注册软件1.linux内核定时器基本结构和函数 1#xff09;struct timer_list 一个struct timer_list对应了一个定时器。 #include linux/timer.h 以下列出常用的接口#xff1a; struct timer_list{/*....*/unsigned long expires;//定时器服务函数开始执行时间void (*func…1.linux内核定时器基本结构和函数 1struct timer_list 一个struct timer_list对应了一个定时器。 #include linux/timer.h 以下列出常用的接口 struct timer_list{/*....*/unsigned long expires;//定时器服务函数开始执行时间void (*function)(unsigned long);//定义一个指向定时器服务函数的指针function服务函数有一个 unsigned long的参数并且返回voidunsigned long data//定时时间到时data参数会传入服务函数}void init_timer(struct timer_list* timer)//初始化一个定时器 -----------使用定时器的步骤-------------- struct timer_list my_timer_list;//定义一个定时器可以把它放在你的设备结构中 init_timer(my_timer_list);//初始化一个定时器 my_timer_list.expirejiffiesHZ;//定时器1s后运行服务程序 my_timer_list.functiontimer_function;//定时器服务函数 add_timer(my_timer_list);//添加定时器 void timer_function(unsigned long);//写定时器服务函数 del_timer(my_timer_list);//当定时器不再需要时删除定时器 del_timer_sync(my_timer_list);//基本和del_timer一样比较适合在多核处理器使用一般推荐使用del_timer_sync ------------------------------------------------- 2.以下是一个定时1s的驱动程序直接上代码 /***************************************************************** 原子操作就是不能被更高等级中断抢夺优先的操作。你既然提这个问题我就说深一点。 由于操作系统大部分时间处于开中断状态所以一个程序在执行的时候可能被优先级更高的线程中断。 而有些操作是不能被中断的不然会出现无法还原的后果这时候这些操作就需要原子操作。就是不能被中断的操作。1.atomic_read与atomic_set函数是原子变量的操作就是原子读和原子设置的作用. 2.原子操作就是执行操作的时候其数值不会被其它线程或者中断所影响 3.原子操作是linux内核中一种同步的方式 typedef struct { volatile int counter; } atomic_t;#define ATOMIC_INIT(i) { (i) }#define atomic_read(v) ((v)-counter) #define atomic_set(v,i) (((v)-counter) (i)) ******************************************************************/ #include linux/miscdevice.h #include linux/delay.h #include asm/irq.h //#include mach/regs-gpio.h //#include mach/hardware.h #include linux/kernel.h #include linux/module.h #include linux/init.h #include linux/mm.h #include linux/fs.h #include linux/types.h #include linux/delay.h #include linux/moduleparam.h #include linux/slab.h #include linux/errno.h #include linux/ioctl.h #include linux/cdev.h #include linux/string.h #include linux/list.h #include linux/pci.h #include asm/uaccess.h #include asm/atomic.h #include asm/unistd.h #include asm/io.h #include asm/system.h #include asm/uaccess.h #define TIMER_MAJOR 300 #define TIMER_MINOR 0 dev_t timer_dev_t;//设备号 dev_t timer_dev_majorTIMER_MAJOR; dev_t timer_dev_minorTIMER_MINOR; struct TIMER_DEV { struct cdev cdev; atomic_t count; struct timer_list timer_list; }; struct TIMER_DEV* timer_dev; //---------timer interrupt function---------------- static void timer_function(unsigned long data) { mod_timer((timer_dev-timer_list),jiffiesHZ);//重新设置时间 printk(current jiffies is %ld,count%d\n,jiffies,timer_dev-count); //(timer_dev-count); atomic_inc((timer_dev-count)); } //--------timer release function-------------------- static int timer_release(struct inode* inode, struct file* filp) { del_timer_sync((timer_dev-timer_list)); return 0; } //----------------file open function----------------- static int timer_open(struct inode* inode,struct file* filp) { init_timer((timer_dev-timer_list));//初始化定时器 timer_dev-timer_list.functiontimer_function;//设置定时器处理函数 timer_dev-timer_list.expiresjiffiesHZ;//处理函数1s后运行 add_timer(timer_dev-timer_list);//添加定时器 atomic_set((timer_dev-count),0); //原子操作函数return 0; } //-------------------------------------- //----------------timer_read function--------------- static int timer_read(struct file* filp,char __user *buf,size_t count,loff_t* f_pos) { unsigned int counteratomic_read((timer_dev-count)); if(copy_to_user(buf,(unsigned int*)counter,sizeof(unsigned int))) { printk(copy to user error\n); goto out; } return (sizeof(unsigned int)); out: return (-EFAULT); } struct file_operations timer_ops{ .ownerTHIS_MODULE, .opentimer_open, .readtimer_read, .releasetimer_release, }; static int __init timer_init(void) { int ret; if(TIMER_MAJOR)//主设备号大于0静态申请设备号 { timer_dev_tMKDEV(TIMER_MAJOR,TIMER_MINOR); retregister_chrdev_region(TIMER_MAJOR,1,timer_dev);//first,count,name } else { retalloc_chrdev_region(timer_dev_t,0,1,time_dev); timer_dev_majorMAJOR(timer_dev_t); } if(ret0) { printk(cant get major %d\n,timer_dev_major); return ret; } //----------------------------------------------------------- timer_devkmalloc(sizeof(struct TIMER_DEV),GFP_KERNEL); memset(timer_dev,0,sizeof(struct TIMER_DEV)); cdev_init((timer_dev-cdev),timer_ops); //linux字符设备的注册cdev_add((timer_dev-cdev),timer_dev_t,1); //添加字符设备printk(init timer_dev success\n); return 0; } static void __exit timer_exit(void) { kfree(timer_dev); cdev_del((timer_dev-cdev)); unregister_chrdev_region(MKDEV(TIMER_MAJOR,0),1); } module_init(timer_init); module_exit(timer_exit); 测试程序 [cpp] view plaincopy #include stdio.h  #include stdlib.h  #include unistd.h  #include fcntl.h  int main()  {  int fd;  int i;  int counter0;  int old_counter0;  fdopen(/dev/timer_dev,O_RDWR);  if(fd0)  {  printf(open file error\n);  exit(1);  }  for(i0;i30;)//运行30s    {    read(fd,counter,sizeof(int));   if(counter!old_counter)      {       printf(second%d\n,counter);       old_countercounter;      i;      }      }  close(fd);  exit (0);    }  测试结果 添加模块后使用dmesg查看内核信息 [ 1239.176994] current jiffies is 235468,count123 [ 1240.174459] current jiffies is 235718,count124 [ 1241.171920] current jiffies is 235968,count125 [ 1242.169383] current jiffies is 236218,count126 测试程序的结果 second1 second2 second3 second4 second5 second6 second7 second8 second9 second10 second11
http://www.sadfv.cn/news/371702/

相关文章:

  • 一个公司可以备案两个网站免费主机空间免备案
  • 靖江建设局网站青提wifi小程序开发教程
  • 网站建设合同 简单微信开发者工具app
  • 浩森宇特北京网站建设展馆设计效果图图片
  • 小米的网站是哪个公司做的大气腐蚀网站建设
  • 英文外贸网站 php源码中国建设银行官网版本
  • 建设网站的一般步骤是网站什么做
  • 宝塔做的网站怎么就可以进去了wordpress完全静态化插件
  • 微博营销网站源码想注册一个做网站的公司
  • 免费的网站搭建网站建设域名什么意思
  • 长春建设厅网站首页建设网站招标文件
  • 网站开发技术项目实战wordpress文章分类一个
  • 网站加地图毕业设计做 什么网站好
  • 网站布局怎么设计如何还原wordpress
  • 深圳建设网站公做互联网网站的会抓
  • 做网站的原理做数据可视化的网站
  • 黄页大全18勿看2000网站企业黄页信息网
  • 涉县网站建设网站建设方案评审
  • 大气全屏通用企业网站整站源码南京怎么做网站
  • 网站广告的优势优秀seo平台
  • 河南城乡建设厅网站网站建设年度汇报
  • 做门户网站赚钱吗软件项目管理计划
  • 互联网100个创业项目韩国seocaso
  • 不属于常用网站建设的是手机的page怎么转wordpress
  • 国内哪家公司做网站最好什么语言建手机网站
  • 网站建站公司排名李志自己做网站
  • 广告设计公司目标顾客描述seo优化外链平台
  • 长沙网站制作培训基地专业团队张益达图片
  • 怎么找到要做网站推广的客户资源安卓开发者官网
  • 网站建设了流程石家庄网站建设专家