首页 > 其他分享 >第五章学习笔记

第五章学习笔记

时间:2023-10-31 13:24:47浏览次数:34  
标签:定时器 示例 中断 timer 学习 第五章 笔记 time include

一、硬件定时器
硬件定时器是计算机内部的硬件组件,用于生成定时中断信号。它通常由CPU或主板集成,可用于测量时间和执行定时操作。以下是一个简单的示例,演示如何在Linux上使用硬件定时器:

include <stdio.h>

include <stdlib.h>

include <signal.h>

include <sys/time.h>

void timer_handler(int signum) {
printf("Timer expired!\n");
exit(0);
}

int main() {
struct itimerval timer;
timer.it_value.tv_sec = 2; // 初始定时器值为2秒
timer.it_value.tv_usec = 0;
timer.it_interval.tv_sec = 0; // 重复间隔为0秒
timer.it_interval.tv_usec = 0;

signal(SIGALRM, timer_handler);

setitimer(ITIMER_REAL, &timer, NULL);

while (1) {
    // 等待定时器中断
}

return 0;

}
二、个人计算机定时器
个人计算机通常包含多种定时器,例如系统定时器、实时时钟和RTC(实时时钟芯片)。这些定时器用于同步计算机操作。以下是一个使用Linux系统时间函数的示例:

include <stdio.h>

include <time.h>

int main() {
time_t current_time;
struct tm *time_info;
char timeString[9];

time(&current_time);
time_info = localtime(&current_time);
strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);

printf("Current time: %s\n", timeString);

return 0;

}
三、CPU操作
操作系统需要与CPU协作,以实现定时操作。这包括中断处理和任务切换。具体的CPU操作通常依赖于操作系统的实现,不容易用代码示例表示。

四、中断处理
中断处理是操作系统处理硬件定时器中断的核心部分。中断处理程序通常由操作系统内核负责,但以下是一个简化的示例:

void interrupt_handler() {
// 处理定时器中断
// 执行相关操作
}
五、时钟服务函数
操作系统提供了一系列时钟服务函数,用于管理时间和定时操作。例如,time() 和 alarm() 是Unix/Linux中常用的时钟服务函数。

六、间隔定时器
间隔定时器允许在一定时间间隔内执行特定操作。这通常与硬件定时器结合使用。以下是一个示例,演示如何使用 alarm() 函数创建一个间隔定时器:

include <stdio.h>

include <unistd.h>

void interval_handler() {
printf("Interval timer expired!\n");
}

int main() {
signal(SIGALRM, interval_handler);
alarm(5); // 5秒后触发定时器中断

while (1) {
    // 等待定时器中断
}

return 0;

}
七、REAL模式间隔定时器
在实模式下,使用x86汇编语言编写的程序可以访问间隔定时器。这是一个复杂的主题,不容易用简短的代码示例来解释。

八、编程项目
为了更深入地了解定时器和时钟服务,可以尝试编写一个多线程的定时任务管理程序,允许用户创建、删除和管理定时任务。这将涉及到线程操作和计时器管理。

标签:定时器,示例,中断,timer,学习,第五章,笔记,time,include
From: https://www.cnblogs.com/heweiye/p/17800016.html

相关文章

  • 【笔者感悟】笔者的学习感悟【十】
    写在前面  今天笔者想来和大家讨论一下,刷算法题的一些心得  说到算法题想必很多同学都会有许许多多的讨论,有的同学认为刷算法题是必修课,有的同学认为算法不实用,工作中用不到。  那么笔者的态度是什么,以前其实已经说过了,还是那句话:必须刷  至于为什么,后面会解释,并且笔......
  • linux用户管理学习感悟与笔记
    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提......
  • -bash: java: command not found笔记
    文章目录场景解决方案找java的方法find命令进行查找根据java进程找寻具体位置场景linux系统执行java命令时报错:-bash:java:commandnotfound。解决方案可能是没有安装java(这种情况比较少)或者安装了java但是没有设置环境变量(一般是这种情况)。找java的方法find命令进行查找......
  • spring发送邮件笔记
    文章目录引入依赖配置代码附件url地址为空会不会报错接收方邮件地址错误会不会报错引入依赖推荐用spring集成依赖,不用一个包一个包找了。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>配......
  • pytorch 学习记录
    model.train():启用BatchNormalization和Dropout。作用:对BN层,保证BN层能够用到每一批数据的均值和方差,并进行计算更新;对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。model.eval():不启用BatchNormalization和Dropoutwithtorch.no_grad():with语句块内......
  • MQ迁移的学习与理解
    生产者是topic,消费者是group一个topic可以对应多个group,每个group可以对应一个或者多个tag配置文件更改topic与group之后会自动注册到阿里云rocketmq,不需要手动注册。 ......
  • Redis学习
    Redis数据结构Redis数据类型常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合),随着Redis版本的更新,后面又支持了四种数据类型:BitMap(2.2版新增)、HyperLogLog(2.8版新增)、GEO(3.2版新增)、Stream(5.0版新增)。应用场景String类型的应用场景:缓存对......
  • 学习开发振弦采集模块的注意事项
    学习开发振弦采集模块的注意事项(三河凡科科技/飞讯教学)振弦采集模块是一种用来实时采集和处理振弦信号的电子设备,在工业、航空、医疗等领域都有广泛应用。学习开发振弦采集模块需要注意以下几点: 一、硬件选择首先需要选择适合自己开发的振弦采集模块硬件,这需要根据自己的应用场景......
  • NOIP 2023 考前学习日记
    前言属于是闲着没事干,看到自己去年写过一次,所以再写一次。10月23日(今日运势:大吉)上午:调联考异或,没调出来。消消乐,想想想。消消乐,写写写。消消乐,卡卡卡。消消乐,寄寄寄。详见记录:link。下午:模拟考试,什么神仙水题啊(T4没看),谔谔谔。消消乐,谢谢MLE教皇的Trie-Tree,过了......
  • 信看课堂笔记—电路若只如初见
    本节课结合我们模块经常遇到的电子元器件和电路讲解下原理和方案选型认识电阻、电容和电感以下是电阻、电容和电感的作用的简要对比表格:作用电阻电容电感限制电流通过阻碍电流流动(欧姆定律I=U/R)阻止直流电流通过随频率增加而阻碍电流调整电路参数无法调整电路参数调整电路的频率响......