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

【北京迅为】iTOP-4412精英版使用手册-第六十五章 Linux-定时器

iTOP-4412开发板【精英版】搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,兼具快速读取与大容量,纵使海量思考也能及时处理。配备三星S5M8767电源管理。配备Android、Linux+Qt、Ubuntu操作系统,开启学习、研发的全新方式。Exynos4412开发板处理器成功应用于三星GALAXYS3,联想K860,魅族MX2等热门产品当中,并取得巨大成功。功耗控制以及强劲的性能一直为业内称道,超过5000万片的出货量,足以证明其稳定性与可用性。已成为三星官方推广的处理器之一,并承诺长期供货。


第六十五章 Linux-定时器

65.1 Linux 定时器介绍

在 Linux 内核中,定时器叫做内核定时器,内核定时器用于控制某个函数,也就是定时器将要处理的函数在未来的某个特定的时间内执行。内核定时器注册的处理函数只执行一次, 即不是循环执行的。定时器的使用范围(延后执行某个操作,定时查询某个状态;前提是对时间要求不高的地方)。

65.2 内核时间概念

Hz:系统时钟通过 CONFIG_HZ 来设置,范围是 100-1000;HZ 决定使用中断发生的频率。如果就没有定义的话,默认是 100,例:1/200 = 5ms,说明 4412 中是 5ms 产生一次时钟中断。

内核的全局变量 jiffies:(记录内核自启动来的节拍数,启动的时候初始化为 0,内核之启动以来,产生的中断数)时钟中断,每产生一个中断,jiffies 就加 1。可以用来计算流逝时间和时间管理,jiffies 除以 Hz 得到内核自启动以来的秒数。

65.3 timer_list函数

struct timer_list {
/*
*All fields that change during normal runtime grouped to the
*same cacheline
*/
struct list_head entry;unsigned long expires;struct tvec_base *base;
void (*function)(unsigned long); 
unsigned long data;
int slack;#ifdef CONFIG_TIMER_STATSint start_pid; 
void *start_site;
char start_comm[16]; 
#endif
#ifdef CONFIG_LOCKDEPstruct lockdep_map lockdep_map; 
#endif
};

timer_list 参数

struct list_head entry 双向链表

unsigned long expires:超时时间,记录什么时候产生时钟中断

struct tvec_base *base:管理时钟的结构体

void *(function)(unsigned long):时钟中断产生之后的动作

unsigned long data:传递的参数

65.4 内核定时器实现的分析

add_timer 添加定时器

add_timer→mod_timer→ mod_timer(内核函数有下划线,表示“局部函数”)→internal_add_timer

管理内核时钟的结构体,struct tvec_base *base 结构体分析:

struct tvec_base {
spinlock_t lock;	//自旋锁
struct timer_list *running_timer;	//内核中正在处理的定时器
unsigned long timer_jiffies;	//内核目前正在处理的定时器时间
unsigned long next_timer;
struct tvec_root tv1;
{
struct list_head vec[TVR_SIZE];//256 长度数组TVR_SIZE→#define TVR_SIZE (1 << TVR_BITS)
TVR_BITS=8;
宏定义 CONFIG_BASE_SMALL=0
TVR_SIZE = 256
}
struct tvec tv2;	//64 长度数组
struct tvec tv3;
struct tvec tv4;
struct tvec tv5;
};

per_cpu 与 CPU 核多少有关

DEFINE_PER_CPU 看到这样的变量,就表明这个变量是和 CPU 核相关的。有一些宏定义是在内核目录的 config 文件配置的

internal_add_timer

分析 idx 参数

如果 idx<256,则将 time_list 添加到 TV1

如果 idx<256*64,则将 time_list 添加到 TV2

如果 idx<256*64*64,则将 time_list 添加到 TV3

如果 idx<256*64*64*64,则将 time_list 添加到 TV4

如果 idx > 0xffffffffUL,则将 time_list 添加到 TV5

 list_add_tail

双向链表操作函数都在 include/linux/list.h 文件中

http://www.dtcms.com/a/521827.html

相关文章:

  • 网页设计网站怎么做网站制作文案
  • rocky 9.5系统安装zabbix监控实现邮件告警
  • 梅河口网站建设张艺兴粉丝做的网站
  • 做杂志的网站有哪些哪个页面设计培训好
  • 国际贸易网站有哪些电影网站的建设目标
  • cuda13.0 torch2.9 python3.12 安装flash-attn window版的哪里有
  • 外贸公司网站制作公司网站的字体颜色
  • 免费源代码网站瑞安做网站
  • 专门做礼物的网站广州红盾信息门户网站
  • 单片机的开发——无人机篇(未完待续,有时间写)
  • 做网店哪个网站好中小互联网企业有哪些
  • 广州学建设网站啥都能看的浏览器
  • 丰浩网站建设中心软件开发合同范本免费
  • wordpress咋建站附近卖建筑模板市场
  • 性男女做视频观看网站响应式网站手机端尺寸
  • SpringBoot-Web开发之数据响应
  • 珠海专业网站建设费用360建筑官网
  • Linux 中的 DNS 工作原理(一):​​从 getaddrinfo 到 resolv.conf
  • 自己编程做网站骆诗网站建设
  • 在哪查找网站的建设者中文网站建设
  • python asyncio的各种用法与代码示例
  • 深圳网站营销型建设免费网络电话呼叫系统
  • Linux-基础IO(1)
  • 如何上传网站网站开发价格明细
  • 深圳英文网站制作定西建设厅网站
  • 面向边缘AI视觉系统的低成本硬件方案
  • 医疗网站建设市场网站维护中是怎么回事
  • 网站开发费如何入账课程培训网站建设
  • dw做的网站怎么放到服务器上网站设计应遵循的原则
  • 南宁工程建设网站有哪些网站建设中模板